diff --git a/.snyk b/.snyk index 8037ac1d3..c2cc78150 100644 --- a/.snyk +++ b/.snyk @@ -1,5 +1,10 @@ version: v1.5.0 ignore: + 'SNYK-JS-BRACEEXPANSION-17706650': + - '* > serve-handler@6.1.7 > minimatch@3.1.5 > brace-expansion': + reason: 'ReDoS is fixed only in brace-expansion@5.0.7, whose CJS build uses a named export (exports.expand). Docusaurus'' serve-handler pins minimatch@3.1.5, which does `var expand = require(''brace-expansion'')` and calls it directly, so 5.0.7 throws "expand is not a function". minimatch 3.x cannot be upgraded (serve-handler needs its function-default API). Every other project in the repo is on the fixed brace-expansion@5.0.7 via overrides; this path is docs-only, build-time, over repository-controlled input, and not exploitable.' + expires: '2026-10-01T00:00:00.000Z' + created: '2026-07-01T00:00:00.000Z' 'SNYK-JS-SIRV-12558119': - '* > sirv@2.0.4': reason: 'Transitive dependency in Docusaurus; not exploitable in static site serving context (dev-only asset handler)' @@ -66,11 +71,6 @@ ignore: reason: 'Apollo usage-reporting-protobuf depends on @apollo/protobufjs and Snyk reports no fixed version. We are accepting this temporarily until Apollo provides a non-vulnerable upgrade path.' expires: '2026-07-31T00:00:00.000Z' created: '2026-04-30T00:00:00.000Z' - 'SNYK-JS-MONGOOSE-16425765': - - '* > mongoose@8.17.0': - reason: 'Mongoose 8.22.1 has TypeScript constraint errors in type definitions (types/inferrawdoctype.d.ts, types/inferschematype.d.ts) that break compilation. Patch attempts failed due to external library type incompatibilities. Risk is Low: requires control of query field names and values.' - expires: '2026-11-07T00:00:00.000Z' - created: '2026-05-07T09:00:00.000Z' 'SNYK-JS-BABELPLUGINTRANSFORMMODULESSYSTEMJS-16624576': - '* > @babel/plugin-transform-modules-systemjs@7.28.5': reason: 'Transitive dependency in Docusaurus; not exploitable in current usage.' @@ -93,8 +93,8 @@ ignore: created: '2026-06-08T00:00:00.000Z' 'SNYK-JS-OPENTELEMETRYEXPORTERPROMETHEUS-16758050': - '* > @opentelemetry/exporter-prometheus@0.57.2': - reason: 'Requires upgrade of @opentelemetry/sdk-node to 0.217.0, which has type errors that break compilation. Created task to upgrade OTEL service to 2.x and resolve vulnerability that way.' - expires: '2026-07-28T00:00:00.000Z' + reason: 'Requires upgrade of @opentelemetry/sdk-node to 0.217.0, which has type errors that break compilation. The OTEL 2.x migration was attempted and reverted (it introduced unrelated churn and broke the coverage gate); staying on the 1.x line for now, so this ignore must persist until the migration is properly scoped into its own change.' + expires: '2026-10-01T00:00:00.000Z' created: '2026-06-01T10:00:00.000Z' 'SNYK-JS-POSTCSSSELECTORPARSER-16873882': - '* > postcss-selector-parser': @@ -161,16 +161,11 @@ ignore: created: '2026-06-18T00:00:00.000Z' 'SNYK-JS-OPENTELEMETRYCORE-17373280': - '* > @opentelemetry/core': - reason: 'The fix requires migrating the Azure Functions telemetry stack from OpenTelemetry 1.x to 2.8.0 or newer. The current Azure exporter and 0.57.x SDK packages require the 1.x API family; a forced major override is type-compatible at build time but leaves mixed SDK internals. Accepted temporarily while the existing OTEL 2.x migration is completed.' - expires: '2026-07-18T00:00:00.000Z' + reason: 'The fix requires migrating the Azure Functions telemetry stack from OpenTelemetry 1.x to 2.8.0 or newer. The current Azure exporter and 0.57.x SDK packages require the 1.x API family; a forced major override is type-compatible at build time but leaves mixed SDK internals. The OTEL 2.x migration was attempted and reverted, so this remains accepted until the migration lands as its own properly scoped change.' + expires: '2026-10-01T00:00:00.000Z' created: '2026-06-18T00:00:00.000Z' - 'SNYK-JS-BRACEEXPANSION-17706650': - - '* > brace-expansion@1.1.13': - reason: 'Transitive in Docusaurus serve-handler for local static docs serving. The fixed brace-expansion 5.x line requires minimatch 10, whose named-export API is incompatible with serve-handler 6.1.7.' - expires: '2026-09-30T00:00:00.000Z' - created: '2026-06-30T00:00:00.000Z' 'SNYK-JS-OPENTELEMETRYPROPAGATORJAEGER-17901201': - - '* > @opentelemetry/propagator-jaeger@<=1.30.1': - reason: 'The transitive dependency of @opentelemetry does not have a fixed upgrade path. Accepted temporarily until upgrade paths are made available.' - expires: '2026-07-18T00:00:00.000Z' - created: '2026-06-18T00:00:00.000Z' + - '* > @opentelemetry/propagator-jaeger': + reason: 'Reintroduced by staying on the OpenTelemetry 1.x SDK line: @opentelemetry/sdk-trace-node@1.30.1 pulls @opentelemetry/propagator-jaeger@1.30.1 transitively. Fixed only in 2.9.0, which requires the OTEL 2.x migration that was reverted here (it bundled unrelated dependency churn and broke the new-code coverage gate). The Jaeger propagator is not used by the Azure Functions telemetry stack, so this is not exploitable in current usage. Accepted until the 2.x migration lands as its own scoped change; tracked alongside SNYK-JS-OPENTELEMETRYCORE-17373280 and SNYK-JS-OPENTELEMETRYEXPORTERPROMETHEUS-16758050.' + expires: '2026-10-01T00:00:00.000Z' + created: '2026-07-14T00:00:00.000Z' diff --git a/apps/api/package.json b/apps/api/package.json index 9702bbf82..3751437d6 100644 --- a/apps/api/package.json +++ b/apps/api/package.json @@ -47,6 +47,7 @@ "@opentelemetry/api": "1.9.0" }, "devDependencies": { + "@cellix/archunit-tests": "workspace:*", "@cellix/config-rolldown": "workspace:*", "@cellix/config-typescript": "workspace:*", "@cellix/config-vitest": "workspace:*", diff --git a/apps/api/src/archunit-tests/api-composition.test.ts b/apps/api/src/archunit-tests/api-composition.test.ts new file mode 100644 index 000000000..6f1ef5980 --- /dev/null +++ b/apps/api/src/archunit-tests/api-composition.test.ts @@ -0,0 +1,5 @@ +import { describeApiCompositionTests } from '@cellix/archunit-tests/api'; + +describeApiCompositionTests({ + apiIndexPath: 'src/index.ts', +}); diff --git a/apps/ui-community/package.json b/apps/ui-community/package.json index 1055de59f..45696e486 100644 --- a/apps/ui-community/package.json +++ b/apps/ui-community/package.json @@ -14,6 +14,7 @@ "start": "vite", "preview": "vite preview", "test": "vitest run --silent --reporter=dot", + "test:arch": "vitest run --config vitest.arch.config.ts", "test:coverage": "vitest run --coverage --silent --reporter=dot", "test:watch": "vitest", "storybook": "storybook dev -p 6008", @@ -38,6 +39,7 @@ "react-router-dom": "catalog:" }, "devDependencies": { + "@cellix/archunit-tests": "workspace:*", "@cellix/config-typescript": "workspace:*", "@cellix/config-vitest": "workspace:*", "@cellix/local-dev": "workspace:*", @@ -51,6 +53,7 @@ "@types/react": "^19.1.8", "@types/react-dom": "^19.1.6", "@vitejs/plugin-react": "^6.0.1", + "autoprefixer": "10.4.22", "@vitest/coverage-istanbul": "catalog:", "esbuild": "catalog:", "jsdom": "^26.1.0", diff --git a/apps/ui-community/src/archunit-tests/ui-app-composition.test.ts b/apps/ui-community/src/archunit-tests/ui-app-composition.test.ts new file mode 100644 index 000000000..6c4afc0eb --- /dev/null +++ b/apps/ui-community/src/archunit-tests/ui-app-composition.test.ts @@ -0,0 +1,6 @@ +import { describeUiAppCompositionTests } from '@cellix/archunit-tests/ui-app'; + +describeUiAppCompositionTests({ + appRoot: 'src', + requiredProviders: ['React.StrictMode', 'ThemeProvider', 'ConfigProvider', 'AntdApp', 'HelmetProvider', 'BrowserRouter', 'AuthProvider'], +}); diff --git a/apps/ui-community/vitest.arch.config.ts b/apps/ui-community/vitest.arch.config.ts new file mode 100644 index 000000000..c9624eb8f --- /dev/null +++ b/apps/ui-community/vitest.arch.config.ts @@ -0,0 +1,3 @@ +import { archConfig } from '@cellix/config-vitest'; + +export default archConfig; diff --git a/apps/ui-staff/package.json b/apps/ui-staff/package.json index df6341849..25902f1fb 100644 --- a/apps/ui-staff/package.json +++ b/apps/ui-staff/package.json @@ -14,6 +14,7 @@ "start": "vite", "preview": "vite preview", "test": "vitest run --silent --reporter=dot", + "test:arch": "vitest run --config vitest.arch.config.ts", "test:coverage": "vitest run --coverage --silent --reporter=dot", "test:watch": "vitest" }, @@ -39,6 +40,7 @@ "react-router-dom": "catalog:" }, "devDependencies": { + "@cellix/archunit-tests": "workspace:*", "@cellix/config-typescript": "workspace:*", "@cellix/config-vitest": "workspace:*", "@cellix/local-dev": "workspace:*", diff --git a/apps/ui-staff/src/archunit-tests/ui-app-composition.test.ts b/apps/ui-staff/src/archunit-tests/ui-app-composition.test.ts new file mode 100644 index 000000000..6c4afc0eb --- /dev/null +++ b/apps/ui-staff/src/archunit-tests/ui-app-composition.test.ts @@ -0,0 +1,6 @@ +import { describeUiAppCompositionTests } from '@cellix/archunit-tests/ui-app'; + +describeUiAppCompositionTests({ + appRoot: 'src', + requiredProviders: ['React.StrictMode', 'ThemeProvider', 'ConfigProvider', 'AntdApp', 'HelmetProvider', 'BrowserRouter', 'AuthProvider'], +}); diff --git a/apps/ui-staff/vitest.arch.config.ts b/apps/ui-staff/vitest.arch.config.ts new file mode 100644 index 000000000..c9624eb8f --- /dev/null +++ b/apps/ui-staff/vitest.arch.config.ts @@ -0,0 +1,3 @@ +import { archConfig } from '@cellix/config-vitest'; + +export default archConfig; diff --git a/knip.json b/knip.json index 04aeba72b..8b763226d 100644 --- a/knip.json +++ b/knip.json @@ -7,9 +7,10 @@ "ignoreDependencies": ["azurite"] }, "apps/ui-community": { - "entry": ["src/main.tsx", "start-dev.ts"], + "entry": ["src/main.tsx", "start-dev.ts", "postcss.config.cjs"], "project": ["src/**/*.{ts,tsx}"], - "ignore": ["**/apollo-client-links.tsx"] + "ignore": ["**/apollo-client-links.tsx"], + "ignoreDependencies": ["autoprefixer"] }, "apps/ui-staff": { "entry": ["src/main.tsx", "start-dev.ts"], diff --git a/packages/cellix/archunit-tests/manifest.md b/packages/cellix/archunit-tests/manifest.md new file mode 100644 index 000000000..54ceaa40b --- /dev/null +++ b/packages/cellix/archunit-tests/manifest.md @@ -0,0 +1,55 @@ +# @cellix/archunit-tests package manifest + +## Purpose + +Provide reusable architectural fitness checks that Cellix applications and libraries can register in their own Vitest suites. The package turns framework composition and organization conventions into executable, consumer-owned contracts. + +## Scope + +The package inspects TypeScript project source and registers Vitest architecture suites. It covers general framework composition, infrastructure initialization, package-layer conventions, and configurable source organization. + +## Public API shape + +Each focused export module exposes configuration types, asynchronous checkers that return all discovered violations, and `describe...Tests` helpers that register the checker with Vitest. + +## Core concepts + +- A checker reports violations without loading consumer runtime modules. +- A suite helper lets each consumer own and run its architecture contract. +- UI composition checks require configured providers to occur on the rendered component path to `App` and missing-root guards to terminate the invalid path. +- Configuration makes project paths and providers explicit, while Serenity bounded contexts are discovered from the consumer's standard context directory instead of embedding OCom-specific names in reusable rules. + +## Intended consumers + +- Cellix-based API and UI application entrypoints +- Cellix-based Serenity/Cucumber acceptance and end-to-end suites +- Cellix library packages that opt into the existing domain, persistence, GraphQL, application-service, frontend, or general conventions + +## Package boundaries + +- Public modules expose configuration types, violation-returning checkers, and Vitest suite registration helpers. +- Checks inspect consumer-owned source trees and do not import or execute consumer runtime code. +- Application-specific paths and bounded-context names are supplied by consumers. + +## Non-goals + +- Owning OCom-specific business rules or package names +- Generating application code +- Replacing behavioral, acceptance, or end-to-end tests +- Enforcing one fixed monorepo topology where a configurable project path is sufficient + +## Dependencies / relationships + +The package depends on Node filesystem APIs, Vitest for suite registration, and ArchUnit for established dependency checks. Consumer packages depend on a focused package subpath and provide only their own source paths and conventions. + +## Testing strategy + +Public contract tests exercise success and violation cases through module entrypoints. Real API, UI, acceptance, and E2E packages then register the reusable suites as downstream architecture tests. + +## Documentation obligations + +Every new public module must be represented in this manifest and the consumer README. Public functions require parameter, return, and usage documentation at their declaration. + +## Release-readiness standards + +The package build, full package test suite, and representative downstream consumer suites must pass. Additive exports must remain narrowly scoped; removals or behavior changes require downstream impact review and explicit migration guidance. diff --git a/packages/cellix/archunit-tests/package.json b/packages/cellix/archunit-tests/package.json index 96dcca505..ff57c093c 100644 --- a/packages/cellix/archunit-tests/package.json +++ b/packages/cellix/archunit-tests/package.json @@ -39,6 +39,18 @@ "./general": { "types": "./dist/src/general.d.ts", "default": "./dist/src/general.js" + }, + "./api": { + "types": "./dist/src/api.d.ts", + "default": "./dist/src/api.js" + }, + "./ui-app": { + "types": "./dist/src/ui-app.d.ts", + "default": "./dist/src/ui-app.js" + }, + "./serenity": { + "types": "./dist/src/serenity.d.ts", + "default": "./dist/src/serenity.js" } }, "scripts": { diff --git a/packages/cellix/archunit-tests/readme.md b/packages/cellix/archunit-tests/readme.md index 45619c042..db286f870 100644 --- a/packages/cellix/archunit-tests/readme.md +++ b/packages/cellix/archunit-tests/readme.md @@ -15,6 +15,49 @@ Current rules in this package include: - TypeScript compiler output conventions for `packages/cellix/*` - circular dependency checks across Cellix package source graphs - framework boundary checks, such as `ui-core` not depending on OCom UI code or app code +- API startup composition through infrastructure, context, application services, handlers, and startup, including service initialization during Azure `appStart` +- UI application bootstrap composition, including terminating missing-root validation, configured providers on the rendered path to `App`, and React Router +- Serenity/Cucumber managed-world initialization, concrete finalized server infrastructure, lifecycle cleanup, context loaders, and Screenplay delegation + +## Application Composition + +Register the API rule from the API package itself: + +```typescript +import { describeApiCompositionTests } from '@cellix/archunit-tests/api'; + +describeApiCompositionTests({ apiIndexPath: 'src/index.ts' }); +``` + +UI applications configure the providers their bootstrap is expected to compose around the rendered `App`. Providers may be nested through local wrapper components, but rendering one elsewhere does not satisfy the contract: + +```typescript +import { describeUiAppCompositionTests } from '@cellix/archunit-tests/ui-app'; + +describeUiAppCompositionTests({ + appRoot: 'src', + requiredProviders: ['ThemeProvider', 'BrowserRouter', 'AuthProvider'], +}); +``` + +## Serenity Suites + +Each acceptance or E2E package points the convention at its source root. Contexts are discovered automatically from the immediate directories under `src/contexts`. Infrastructure-backed suites can additionally require scenario cleanup and suite shutdown: + +```typescript +import { describeSerenitySuiteConventionTests } from '@cellix/archunit-tests/serenity'; + +describeSerenitySuiteConventionTests({ + suiteRoot: 'src', + requireManagedCleanup: true, +}); +``` + +The Serenity convention requires a managed world and lifecycle, a central context loader, context-local `*.steps.ts(x)` files, and steps that delegate through context-local Tasks, Interactions, or Questions. Suites that require managed cleanup must also export finalized `ApiInfrastructure` or `E2EInfrastructure` with at least one server; E2E infrastructure must include a UI portal. + +## Verifying the Architecture Tests + +The package includes intentionally incomplete portable projects under `src/fixtures/architecture-stubs/`. The package's normal architecture suite points each checker at its stub and asserts that the expected violations are reported. These test-of-the-tests run automatically through `test:arch`; no separate stub command or test area is required. ## What It Does Not Own diff --git a/packages/cellix/archunit-tests/src/api.ts b/packages/cellix/archunit-tests/src/api.ts new file mode 100644 index 000000000..169fa848b --- /dev/null +++ b/packages/cellix/archunit-tests/src/api.ts @@ -0,0 +1,3 @@ +export type { ApiCompositionConfig } from './checks/api-composition.js'; +export { checkApiComposition } from './checks/api-composition.js'; +export { describeApiCompositionTests } from './test-suites/api-composition.js'; diff --git a/packages/cellix/archunit-tests/src/application-composition.contract.test.ts b/packages/cellix/archunit-tests/src/application-composition.contract.test.ts new file mode 100644 index 000000000..0fe6c9967 --- /dev/null +++ b/packages/cellix/archunit-tests/src/application-composition.contract.test.ts @@ -0,0 +1,228 @@ +import { mkdir, mkdtemp, rm, writeFile } from 'node:fs/promises'; +import { tmpdir } from 'node:os'; +import path from 'node:path'; +import { afterEach, describe, expect, it } from 'vitest'; +import { checkApiComposition } from './api.js'; +import { checkUiAppComposition } from './ui-app.js'; + +const temporaryDirectories: string[] = []; + +afterEach(async () => { + await Promise.all(temporaryDirectories.splice(0).map((directory) => rm(directory, { force: true, recursive: true }))); +}); + +async function fixture(fileName: string, content: string): Promise { + const directory = await mkdtemp(path.join(tmpdir(), 'cellix-archunit-')); + temporaryDirectories.push(directory); + const filePath = path.join(directory, fileName); + await mkdir(path.dirname(filePath), { recursive: true }); + await writeFile(filePath, content); + return filePath; +} + +describe('application composition public contracts', () => { + it('accepts a complete Cellix API startup chain', async () => { + const apiIndexPath = await fixture( + 'index.ts', + `import { Cellix } from './cellix.ts'; +Cellix.initializeInfrastructureServices((registry) => registry.registerInfrastructureService(service)) + .setContext((registry) => { return { registry }; }) + .initializeApplicationServices((context) => build(context)) + .registerAzureFunctionHttpHandler('graphql', {}, handler) + .startUp();`, + ); + await writeFile( + path.join(path.dirname(apiIndexPath), 'cellix.ts'), + `export class Cellix { + private setupLifecycle() { + app.hook.appStart(async () => { + await this.startAllServicesWithTracing(); + this.contextInternal = this.contextCreatorInternal(this); + this.appServicesHostInternal = this.appServicesHostBuilder(this.contextInternal); + }); + } + private async startAllServicesWithTracing() { + await Promise.all(this.services.map((service) => service.startUp())); + } +}`, + ); + + expect(await checkApiComposition({ apiIndexPath })).toStrictEqual([]); + }); + + it('accepts aliased API composition imports and multiline callbacks', async () => { + const apiIndexPath = await fixture( + 'index.ts', + `import { Cellix as Application } from './cellix.ts'; +Application.initializeInfrastructureServices( + registry => registry.registerInfrastructureService(service), +) + .setContext(registry => ({ registry })) + .initializeApplicationServices(context => build(context)) + .registerAzureFunctionHttpHandler('graphql', {}, handler) + .startUp();`, + ); + await writeFile( + path.join(path.dirname(apiIndexPath), 'cellix.ts'), + `export class Cellix { + private setupLifecycle() { + app.hook.appStart(async () => { + await this.startAllServicesWithTracing(); + this.contextInternal = this.contextCreatorInternal(this); + }); + } +}`, + ); + + expect(await checkApiComposition({ apiIndexPath })).toStrictEqual([]); + }); + + it('reports omitted and out-of-order API startup stages', async () => { + const apiIndexPath = await fixture('index.ts', `import { Cellix } from './cellix.ts';\nCellix.startUp().setContext(() => ({}));`); + + const violations = await checkApiComposition({ apiIndexPath }); + expect(violations).toEqual(expect.arrayContaining([expect.stringContaining('initializeInfrastructureServices'), expect.stringContaining('initializeApplicationServices'), expect.stringContaining('registerAzureFunction')])); + }); + + it('reports a complete API startup chain composed in reverse order', async () => { + const apiIndexPath = await fixture( + 'index.ts', + `import { Cellix } from './cellix.ts'; +Cellix.startUp() + .registerAzureFunctionHttpHandler('graphql', {}, handler) + .initializeApplicationServices((context) => build(context)) + .setContext(() => ({})) + .initializeInfrastructureServices((registry) => registry.registerInfrastructureService(service));`, + ); + await writeFile( + path.join(path.dirname(apiIndexPath), 'cellix.ts'), + `export class Cellix { private setupLifecycle() { app.hook.appStart(async () => { await this.startAllServicesWithTracing(); this.contextInternal = this.contextCreatorInternal(this); }); } }`, + ); + + expect(await checkApiComposition({ apiIndexPath })).toEqual(expect.arrayContaining([expect.stringContaining('must be composed after')])); + }); + + it('reports a Cellix implementation that does not initialize infrastructure during app startup', async () => { + const apiIndexPath = await fixture( + 'index.ts', + `import { Cellix } from './cellix.ts'; +Cellix.initializeInfrastructureServices((registry) => registry.registerInfrastructureService(service)) + .setContext((registry) => { return { registry }; }) + .initializeApplicationServices((context) => build(context)) + .registerAzureFunctionHttpHandler('graphql', {}, handler) + .startUp();`, + ); + await writeFile(path.join(path.dirname(apiIndexPath), 'cellix.ts'), `export class Cellix { private setupLifecycle() { app.hook.appStart(async () => this.buildContext()); } }`); + + expect(await checkApiComposition({ apiIndexPath })).toEqual(expect.arrayContaining([expect.stringContaining('registered infrastructure services during appStart')])); + }); + + it('accepts a UI bootstrap with the configured providers and routed app', async () => { + const appRoot = path.dirname( + await fixture( + 'src/main.tsx', + `import { createRoot } from 'react-dom/client'; +import { BrowserRouter } from 'react-router-dom'; +import App from './App.tsx'; +const root = document.getElementById('root'); +if (!root) throw new Error('missing root'); +createRoot(root).render();`, + ), + ); + await writeFile(path.join(appRoot, 'App.tsx'), `import { Routes, Route } from 'react-router-dom';\nexport default () => } />;`); + + expect(await checkUiAppComposition({ appRoot, requiredProviders: ['ThemeProvider', 'BrowserRouter'] })).toStrictEqual([]); + }); + + it('accepts aliased React Router components', async () => { + const appRoot = path.dirname( + await fixture( + 'src/main.tsx', + `import { createRoot } from 'react-dom/client'; +import App from './App.tsx'; +const mount = document.getElementById('root'); +if (mount === null) throw new Error('missing root'); +createRoot(mount).render();`, + ), + ); + await writeFile( + path.join(appRoot, 'App.tsx'), + `import { Routes as RouteSwitch, Route as RouteEntry } from 'react-router-dom'; +export default () => } />;`, + ); + + expect(await checkUiAppComposition({ appRoot })).toStrictEqual([]); + }); + + it('accepts an assertion helper that guards the mount point', async () => { + const appRoot = path.dirname( + await fixture( + 'src/main.tsx', + `import { createRoot } from 'react-dom/client'; +import App from './App.tsx'; +const mount = document.getElementById('root'); +invariant(mount, 'missing root'); +createRoot(mount).render();`, + ), + ); + await writeFile(path.join(appRoot, 'App.tsx'), `import { Routes, Route } from 'react-router-dom';\nexport default () => } />;`); + + expect(await checkUiAppComposition({ appRoot })).toStrictEqual([]); + }); + + it('does not mistake an unrelated if and throw for mount-point validation', async () => { + const appRoot = path.dirname( + await fixture( + 'src/main.tsx', + `import { createRoot } from 'react-dom/client'; +import App from './App.tsx'; +const mount = document.getElementById('root'); +if (configuration.invalid) throw new Error('invalid configuration'); +createRoot(mount).render();`, + ), + ); + await writeFile(path.join(appRoot, 'App.tsx'), `import { Routes, Route } from 'react-router-dom';\nexport default () => } />;`); + + expect(await checkUiAppComposition({ appRoot })).toContain(`[${path.join(appRoot, 'main.tsx')}] UI bootstrap must guard against a missing root element`); + }); + + it('does not mistake work performed when the mount point exists for a missing-root guard', async () => { + const appRoot = path.dirname( + await fixture( + 'src/main.tsx', + `import { createRoot } from 'react-dom/client'; +import App from './App.tsx'; +const mount = document.getElementById('root'); +if (mount) console.info('mount found'); +createRoot(mount).render();`, + ), + ); + await writeFile(path.join(appRoot, 'App.tsx'), `import { Routes, Route } from 'react-router-dom';\nexport default () => } />;`); + + expect(await checkUiAppComposition({ appRoot })).toContain(`[${path.join(appRoot, 'main.tsx')}] UI bootstrap must guard against a missing root element`); + }); + + it('reports a required provider that does not wrap the rendered app', async () => { + const appRoot = path.dirname( + await fixture( + 'src/main.tsx', + `import { createRoot } from 'react-dom/client'; +import App from './App.tsx'; +const mount = document.getElementById('root'); +if (!mount) throw new Error('missing root'); +createRoot(mount).render(<>);`, + ), + ); + await writeFile(path.join(appRoot, 'App.tsx'), `import { Routes, Route } from 'react-router-dom';\nexport default () => } />;`); + + expect(await checkUiAppComposition({ appRoot, requiredProviders: ['ThemeProvider'] })).toContain(`[${path.join(appRoot, 'main.tsx')}] UI bootstrap must compose ThemeProvider around App`); + }); + + it('reports a UI entrypoint that skips root validation, providers, or routing', async () => { + const appRoot = path.dirname(await fixture('src/main.tsx', `import { createRoot } from 'react-dom/client';\ncreateRoot(document.getElementById('root')).render();`)); + await writeFile(path.join(appRoot, 'App.tsx'), 'export default () =>
;'); + + const violations = await checkUiAppComposition({ appRoot, requiredProviders: ['ThemeProvider'] }); + expect(violations).toEqual(expect.arrayContaining([expect.stringContaining('guard'), expect.stringContaining('ThemeProvider'), expect.stringContaining('Routes')])); + }); +}); diff --git a/packages/cellix/archunit-tests/src/checks/api-composition.ts b/packages/cellix/archunit-tests/src/checks/api-composition.ts new file mode 100644 index 000000000..8c1c84356 --- /dev/null +++ b/packages/cellix/archunit-tests/src/checks/api-composition.ts @@ -0,0 +1,97 @@ +import { readFile } from 'node:fs/promises'; +import path from 'node:path'; +import { callbackContainsCall, callbackReturnsObject, callPositions, findImportedBinding, parseTypeScript } from './typescript-source.js'; + +export interface ApiCompositionConfig { + /** Path to the API composition root, normally `src/index.ts`. */ + apiIndexPath: string; +} + +const requiredStages = ['initializeInfrastructureServices', 'setContext', 'initializeApplicationServices', 'registerAzureFunction', 'startUp'] as const; + +/** + * Check that an API entry point composes every Cellix runtime layer in startup order. + * + * @param config - Location of the consumer's API composition entrypoint. + * @returns Every composition violation; an empty array means the entrypoint complies. + * @example + * ```typescript + * await checkApiComposition({ apiIndexPath: 'src/index.ts' }); + * ``` + */ +export async function checkApiComposition(config: ApiCompositionConfig): Promise { + if (!config.apiIndexPath) { + throw new Error('checkApiComposition requires apiIndexPath to be set'); + } + + let content: string; + try { + content = await readFile(config.apiIndexPath, 'utf8'); + } catch { + return [`[${config.apiIndexPath}] API composition root must exist`]; + } + + const violations: string[] = []; + const source = parseTypeScript(config.apiIndexPath, content); + const cellixBinding = findImportedBinding(source, 'Cellix'); + if (!cellixBinding) { + violations.push(`[${config.apiIndexPath}] API composition root must import Cellix`); + } + + const syntaxPositions = callPositions(source, requiredStages); + const positions = requiredStages.map((stage) => ({ stage, position: syntaxPositions.get(stage) ?? -1 })); + for (const { stage, position } of positions) { + if (position < 0) { + violations.push(`[${config.apiIndexPath}] API composition root must call ${stage}${stage === 'registerAzureFunction' ? '* for at least one handler' : ''}`); + } + } + + const presentPositions = positions.filter(({ position }) => position >= 0); + for (let index = 1; index < presentPositions.length; index += 1) { + const previous = presentPositions[index - 1]; + const current = presentPositions[index]; + if (previous && current && current.position < previous.position) { + violations.push(`[${config.apiIndexPath}] ${current.stage} must be composed after ${previous.stage}`); + } + } + + if (!callbackContainsCall(source, 'initializeInfrastructureServices', 'registerInfrastructureService')) { + violations.push(`[${config.apiIndexPath}] initializeInfrastructureServices must register at least one infrastructure service`); + } + if (!callbackReturnsObject(source, 'setContext')) { + violations.push(`[${config.apiIndexPath}] setContext must build and return the runtime context`); + } + + await checkCellixInfrastructureLifecycle(config.apiIndexPath, cellixBinding?.moduleName, violations); + + return violations; +} + +async function checkCellixInfrastructureLifecycle(apiIndexPath: string, importPath: string | undefined, violations: string[]): Promise { + if (!importPath) { + return; + } + if (!importPath.startsWith('.')) return; + + const cellixPath = path.resolve(path.dirname(apiIndexPath), importPath); + let cellix: string; + try { + cellix = await readFile(cellixPath, 'utf8'); + } catch { + violations.push(`[${cellixPath}] Cellix infrastructure lifecycle implementation must exist`); + return; + } + + const appStartPosition = cellix.indexOf('app.hook.appStart'); + const serviceStartupPosition = cellix.indexOf('startAllServicesWithTracing', appStartPosition); + const contextCreationPosition = cellix.indexOf('contextCreatorInternal', appStartPosition); + if (appStartPosition < 0 || serviceStartupPosition < 0) { + violations.push(`[${cellixPath}] Cellix must initialize registered infrastructure services during appStart`); + return; + } + if (contextCreationPosition < 0) { + violations.push(`[${cellixPath}] Cellix appStart must create the runtime context after infrastructure initialization`); + } else if (serviceStartupPosition > contextCreationPosition) { + violations.push(`[${cellixPath}] Cellix must initialize infrastructure services before creating the runtime context`); + } +} diff --git a/packages/cellix/archunit-tests/src/checks/serenity-suite-conventions.ts b/packages/cellix/archunit-tests/src/checks/serenity-suite-conventions.ts new file mode 100644 index 000000000..7edeedb95 --- /dev/null +++ b/packages/cellix/archunit-tests/src/checks/serenity-suite-conventions.ts @@ -0,0 +1,201 @@ +import { access, readdir, readFile } from 'node:fs/promises'; +import path from 'node:path'; +import { containsCall, containsNewExpression, localImportName, parseTypeScript } from './typescript-source.js'; + +export interface SerenitySuiteConventionsConfig { + /** Source root containing the suite world, lifecycle hooks, and contexts. */ + suiteRoot: string; + /** Require per-scenario cleanup and suite-level infrastructure shutdown. */ + requireManagedCleanup?: boolean; +} + +async function exists(filePath: string): Promise { + try { + await access(filePath); + return true; + } catch { + return false; + } +} + +/** + * Check the managed-world and Screenplay organization contract of a Serenity suite. + * + * @param config - Suite source root and cleanup policy. Context directories are discovered automatically. + * @returns Every initialization or organization violation; an empty array means the suite complies. + * @example + * ```typescript + * await checkSerenitySuiteConventions({ suiteRoot: 'src' }); + * ``` + */ +export async function checkSerenitySuiteConventions(config: SerenitySuiteConventionsConfig): Promise { + if (!config.suiteRoot) { + throw new Error('checkSerenitySuiteConventions requires suiteRoot to be set'); + } + const violations: string[] = []; + const worldPath = path.join(config.suiteRoot, 'world.ts'); + const lifecyclePath = path.join(config.suiteRoot, 'cucumber-lifecycle-hooks.ts'); + const loaderPath = path.join(config.suiteRoot, 'step-definitions', 'index.ts'); + const contextsRoot = path.join(config.suiteRoot, 'contexts'); + + for (const requiredPath of [worldPath, lifecyclePath, loaderPath]) { + if (!(await exists(requiredPath))) { + violations.push(`[${requiredPath}] Required Serenity suite file must exist`); + } + } + + if (await exists(worldPath)) { + const world = await readFile(worldPath, 'utf8'); + const source = parseTypeScript(worldPath, world); + const registerWorld = localImportName(source, '@cellix/serenity-framework/cucumber', 'registerManagedSerenityWorld'); + const serenityCast = localImportName(source, '@cellix/serenity-framework/serenity', 'SerenityCast'); + if (!registerWorld || !containsCall(source, registerWorld)) { + violations.push(`[${worldPath}] Managed world must use registerManagedSerenityWorld from @cellix/serenity-framework/cucumber`); + } + if (!serenityCast || !containsNewExpression(source, serenityCast)) { + violations.push(`[${worldPath}] Managed world must use SerenityCast from @cellix/serenity-framework/serenity`); + } + for (const required of ['createCast:', 'useNotepad: true']) { + if (!world.includes(required)) { + violations.push(`[${worldPath}] Managed world must include ${required}`); + } + } + if (!/export\s+const\s+\w+World\s*=/.test(world) || !/export\s+type\s+\w+World\s*=\s*InstanceType/.test(world)) { + violations.push(`[${worldPath}] Managed world must export both its constructor and InstanceType`); + } + } + + if (await exists(lifecyclePath)) { + const lifecycle = await readFile(lifecyclePath, 'utf8'); + const source = parseTypeScript(lifecyclePath, lifecycle); + const registerHooks = localImportName(source, '@cellix/serenity-framework/cucumber', 'registerWorldLifecycleHooks'); + const getTimeout = localImportName(source, '@cellix/serenity-framework/settings', 'getTimeout'); + if (!registerHooks || !containsCall(source, registerHooks)) { + violations.push(`[${lifecyclePath}] Lifecycle must use registerWorldLifecycleHooks from @cellix/serenity-framework/cucumber`); + } + if (!getTimeout || !containsCall(source, getTimeout)) { + violations.push(`[${lifecyclePath}] Lifecycle must use shared timeout settings`); + } + if (!containsCall(source, 'init')) { + violations.push(`[${lifecyclePath}] Lifecycle hooks must include world.init()`); + } + if (config.requireManagedCleanup && !containsCall(source, 'cleanup')) { + violations.push(`[${lifecyclePath}] Managed infrastructure suites must clean up the world after each scenario`); + } + if (config.requireManagedCleanup && !containsCall(source, 'stopAll')) { + violations.push(`[${lifecyclePath}] Managed infrastructure suites must stop all infrastructure after the suite`); + } + } + if (config.requireManagedCleanup) { + await checkManagedInfrastructure(config.suiteRoot, violations); + } + + const loader = (await exists(loaderPath)) ? await readFile(loaderPath, 'utf8') : ''; + const contexts = await discoverContexts(contextsRoot); + if (contexts.length === 0) { + violations.push(`[${contextsRoot}] Serenity suite must define at least one context directory`); + } + const contextViolations = await Promise.all(contexts.map((context) => checkContext(config.suiteRoot, context, loaderPath, loader))); + violations.push(...contextViolations.flat()); + + return violations; +} + +async function checkManagedInfrastructure(suiteRoot: string, violations: string[]): Promise { + const infrastructurePath = path.join(suiteRoot, 'infrastructure.ts'); + if (!(await exists(infrastructurePath))) { + violations.push(`[${infrastructurePath}] Managed Serenity suites must define their infrastructure`); + return; + } + + const infrastructure = await readFile(infrastructurePath, 'utf8'); + const frameworkImport = infrastructure.match(/import\s+\{\s*(E2EInfrastructure|ApiInfrastructure)\s*\}\s+from\s+['"]@cellix\/serenity-framework\/infrastructure\/(e2e|api)['"]/); + const infrastructureKind = frameworkImport?.[1]; + if (!infrastructureKind) { + violations.push(`[${infrastructurePath}] Managed infrastructure must use a Cellix Serenity infrastructure builder`); + return; + } + if (!new RegExp(`export\\s+const\\s+infrastructure\\s*=\\s*${infrastructureKind}\\.create\\s*\\(`).test(infrastructure)) { + violations.push(`[${infrastructurePath}] Managed infrastructure must export a created ${infrastructureKind}`); + } + if (!/\.addServer\s*\(/.test(infrastructure)) { + violations.push(`[${infrastructurePath}] Managed infrastructure must register at least one server`); + } + if (infrastructureKind === 'E2EInfrastructure' && !/\.addUiPortal\s*\(/.test(infrastructure)) { + violations.push(`[${infrastructurePath}] E2E infrastructure must register at least one UI portal`); + } + if (!/\.finalize\s*\(\s*\)/.test(infrastructure)) { + violations.push(`[${infrastructurePath}] Managed infrastructure registration must be finalized`); + } +} + +async function discoverContexts(contextsRoot: string): Promise { + try { + const entries = await readdir(contextsRoot, { withFileTypes: true }); + return entries + .filter((entry) => entry.isDirectory()) + .map((entry) => entry.name) + .sort(); + } catch { + return []; + } +} + +async function checkContext(suiteRoot: string, context: string, loaderPath: string, loader: string): Promise { + const violations: string[] = []; + const contextRoot = path.join(suiteRoot, 'contexts', context); + const contextIndex = path.join(contextRoot, 'step-definitions', 'index.ts'); + if (!loader.includes(`../contexts/${context}/step-definitions/index.ts`)) { + violations.push(`[${loaderPath}] Central loader must import the ${context} context step-definition index`); + } + if (!(await exists(contextIndex))) { + violations.push(`[${contextIndex}] Context step-definition index must exist`); + return violations; + } + + const stepDirectory = path.dirname(contextIndex); + const stepFiles = (await readdir(stepDirectory)).filter((name) => /\.steps\.tsx?$/.test(name)); + if (stepFiles.length === 0) { + violations.push(`[${stepDirectory}] Context must contain at least one *.steps.ts or *.steps.tsx file`); + } + + const indexContent = await readFile(contextIndex, 'utf8'); + const stepViolations = await Promise.all( + stepFiles.sort().map(async (stepFile) => { + const discovered: string[] = []; + if (!indexContent.includes(`./${stepFile}`)) { + discovered.push(`[${contextIndex}] Context index must import ${stepFile}`); + } + const stepPath = path.join(stepDirectory, stepFile); + const stepContent = await readFile(stepPath, 'utf8'); + if (!/from\s+['"]@cucumber\/cucumber['"]/.test(stepContent)) { + discovered.push(`[${stepPath}] Step definitions must use Cucumber`); + } + const abstractionImports = [...stepContent.matchAll(/from\s+['"]\.\.\/(tasks|questions)\/([^'"]+)['"]/g)]; + if (abstractionImports.length === 0 || !/\.(attemptsTo|answer)\s*\(/.test(stepContent)) { + discovered.push(`[${stepPath}] Step definitions must delegate behavior to a task, interaction, or question`); + } + const abstractionViolations = await Promise.all( + abstractionImports.map(async (match) => { + const abstractionViolations: string[] = []; + const relativeFile = match[2]; + if (!relativeFile) return abstractionViolations; + const abstractionPath = path.join(contextRoot, match[1] as string, relativeFile); + if (!(await exists(abstractionPath))) { + abstractionViolations.push(`[${abstractionPath}] Imported Screenplay abstraction must exist`); + return abstractionViolations; + } + const abstraction = await readFile(abstractionPath, 'utf8'); + if (!/from\s+['"]@serenity-js\/core['"]/.test(abstraction) || !/\b(Task|Interaction|Question)\b/.test(abstraction)) { + abstractionViolations.push(`[${abstractionPath}] Context tasks and questions must implement a Serenity Screenplay abstraction`); + } + return abstractionViolations; + }), + ); + discovered.push(...abstractionViolations.flat()); + return discovered; + }), + ); + violations.push(...stepViolations.flat()); + return violations; +} diff --git a/packages/cellix/archunit-tests/src/checks/typescript-source.ts b/packages/cellix/archunit-tests/src/checks/typescript-source.ts new file mode 100644 index 000000000..8bceb264c --- /dev/null +++ b/packages/cellix/archunit-tests/src/checks/typescript-source.ts @@ -0,0 +1,225 @@ +import ts from 'typescript'; + +interface ImportedBinding { + imported: string; + local: string; +} + +export function parseTypeScript(filePath: string, content: string): ts.SourceFile { + return ts.createSourceFile(filePath, content, ts.ScriptTarget.Latest, true, filePath.endsWith('x') ? ts.ScriptKind.TSX : ts.ScriptKind.TS); +} + +function importedBindings(source: ts.SourceFile, moduleName: string): ImportedBinding[] { + const bindings: ImportedBinding[] = []; + for (const statement of source.statements) { + if (!ts.isImportDeclaration(statement) || !ts.isStringLiteral(statement.moduleSpecifier) || statement.moduleSpecifier.text !== moduleName) continue; + for (const element of statement.importClause?.namedBindings && ts.isNamedImports(statement.importClause.namedBindings) ? statement.importClause.namedBindings.elements : []) { + bindings.push({ imported: element.propertyName?.text ?? element.name.text, local: element.name.text }); + } + } + return bindings; +} + +export function localImportName(source: ts.SourceFile, moduleName: string, importedName: string): string | undefined { + return importedBindings(source, moduleName).find((binding) => binding.imported === importedName)?.local; +} + +export function findImportedBinding(source: ts.SourceFile, importedName: string): (ImportedBinding & { moduleName: string }) | undefined { + for (const statement of source.statements) { + if (!ts.isImportDeclaration(statement) || !ts.isStringLiteral(statement.moduleSpecifier)) continue; + const binding = importedBindings(source, statement.moduleSpecifier.text).find((candidate) => candidate.imported === importedName); + if (binding) return { ...binding, moduleName: statement.moduleSpecifier.text }; + } + return undefined; +} + +export function containsNewExpression(source: ts.Node, name: string): boolean { + return someNode(source, (node) => ts.isNewExpression(node) && ts.isIdentifier(node.expression) && node.expression.text === name); +} + +export function containsCall(source: ts.Node, name: string): boolean { + return someNode(source, (node) => { + if (!ts.isCallExpression(node)) return false; + return expressionName(node.expression) === name; + }); +} + +export function callPositions(source: ts.SourceFile, names: readonly string[]): Map { + const positions = new Map(); + someNode(source, (node) => { + if (!ts.isCallExpression(node)) return false; + const name = expressionName(node.expression); + const matchedName = name && names.find((candidate) => name === candidate || (candidate === 'registerAzureFunction' && name.startsWith(candidate))); + if (matchedName && !positions.has(matchedName)) { + const positionNode = ts.isPropertyAccessExpression(node.expression) ? node.expression.name : node.expression; + positions.set(matchedName, positionNode.getStart(source)); + } + return false; + }); + return positions; +} + +export function callbackContainsCall(source: ts.SourceFile, callName: string, nestedCallName: string): boolean { + let matches = false; + someNode(source, (node) => { + if (!ts.isCallExpression(node) || expressionName(node.expression) !== callName) return false; + matches = node.arguments.some((argument) => (ts.isArrowFunction(argument) || ts.isFunctionExpression(argument)) && containsCall(argument.body, nestedCallName)); + return matches; + }); + return matches; +} + +export function callbackReturnsObject(source: ts.SourceFile, callName: string): boolean { + let matches = false; + someNode(source, (node) => { + if (!ts.isCallExpression(node) || expressionName(node.expression) !== callName) return false; + matches = node.arguments.some((argument) => { + if (!ts.isArrowFunction(argument) && !ts.isFunctionExpression(argument)) return false; + if (ts.isParenthesizedExpression(argument.body)) return ts.isObjectLiteralExpression(argument.body.expression); + if (ts.isObjectLiteralExpression(argument.body)) return true; + return ts.isBlock(argument.body) && argument.body.statements.some((statement) => ts.isReturnStatement(statement) && !!statement.expression && ts.isObjectLiteralExpression(statement.expression)); + }); + return matches; + }); + return matches; +} + +export function containsJsxTag(source: ts.SourceFile, tagName: string): boolean { + return someNode(source, (node) => { + if (ts.isJsxSelfClosingElement(node) || ts.isJsxOpeningElement(node)) return node.tagName.getText(source) === tagName; + return false; + }); +} + +/** Check whether a JSX component is on a rendered path between the React root and App. */ +export function containsRenderedJsxWrapper(source: ts.SourceFile, wrapperName: string, childName = 'App'): boolean { + const root = '__render_root__'; + const edges = new Map>(); + const connect = (parent: string, child: string): void => { + const children = edges.get(parent) ?? new Set(); + children.add(child); + edges.set(parent, children); + }; + + someNode(source, (node) => { + const tag = jsxTagName(node, source); + if (!tag) return false; + + const parentTag = nearestJsxParentTag(node, source); + if (parentTag) { + connect(parentTag, tag); + } else { + const component = enclosingComponentName(node.parent); + if (component) connect(component, tag); + } + return false; + }); + + someNode(source, (node) => { + if (!ts.isCallExpression(node) || expressionName(node.expression) !== 'render') return false; + for (const argument of node.arguments) { + for (const tag of topLevelJsxTags(argument, source)) connect(root, tag); + } + return false; + }); + + return isReachable(edges, root, wrapperName) && isReachable(edges, wrapperName, childName); +} + +/** Check whether a resolved DOM mount point is protected by an explicit guard. */ +export function containsMountPointGuard(source: ts.SourceFile, elementId: string): boolean { + const mountNames = new Set(); + someNode(source, (node) => { + if (!ts.isVariableDeclaration(node) || !ts.isIdentifier(node.name) || !node.initializer) return false; + if (isElementLookup(node.initializer, elementId) || (ts.isCallExpression(node.initializer) && node.initializer.arguments.some((argument) => isElementLookup(argument, elementId)))) { + mountNames.add(node.name.text); + } + return false; + }); + + return someNode(source, (node) => { + if (ts.isIfStatement(node) && checksMissingValue(node.expression, mountNames)) { + return someNode(node.thenStatement, (child) => ts.isThrowStatement(child) || ts.isReturnStatement(child)); + } + if (!ts.isCallExpression(node) || !/^(assert|ensure|guard|invariant|require|validate)/i.test(expressionName(node.expression) ?? '')) return false; + return node.arguments.some((argument) => referencesAnyIdentifier(argument, mountNames) || isElementLookup(argument, elementId)); + }); +} + +function checksMissingValue(node: ts.Expression, names: ReadonlySet): boolean { + if (ts.isPrefixUnaryExpression(node) && node.operator === ts.SyntaxKind.ExclamationToken) { + return referencesAnyIdentifier(node.operand, names); + } + if (!ts.isBinaryExpression(node)) return false; + if (![ts.SyntaxKind.EqualsEqualsToken, ts.SyntaxKind.EqualsEqualsEqualsToken].includes(node.operatorToken.kind)) return false; + return (referencesAnyIdentifier(node.left, names) && isNullish(node.right)) || (isNullish(node.left) && referencesAnyIdentifier(node.right, names)); +} + +function isNullish(node: ts.Expression): boolean { + return node.kind === ts.SyntaxKind.NullKeyword || (ts.isIdentifier(node) && node.text === 'undefined'); +} + +function jsxTagName(node: ts.Node, source: ts.SourceFile): string | undefined { + if (ts.isJsxOpeningElement(node) || ts.isJsxSelfClosingElement(node)) return node.tagName.getText(source); + return undefined; +} + +function nearestJsxParentTag(node: ts.Node | undefined, source: ts.SourceFile): string | undefined { + for (let current = node?.parent; current; current = current.parent) { + if (ts.isJsxElement(current) && current.openingElement !== node) return current.openingElement.tagName.getText(source); + if (ts.isFunctionLike(current)) return undefined; + } + return undefined; +} + +function enclosingComponentName(node: ts.Node | undefined): string | undefined { + for (let current = node; current; current = current.parent) { + if (ts.isFunctionDeclaration(current) && current.name) return current.name.text; + if ((ts.isArrowFunction(current) || ts.isFunctionExpression(current)) && ts.isVariableDeclaration(current.parent) && ts.isIdentifier(current.parent.name)) return current.parent.name.text; + } + return undefined; +} + +function topLevelJsxTags(node: ts.Node, source: ts.SourceFile): string[] { + const tags: string[] = []; + const visit = (current: ts.Node): void => { + const tag = jsxTagName(current, source); + if (tag) { + tags.push(tag); + return; + } + current.forEachChild(visit); + }; + visit(node); + return tags; +} + +function isReachable(edges: ReadonlyMap>, from: string, to: string, seen = new Set()): boolean { + if (from === to) return true; + if (seen.has(from)) return false; + seen.add(from); + return [...(edges.get(from) ?? [])].some((child) => isReachable(edges, child, to, seen)); +} + +function isElementLookup(node: ts.Node, elementId: string): boolean { + return ts.isCallExpression(node) && expressionName(node.expression) === 'getElementById' && node.arguments.some((argument) => ts.isStringLiteral(argument) && argument.text === elementId); +} + +function referencesAnyIdentifier(node: ts.Node, names: ReadonlySet): boolean { + return someNode(node, (child) => ts.isIdentifier(child) && names.has(child.text)); +} + +function expressionName(expression: ts.LeftHandSideExpression): string | undefined { + if (ts.isIdentifier(expression)) return expression.text; + if (ts.isPropertyAccessExpression(expression)) return expression.name.text; + return undefined; +} + +function someNode(node: ts.Node, predicate: (node: ts.Node) => boolean): boolean { + if (predicate(node)) return true; + let found = false; + node.forEachChild((child) => { + if (!found && someNode(child, predicate)) found = true; + }); + return found; +} diff --git a/packages/cellix/archunit-tests/src/checks/ui-app-composition.ts b/packages/cellix/archunit-tests/src/checks/ui-app-composition.ts new file mode 100644 index 000000000..36a4c8296 --- /dev/null +++ b/packages/cellix/archunit-tests/src/checks/ui-app-composition.ts @@ -0,0 +1,76 @@ +import { readFile } from 'node:fs/promises'; +import path from 'node:path'; +import { containsCall, containsJsxTag, containsMountPointGuard, containsRenderedJsxWrapper, localImportName, parseTypeScript } from './typescript-source.js'; + +export interface UiAppCompositionConfig { + /** Directory containing `main.tsx` and `App.tsx`. */ + appRoot: string; + /** Provider component names that must wrap the application bootstrap. */ + requiredProviders?: string[]; +} + +async function readSource(filePath: string, violations: string[]): Promise { + try { + return await readFile(filePath, 'utf8'); + } catch { + violations.push(`[${filePath}] Required UI composition file must exist`); + return undefined; + } +} + +/** + * Check that a Cellix browser app validates its mount point and composes its configured providers and routes. + * + * @param config - Source root and provider names required by the consumer application. + * @returns Every bootstrap violation; an empty array means the UI composition complies. + * @example + * ```typescript + * await checkUiAppComposition({ appRoot: 'src', requiredProviders: ['BrowserRouter'] }); + * ``` + */ +export async function checkUiAppComposition(config: UiAppCompositionConfig): Promise { + if (!config.appRoot) { + throw new Error('checkUiAppComposition requires appRoot to be set'); + } + + const violations: string[] = []; + const mainPath = path.join(config.appRoot, 'main.tsx'); + const appPath = path.join(config.appRoot, 'App.tsx'); + const main = await readSource(mainPath, violations); + const app = await readSource(appPath, violations); + + if (main) { + const source = parseTypeScript(mainPath, main); + if (!containsCall(source, 'createRoot')) { + violations.push(`[${mainPath}] UI bootstrap must create a React root`); + } + if (!/getElementById\s*\(\s*['"]root['"]\s*\)/.test(main)) { + violations.push(`[${mainPath}] UI bootstrap must resolve the #root mount element`); + } + if (!containsMountPointGuard(source, 'root')) { + violations.push(`[${mainPath}] UI bootstrap must guard against a missing root element`); + } + if (!containsJsxTag(source, 'React.StrictMode')) { + violations.push(`[${mainPath}] UI bootstrap must enable React.StrictMode`); + } + if (!containsJsxTag(source, 'App')) { + violations.push(`[${mainPath}] UI bootstrap must render App`); + } + for (const provider of config.requiredProviders ?? []) { + if (!containsRenderedJsxWrapper(source, provider)) { + violations.push(`[${mainPath}] UI bootstrap must compose ${provider} around App`); + } + } + } + + if (app) { + const source = parseTypeScript(appPath, app); + const routes = localImportName(source, 'react-router-dom', 'Routes'); + const route = localImportName(source, 'react-router-dom', 'Route'); + if (!routes || !route || !containsJsxTag(source, routes) || !containsJsxTag(source, route)) { + violations.push(`[${appPath}] App must compose routes with React Router Routes and Route`); + } + } + + return violations; +} diff --git a/packages/cellix/archunit-tests/src/fixtures/architecture-stubs/api/src/cellix.ts b/packages/cellix/archunit-tests/src/fixtures/architecture-stubs/api/src/cellix.ts new file mode 100644 index 000000000..85cd3566a --- /dev/null +++ b/packages/cellix/archunit-tests/src/fixtures/architecture-stubs/api/src/cellix.ts @@ -0,0 +1,6 @@ +// biome-ignore lint/complexity/noStaticOnlyClass: intentionally incomplete architecture stub +export class Cellix { + static startUp(): void { + // Intentionally omits infrastructure initialization. + } +} diff --git a/packages/cellix/archunit-tests/src/fixtures/architecture-stubs/api/src/index.ts b/packages/cellix/archunit-tests/src/fixtures/architecture-stubs/api/src/index.ts new file mode 100644 index 000000000..c7444fdf0 --- /dev/null +++ b/packages/cellix/archunit-tests/src/fixtures/architecture-stubs/api/src/index.ts @@ -0,0 +1,3 @@ +import { Cellix } from './cellix.ts'; + +Cellix.startUp(); diff --git a/packages/cellix/archunit-tests/src/fixtures/architecture-stubs/serenity/src/contexts/community/step-definitions/community.steps.ts b/packages/cellix/archunit-tests/src/fixtures/architecture-stubs/serenity/src/contexts/community/step-definitions/community.steps.ts new file mode 100644 index 000000000..ff6bfde60 --- /dev/null +++ b/packages/cellix/archunit-tests/src/fixtures/architecture-stubs/serenity/src/contexts/community/step-definitions/community.steps.ts @@ -0,0 +1,3 @@ +import { When } from '@cucumber/cucumber'; + +When('the stub performs behavior directly', async () => fetch('/api')); diff --git a/packages/cellix/archunit-tests/src/fixtures/architecture-stubs/serenity/src/contexts/community/step-definitions/index.ts b/packages/cellix/archunit-tests/src/fixtures/architecture-stubs/serenity/src/contexts/community/step-definitions/index.ts new file mode 100644 index 000000000..cb0ff5c3b --- /dev/null +++ b/packages/cellix/archunit-tests/src/fixtures/architecture-stubs/serenity/src/contexts/community/step-definitions/index.ts @@ -0,0 +1 @@ +export {}; diff --git a/packages/cellix/archunit-tests/src/fixtures/architecture-stubs/serenity/src/cucumber-lifecycle-hooks.ts b/packages/cellix/archunit-tests/src/fixtures/architecture-stubs/serenity/src/cucumber-lifecycle-hooks.ts new file mode 100644 index 000000000..cb0ff5c3b --- /dev/null +++ b/packages/cellix/archunit-tests/src/fixtures/architecture-stubs/serenity/src/cucumber-lifecycle-hooks.ts @@ -0,0 +1 @@ +export {}; diff --git a/packages/cellix/archunit-tests/src/fixtures/architecture-stubs/serenity/src/infrastructure.ts b/packages/cellix/archunit-tests/src/fixtures/architecture-stubs/serenity/src/infrastructure.ts new file mode 100644 index 000000000..de7908ea8 --- /dev/null +++ b/packages/cellix/archunit-tests/src/fixtures/architecture-stubs/serenity/src/infrastructure.ts @@ -0,0 +1,3 @@ +import { E2EInfrastructure } from '@cellix/serenity-framework/infrastructure/e2e'; + +export const infrastructure = E2EInfrastructure.create().finalize(); diff --git a/packages/cellix/archunit-tests/src/fixtures/architecture-stubs/serenity/src/step-definitions/index.ts b/packages/cellix/archunit-tests/src/fixtures/architecture-stubs/serenity/src/step-definitions/index.ts new file mode 100644 index 000000000..cb0ff5c3b --- /dev/null +++ b/packages/cellix/archunit-tests/src/fixtures/architecture-stubs/serenity/src/step-definitions/index.ts @@ -0,0 +1 @@ +export {}; diff --git a/packages/cellix/archunit-tests/src/fixtures/architecture-stubs/serenity/src/world.ts b/packages/cellix/archunit-tests/src/fixtures/architecture-stubs/serenity/src/world.ts new file mode 100644 index 000000000..cb0ff5c3b --- /dev/null +++ b/packages/cellix/archunit-tests/src/fixtures/architecture-stubs/serenity/src/world.ts @@ -0,0 +1 @@ +export {}; diff --git a/packages/cellix/archunit-tests/src/fixtures/architecture-stubs/ui/src/App.tsx b/packages/cellix/archunit-tests/src/fixtures/architecture-stubs/ui/src/App.tsx new file mode 100644 index 000000000..9d6e50f4b --- /dev/null +++ b/packages/cellix/archunit-tests/src/fixtures/architecture-stubs/ui/src/App.tsx @@ -0,0 +1,3 @@ +export default function App() { + return null; +} diff --git a/packages/cellix/archunit-tests/src/fixtures/architecture-stubs/ui/src/main.tsx b/packages/cellix/archunit-tests/src/fixtures/architecture-stubs/ui/src/main.tsx new file mode 100644 index 000000000..cb0ff5c3b --- /dev/null +++ b/packages/cellix/archunit-tests/src/fixtures/architecture-stubs/ui/src/main.tsx @@ -0,0 +1 @@ +export {}; diff --git a/packages/cellix/archunit-tests/src/index.ts b/packages/cellix/archunit-tests/src/index.ts index 1385a951c..4e6b32aa5 100644 --- a/packages/cellix/archunit-tests/src/index.ts +++ b/packages/cellix/archunit-tests/src/index.ts @@ -1,3 +1,4 @@ +export * from './api.js'; export * from './application-services.js'; export * from './data-sources-mongoose-models.js'; export * from './domain.js'; @@ -5,3 +6,5 @@ export * from './frontend.js'; export * from './general.js'; export * from './graphql.js'; export * from './persistence.js'; +export * from './serenity.js'; +export * from './ui-app.js'; diff --git a/packages/cellix/archunit-tests/src/serenity.contract.test.ts b/packages/cellix/archunit-tests/src/serenity.contract.test.ts new file mode 100644 index 000000000..1c52f1177 --- /dev/null +++ b/packages/cellix/archunit-tests/src/serenity.contract.test.ts @@ -0,0 +1,110 @@ +import { mkdir, mkdtemp, rm, writeFile } from 'node:fs/promises'; +import { tmpdir } from 'node:os'; +import path from 'node:path'; +import { afterEach, describe, expect, it } from 'vitest'; +import { checkSerenitySuiteConventions } from './serenity.js'; + +const temporaryDirectories: string[] = []; + +afterEach(async () => { + await Promise.all(temporaryDirectories.splice(0).map((directory) => rm(directory, { force: true, recursive: true }))); +}); + +async function write(root: string, relativePath: string, content: string): Promise { + const filePath = path.join(root, relativePath); + await mkdir(path.dirname(filePath), { recursive: true }); + await writeFile(filePath, content); +} + +async function suiteFixture(): Promise { + const suiteRoot = await mkdtemp(path.join(tmpdir(), 'cellix-serenity-')); + temporaryDirectories.push(suiteRoot); + await write( + suiteRoot, + 'world.ts', + `import { registerManagedSerenityWorld } from '@cellix/serenity-framework/cucumber';\nimport { SerenityCast } from '@cellix/serenity-framework/serenity';\nimport { infrastructure } from './infrastructure.ts';\nexport const TestWorld = registerManagedSerenityWorld({ infrastructure, createCast: () => new SerenityCast({ useNotepad: true }) });\nexport type TestWorld = InstanceType;`, + ); + await write( + suiteRoot, + 'cucumber-lifecycle-hooks.ts', + `import { registerWorldLifecycleHooks } from '@cellix/serenity-framework/cucumber';\nimport { getTimeout } from '@cellix/serenity-framework/settings';\nregisterWorldLifecycleHooks({ scenarioTimeout: getTimeout('scenario'), before: async (world) => world.init(), after: async (world) => world.cleanup(), afterAll: () => infrastructure.stopAll() });`, + ); + await write(suiteRoot, 'step-definitions/index.ts', `import '../contexts/community/step-definitions/index.ts';`); + await write(suiteRoot, 'contexts/community/step-definitions/index.ts', `import './create-community.steps.ts';`); + await write( + suiteRoot, + 'contexts/community/step-definitions/create-community.steps.ts', + `import { Given, When, Then } from '@cucumber/cucumber';\nimport { CreateCommunity } from '../tasks/create-community.ts';\nimport { CommunityName } from '../questions/community-name.ts';\nWhen('creates', async () => actor.attemptsTo(CreateCommunity()));\nThen('created', async () => actor.answer(CommunityName()));`, + ); + await write(suiteRoot, 'contexts/community/tasks/create-community.ts', `import { Interaction } from '@serenity-js/core';\nexport const CreateCommunity = () => Interaction.where('creates', async () => undefined);`); + await write(suiteRoot, 'contexts/community/questions/community-name.ts', `import { Question } from '@serenity-js/core';\nexport const CommunityName = () => Question.about('name', () => 'Cellix');`); + await write( + suiteRoot, + 'infrastructure.ts', + `import { E2EInfrastructure } from '@cellix/serenity-framework/infrastructure/e2e'; +export const infrastructure = E2EInfrastructure.create() + .addServer('api', apiServer) + .addUiPortal('community', communityPortal, { dependsOn: ['api'] }) + .finalize();`, + ); + return suiteRoot; +} + +describe('Serenity convention public contract', () => { + it('accepts managed lifecycle and context-owned Screenplay abstractions', async () => { + const suiteRoot = await suiteFixture(); + expect(await checkSerenitySuiteConventions({ suiteRoot, requireManagedCleanup: true })).toStrictEqual([]); + }); + + it('accepts aliased framework imports and formatted lifecycle callbacks', async () => { + const suiteRoot = await suiteFixture(); + await write( + suiteRoot, + 'world.ts', + `import { registerManagedSerenityWorld as registerWorld } from '@cellix/serenity-framework/cucumber'; +import { SerenityCast as TestCast } from '@cellix/serenity-framework/serenity'; +export const TestWorld = registerWorld({ createCast: () => new TestCast({ useNotepad: true }) }); +export type TestWorld = InstanceType;`, + ); + await write( + suiteRoot, + 'cucumber-lifecycle-hooks.ts', + `import { registerWorldLifecycleHooks as registerHooks } from '@cellix/serenity-framework/cucumber'; +import { getTimeout as timeoutFor } from '@cellix/serenity-framework/settings'; +registerHooks({ + scenarioTimeout: timeoutFor('scenario'), + before: async world => world.init(), + after: async world => world.cleanup(), + afterAll: async () => { + await infrastructure.stopAll(); + }, +});`, + ); + + expect(await checkSerenitySuiteConventions({ suiteRoot, requireManagedCleanup: true })).toStrictEqual([]); + }); + + it('reports missing context indexes and steps that contain behavior directly', async () => { + const suiteRoot = await suiteFixture(); + await write(suiteRoot, 'step-definitions/index.ts', ''); + await write(suiteRoot, 'contexts/community/step-definitions/create-community.steps.ts', `import { When } from '@cucumber/cucumber';\nWhen('creates', async () => fetch('/graphql'));`); + + const violations = await checkSerenitySuiteConventions({ suiteRoot }); + expect(violations).toEqual(expect.arrayContaining([expect.stringContaining('Central loader'), expect.stringContaining('delegate behavior')])); + }); + + it('reports a suite with no discoverable contexts', async () => { + const suiteRoot = await suiteFixture(); + await rm(path.join(suiteRoot, 'contexts'), { recursive: true }); + + expect(await checkSerenitySuiteConventions({ suiteRoot })).toContain(`[${path.join(suiteRoot, 'contexts')}] Serenity suite must define at least one context directory`); + }); + + it('reports managed infrastructure without concrete server and UI portal registration', async () => { + const suiteRoot = await suiteFixture(); + await write(suiteRoot, 'infrastructure.ts', `import { E2EInfrastructure } from '@cellix/serenity-framework/infrastructure/e2e';\nexport const infrastructure = E2EInfrastructure.create().finalize();`); + + const violations = await checkSerenitySuiteConventions({ suiteRoot, requireManagedCleanup: true }); + expect(violations).toEqual(expect.arrayContaining([expect.stringContaining('at least one server'), expect.stringContaining('at least one UI portal')])); + }); +}); diff --git a/packages/cellix/archunit-tests/src/serenity.ts b/packages/cellix/archunit-tests/src/serenity.ts new file mode 100644 index 000000000..bbd779e01 --- /dev/null +++ b/packages/cellix/archunit-tests/src/serenity.ts @@ -0,0 +1,3 @@ +export type { SerenitySuiteConventionsConfig } from './checks/serenity-suite-conventions.js'; +export { checkSerenitySuiteConventions } from './checks/serenity-suite-conventions.js'; +export { describeSerenitySuiteConventionTests } from './test-suites/serenity-suite-conventions.js'; diff --git a/packages/cellix/archunit-tests/src/stub-rejection.contract.test.ts b/packages/cellix/archunit-tests/src/stub-rejection.contract.test.ts new file mode 100644 index 000000000..0490e6ac3 --- /dev/null +++ b/packages/cellix/archunit-tests/src/stub-rejection.contract.test.ts @@ -0,0 +1,34 @@ +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { describe, expect, it } from 'vitest'; +import { checkApiComposition } from './api.js'; +import { checkSerenitySuiteConventions } from './serenity.js'; +import { checkUiAppComposition } from './ui-app.js'; + +const fixturesRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), 'fixtures', 'architecture-stubs'); + +describe('architecture test stub rejection', () => { + it('rejects the incomplete API stub', async () => { + const violations = await checkApiComposition({ apiIndexPath: path.join(fixturesRoot, 'api', 'src', 'index.ts') }); + + expect(violations).toEqual(expect.arrayContaining([expect.stringContaining('initializeInfrastructureServices'), expect.stringContaining('initializeApplicationServices'), expect.stringContaining('registerAzureFunction')])); + }); + + it('rejects the incomplete UI stub', async () => { + const violations = await checkUiAppComposition({ + appRoot: path.join(fixturesRoot, 'ui', 'src'), + requiredProviders: ['ThemeProvider', 'BrowserRouter', 'AuthProvider'], + }); + + expect(violations).toEqual(expect.arrayContaining([expect.stringContaining('React root'), expect.stringContaining('ThemeProvider'), expect.stringContaining('Routes')])); + }); + + it('rejects the incomplete Serenity stub', async () => { + const violations = await checkSerenitySuiteConventions({ + suiteRoot: path.join(fixturesRoot, 'serenity', 'src'), + requireManagedCleanup: true, + }); + + expect(violations).toEqual(expect.arrayContaining([expect.stringContaining('Managed world'), expect.stringContaining('at least one server'), expect.stringContaining('delegate behavior')])); + }); +}); diff --git a/packages/cellix/archunit-tests/src/test-suites/api-composition.ts b/packages/cellix/archunit-tests/src/test-suites/api-composition.ts new file mode 100644 index 000000000..2c4d11016 --- /dev/null +++ b/packages/cellix/archunit-tests/src/test-suites/api-composition.ts @@ -0,0 +1,16 @@ +import { describe, expect, it } from 'vitest'; +import { type ApiCompositionConfig, checkApiComposition } from '../checks/api-composition.js'; + +/** + * Register reusable fitness tests for a Cellix API composition root. + * @param config - Location of the consumer's API composition entrypoint. + * @returns Nothing; tests are registered with the active Vitest suite. + * @example `describeApiCompositionTests({ apiIndexPath: 'src/index.ts' });` + */ +export function describeApiCompositionTests(config: ApiCompositionConfig): void { + describe('Cellix API composition', () => { + it('initializes infrastructure, context, application services, handlers, and startup in order', async () => { + expect(await checkApiComposition(config)).toStrictEqual([]); + }); + }); +} diff --git a/packages/cellix/archunit-tests/src/test-suites/serenity-suite-conventions.ts b/packages/cellix/archunit-tests/src/test-suites/serenity-suite-conventions.ts new file mode 100644 index 000000000..fd9c1033c --- /dev/null +++ b/packages/cellix/archunit-tests/src/test-suites/serenity-suite-conventions.ts @@ -0,0 +1,22 @@ +import { describe, expect, it } from 'vitest'; +import { checkSerenitySuiteConventions, type SerenitySuiteConventionsConfig } from '../checks/serenity-suite-conventions.js'; + +/** + * Register reusable fitness tests for a Cellix Serenity/Cucumber suite. + * @param config - Suite source root and cleanup policy. Context directories are discovered automatically. + * @returns Nothing; tests are registered with the active Vitest suite. + * @example `describeSerenitySuiteConventionTests({ suiteRoot: 'src', requireManagedCleanup: true });` + */ +export function describeSerenitySuiteConventionTests(config: SerenitySuiteConventionsConfig): void { + describe('Cellix Serenity suite conventions', () => { + it('uses a managed world and lifecycle', async () => { + const violations = await checkSerenitySuiteConventions(config); + expect(violations.filter((violation) => violation.includes('world.ts') || violation.includes('lifecycle'))).toStrictEqual([]); + }); + + it('loads context indexes and delegates steps to Screenplay abstractions', async () => { + const violations = await checkSerenitySuiteConventions(config); + expect(violations.filter((violation) => !violation.includes('world.ts') && !violation.includes('lifecycle'))).toStrictEqual([]); + }); + }); +} diff --git a/packages/cellix/archunit-tests/src/test-suites/ui-app-composition.ts b/packages/cellix/archunit-tests/src/test-suites/ui-app-composition.ts new file mode 100644 index 000000000..ab689c9bc --- /dev/null +++ b/packages/cellix/archunit-tests/src/test-suites/ui-app-composition.ts @@ -0,0 +1,16 @@ +import { describe, expect, it } from 'vitest'; +import { checkUiAppComposition, type UiAppCompositionConfig } from '../checks/ui-app-composition.js'; + +/** + * Register reusable fitness tests for a Cellix browser application entrypoint. + * @param config - Source root and providers required by the consumer application. + * @returns Nothing; tests are registered with the active Vitest suite. + * @example `describeUiAppCompositionTests({ appRoot: 'src', requiredProviders: ['BrowserRouter'] });` + */ +export function describeUiAppCompositionTests(config: UiAppCompositionConfig): void { + describe('Cellix UI application composition', () => { + it('validates the mount point and composes providers, the app, and routes', async () => { + expect(await checkUiAppComposition(config)).toStrictEqual([]); + }); + }); +} diff --git a/packages/cellix/archunit-tests/src/ui-app.ts b/packages/cellix/archunit-tests/src/ui-app.ts new file mode 100644 index 000000000..6f8ee3f2d --- /dev/null +++ b/packages/cellix/archunit-tests/src/ui-app.ts @@ -0,0 +1,3 @@ +export type { UiAppCompositionConfig } from './checks/ui-app-composition.js'; +export { checkUiAppComposition } from './checks/ui-app-composition.js'; +export { describeUiAppCompositionTests } from './test-suites/ui-app-composition.js'; diff --git a/packages/cellix/archunit-tests/tsconfig.json b/packages/cellix/archunit-tests/tsconfig.json index 8dbf44f5b..7a0e79572 100644 --- a/packages/cellix/archunit-tests/tsconfig.json +++ b/packages/cellix/archunit-tests/tsconfig.json @@ -5,5 +5,5 @@ "rootDir": "." }, "include": ["src/**/*.ts"], - "exclude": ["node_modules", "dist", "**/*.test.ts"] + "exclude": ["node_modules", "dist", "**/*.test.ts", "src/fixtures/architecture-stubs/**"] } diff --git a/packages/cellix/serenity-framework/src/settings/timeout-settings.ts b/packages/cellix/serenity-framework/src/settings/timeout-settings.ts index 17abeeaac..1e20587b6 100644 --- a/packages/cellix/serenity-framework/src/settings/timeout-settings.ts +++ b/packages/cellix/serenity-framework/src/settings/timeout-settings.ts @@ -5,6 +5,15 @@ export const defaultVerificationTimeouts = { /** Default Cucumber scenario timeout. */ scenario: 120_000, + /** + * Cold-boot timeout for the first `Before` hook, which starts every server + * (Mongo, Azurite, API, UI portals, mock auth) and launches the browser. + * Larger than {@link serverStartup} because a cold run also pays for func + * TypeScript compilation and Vite dependency pre-bundling; only the first + * scenario incurs it (later `Before`s reuse the running infrastructure). + */ + boot: 300_000, + /** Server startup timeout. */ serverStartup: 120_000, diff --git a/packages/ocom-verification/acceptance-api/package.json b/packages/ocom-verification/acceptance-api/package.json index 06e434cb3..04216dafe 100644 --- a/packages/ocom-verification/acceptance-api/package.json +++ b/packages/ocom-verification/acceptance-api/package.json @@ -5,6 +5,7 @@ "private": true, "type": "module", "scripts": { + "test:arch": "vitest run --config vitest.arch.config.ts", "test:acceptance": "LOG_LEVEL=warn NODE_OPTIONS='--import tsx/esm' cucumber-js --format json:./reports/cucumber-report-api.json", "test:acceptance:coverage": "LOG_LEVEL=warn NODE_OPTIONS='--import tsx/esm' c8 --allowExternal -- cucumber-js --format json:./reports/cucumber-report-api.json", "test:coverage:acceptance": "LOG_LEVEL=warn NODE_OPTIONS='--import tsx/esm' c8 -- cucumber-js --format json:./reports/cucumber-report-api.json", @@ -25,7 +26,9 @@ "std-env": "^4.0.0" }, "devDependencies": { + "@cellix/archunit-tests": "workspace:*", "@cellix/config-typescript": "workspace:*", + "@cellix/config-vitest": "workspace:*", "@cellix/service-blob-storage": "workspace:*", "@ocom/application-services": "workspace:*", "@ocom/context-spec": "workspace:*", @@ -43,6 +46,7 @@ "c8": "^11.0.0", "rimraf": "^6.0.1", "tsx": "catalog:", - "typescript": "catalog:" + "typescript": "catalog:", + "vitest": "catalog:" } } diff --git a/packages/ocom-verification/acceptance-api/src/archunit-tests/serenity-conventions.test.ts b/packages/ocom-verification/acceptance-api/src/archunit-tests/serenity-conventions.test.ts new file mode 100644 index 000000000..0459db109 --- /dev/null +++ b/packages/ocom-verification/acceptance-api/src/archunit-tests/serenity-conventions.test.ts @@ -0,0 +1,6 @@ +import { describeSerenitySuiteConventionTests } from '@cellix/archunit-tests/serenity'; + +describeSerenitySuiteConventionTests({ + suiteRoot: 'src', + requireManagedCleanup: true, +}); diff --git a/packages/ocom-verification/acceptance-api/src/contexts/staff/notes/staff-notes.ts b/packages/ocom-verification/acceptance-api/src/contexts/staff/notes/staff-notes.ts new file mode 100644 index 000000000..4abd0118f --- /dev/null +++ b/packages/ocom-verification/acceptance-api/src/contexts/staff/notes/staff-notes.ts @@ -0,0 +1,3 @@ +export interface StaffApiNotes { + targetRoute: string; +} diff --git a/packages/ocom-verification/acceptance-api/src/contexts/staff/questions/staff-target-route.ts b/packages/ocom-verification/acceptance-api/src/contexts/staff/questions/staff-target-route.ts new file mode 100644 index 000000000..119a2807c --- /dev/null +++ b/packages/ocom-verification/acceptance-api/src/contexts/staff/questions/staff-target-route.ts @@ -0,0 +1,4 @@ +import { notes, Question } from '@serenity-js/core'; +import type { StaffApiNotes } from '../notes/staff-notes.ts'; + +export const StaffTargetRoute = () => Question.about('the target staff route', (actor) => actor.answer(notes().get('targetRoute'))); diff --git a/packages/ocom-verification/acceptance-api/src/contexts/staff/step-definitions/staff-landing.steps.ts b/packages/ocom-verification/acceptance-api/src/contexts/staff/step-definitions/staff-landing.steps.ts index 4b69b5577..f96c2b29f 100644 --- a/packages/ocom-verification/acceptance-api/src/contexts/staff/step-definitions/staff-landing.steps.ts +++ b/packages/ocom-verification/acceptance-api/src/contexts/staff/step-definitions/staff-landing.steps.ts @@ -2,13 +2,12 @@ import { Given, Then, When } from '@cucumber/cucumber'; import { actors } from '@ocom-verification/verification-shared/test-data'; import { actorCalled, notes } from '@serenity-js/core'; import { setActorToken, staffTokenFor } from '../../../shared/abilities/actor-auth.ts'; +import type { StaffApiNotes } from '../notes/staff-notes.ts'; +import { StaffTargetRoute } from '../questions/staff-target-route.ts'; +import { OpenStaffLanding } from '../tasks/open-staff-landing.ts'; type StaffBusinessRole = 'finance' | 'tech admin' | 'service line owner' | 'case manager'; -interface StaffApiNotes { - targetRoute: string; -} - const defaultRouteByRole: Record = { finance: '/staff/finance', 'tech admin': '/staff/tech', @@ -62,19 +61,19 @@ Given('{word} is an authenticated {string} staff user', async (actorName: string When('{word} enters the staff operations workspace', async (actorName: string) => { lastActorName = actorName; const actor = actorCalled(actorName); - await actor.attemptsTo(notes().set('targetRoute', defaultRouteByRole[roleForActor(actorName)])); + await actor.attemptsTo(OpenStaffLanding(defaultRouteByRole[roleForActor(actorName)])); }); When('{word} attempts to work in the finance workspace', async (actorName: string) => { lastActorName = actorName; const actor = actorCalled(actorName); - await actor.attemptsTo(notes().set('targetRoute', resolveFinanceWorkspaceRoute(roleForActor(actorName)))); + await actor.attemptsTo(OpenStaffLanding(resolveFinanceWorkspaceRoute(roleForActor(actorName)))); }); Then('{word} should be directed to {string}', async (actorName: string, expectedRoute: string) => { const resolvedName = /^(she|he|they)$/i.test(actorName) ? lastActorName : actorName; const actor = actorCalled(resolvedName); - const targetRoute = await actor.answer(notes().get('targetRoute')); + const targetRoute = await actor.answer(StaffTargetRoute()); if (targetRoute !== expectedRoute) { throw new Error(`Expected route to be "${expectedRoute}", but got "${targetRoute}"`); diff --git a/packages/ocom-verification/acceptance-api/src/contexts/staff/tasks/open-staff-landing.ts b/packages/ocom-verification/acceptance-api/src/contexts/staff/tasks/open-staff-landing.ts new file mode 100644 index 000000000..6a482a8f6 --- /dev/null +++ b/packages/ocom-verification/acceptance-api/src/contexts/staff/tasks/open-staff-landing.ts @@ -0,0 +1,7 @@ +import { type Actor, Interaction, notes } from '@serenity-js/core'; +import type { StaffApiNotes } from '../notes/staff-notes.ts'; + +export const OpenStaffLanding = (targetRoute: string) => + Interaction.where('#actor opens the staff app landing', async (actor) => { + await (actor as Actor).attemptsTo(notes().set('targetRoute', targetRoute)); + }); diff --git a/packages/ocom-verification/acceptance-api/vitest.arch.config.ts b/packages/ocom-verification/acceptance-api/vitest.arch.config.ts new file mode 100644 index 000000000..c9624eb8f --- /dev/null +++ b/packages/ocom-verification/acceptance-api/vitest.arch.config.ts @@ -0,0 +1,3 @@ +import { archConfig } from '@cellix/config-vitest'; + +export default archConfig; diff --git a/packages/ocom-verification/acceptance-ui/package.json b/packages/ocom-verification/acceptance-ui/package.json index 7bdbe792b..7ed284671 100644 --- a/packages/ocom-verification/acceptance-ui/package.json +++ b/packages/ocom-verification/acceptance-ui/package.json @@ -5,6 +5,7 @@ "private": true, "type": "module", "scripts": { + "test:arch": "vitest run --config vitest.arch.config.ts", "test:acceptance": "LOG_LEVEL=warn NODE_OPTIONS='--import tsx/esm --import @cellix/serenity-framework/dom/register-asset-loader --import @cellix/serenity-framework/dom/setup' cucumber-js", "test:acceptance:coverage": "LOG_LEVEL=warn NODE_OPTIONS='--import tsx/esm --import @cellix/serenity-framework/dom/register-asset-loader --import @cellix/serenity-framework/dom/setup' c8 cucumber-js", "test:coverage:acceptance": "LOG_LEVEL=warn NODE_OPTIONS='--import tsx/esm --import @cellix/serenity-framework/dom/register-asset-loader --import @cellix/serenity-framework/dom/setup' c8 cucumber-js" @@ -27,7 +28,9 @@ "std-env": "^4.0.0" }, "devDependencies": { + "@cellix/archunit-tests": "workspace:*", "@cellix/config-typescript": "workspace:*", + "@cellix/config-vitest": "workspace:*", "@ocom-verification/verification-shared": "workspace:*", "@testing-library/react": "^16.3.0", "@types/node": "catalog:", @@ -35,6 +38,7 @@ "@types/react-dom": "^19.1.6", "c8": "^10.1.3", "tsx": "catalog:", - "typescript": "catalog:" + "typescript": "catalog:", + "vitest": "catalog:" } } diff --git a/packages/ocom-verification/acceptance-ui/src/archunit-tests/serenity-conventions.test.ts b/packages/ocom-verification/acceptance-ui/src/archunit-tests/serenity-conventions.test.ts new file mode 100644 index 000000000..e98032542 --- /dev/null +++ b/packages/ocom-verification/acceptance-ui/src/archunit-tests/serenity-conventions.test.ts @@ -0,0 +1,5 @@ +import { describeSerenitySuiteConventionTests } from '@cellix/archunit-tests/serenity'; + +describeSerenitySuiteConventionTests({ + suiteRoot: 'src', +}); diff --git a/packages/ocom-verification/acceptance-ui/vitest.arch.config.ts b/packages/ocom-verification/acceptance-ui/vitest.arch.config.ts new file mode 100644 index 000000000..c9624eb8f --- /dev/null +++ b/packages/ocom-verification/acceptance-ui/vitest.arch.config.ts @@ -0,0 +1,3 @@ +import { archConfig } from '@cellix/config-vitest'; + +export default archConfig; diff --git a/packages/ocom-verification/e2e-tests/package.json b/packages/ocom-verification/e2e-tests/package.json index 57262c353..4c385c7d6 100644 --- a/packages/ocom-verification/e2e-tests/package.json +++ b/packages/ocom-verification/e2e-tests/package.json @@ -5,6 +5,7 @@ "private": true, "type": "module", "scripts": { + "test:arch": "vitest run --config vitest.arch.config.ts", "test:e2e": "pnpm run portless:prune && pnpm run proxy:start && pnpm run test:e2e:run", "test:e2e:ci": "pnpm run portless:prune && pnpm run proxy:start:ci && pnpm run test:e2e:run", "test:e2e:run": "NODE_EXTRA_CA_CERTS=${HOME}/.portless/ca.pem LOG_LEVEL=warn NODE_OPTIONS='--import tsx/esm' cucumber-js", @@ -25,15 +26,18 @@ "std-env": "^4.0.0" }, "devDependencies": { + "@cellix/archunit-tests": "workspace:*", "@cellix/local-dev": "workspace:*", "@ocom/local-dev-config": "workspace:*", "@ocom/service-queue-storage": "workspace:*", "@cellix/config-typescript": "workspace:*", + "@cellix/config-vitest": "workspace:*", "@ocom-verification/verification-shared": "workspace:*", "@types/node": "catalog:", "playwright": "catalog:", "rimraf": "^6.0.1", "tsx": "catalog:", - "typescript": "catalog:" + "typescript": "catalog:", + "vitest": "catalog:" } } diff --git a/packages/ocom-verification/e2e-tests/src/archunit-tests/serenity-conventions.test.ts b/packages/ocom-verification/e2e-tests/src/archunit-tests/serenity-conventions.test.ts new file mode 100644 index 000000000..0459db109 --- /dev/null +++ b/packages/ocom-verification/e2e-tests/src/archunit-tests/serenity-conventions.test.ts @@ -0,0 +1,6 @@ +import { describeSerenitySuiteConventionTests } from '@cellix/archunit-tests/serenity'; + +describeSerenitySuiteConventionTests({ + suiteRoot: 'src', + requireManagedCleanup: true, +}); diff --git a/packages/ocom-verification/e2e-tests/src/cucumber-lifecycle-hooks.ts b/packages/ocom-verification/e2e-tests/src/cucumber-lifecycle-hooks.ts index f97c38705..99aaf7c3f 100644 --- a/packages/ocom-verification/e2e-tests/src/cucumber-lifecycle-hooks.ts +++ b/packages/ocom-verification/e2e-tests/src/cucumber-lifecycle-hooks.ts @@ -14,6 +14,9 @@ export function registerLifecycleHooks(): void { registerWorldLifecycleHooks({ beforeTimeout: getTimeout('serverStartup') + getTimeout('uiInit') * 3, scenarioTimeout: getTimeout('scenario'), + // The first Before cold-boots all servers + the browser, which exceeds the + // per-scenario budget on a cold machine; give it a dedicated boot timeout. + beforeTimeout: getTimeout('boot'), before: async (world) => { await world.init(); }, diff --git a/packages/ocom-verification/e2e-tests/vitest.arch.config.ts b/packages/ocom-verification/e2e-tests/vitest.arch.config.ts new file mode 100644 index 000000000..c9624eb8f --- /dev/null +++ b/packages/ocom-verification/e2e-tests/vitest.arch.config.ts @@ -0,0 +1,3 @@ +import { archConfig } from '@cellix/config-vitest'; + +export default archConfig; diff --git a/packages/ocom/persistence/src/datasources/domain/user/staff-role/staff-role.repository.test.ts b/packages/ocom/persistence/src/datasources/domain/user/staff-role/staff-role.repository.test.ts index 0c6515a5d..f7ddb1bd1 100644 --- a/packages/ocom/persistence/src/datasources/domain/user/staff-role/staff-role.repository.test.ts +++ b/packages/ocom/persistence/src/datasources/domain/user/staff-role/staff-role.repository.test.ts @@ -85,7 +85,7 @@ test.for(feature, ({ Scenario, Background, BeforeEachScenario }) => { }; Object.assign(ModelMock, { findById: vi.fn((id: string) => ({ - exec: vi.fn(() => (id === staffRoleDoc._id ? staffRoleDoc : null)), + exec: vi.fn(() => (id === String(staffRoleDoc._id) ? staffRoleDoc : null)), })), findOne: vi.fn((query: { roleName?: string; enterpriseAppRole?: string; isDefault?: boolean }) => ({ exec: vi.fn(() => { diff --git a/packages/ocom/service-otel/src/otel-builder.ts b/packages/ocom/service-otel/src/otel-builder.ts index cd10147dc..f21686e57 100644 --- a/packages/ocom/service-otel/src/otel-builder.ts +++ b/packages/ocom/service-otel/src/otel-builder.ts @@ -1,16 +1,16 @@ -import type { NodeSDKConfiguration } from '@opentelemetry/sdk-node'; -import { AzureMonitorTraceExporter, AzureMonitorMetricExporter, AzureMonitorLogExporter } from '@azure/monitor-opentelemetry-exporter'; -import { BatchLogRecordProcessor, SimpleLogRecordProcessor, ConsoleLogRecordExporter } from '@opentelemetry/sdk-logs'; -import { BatchSpanProcessor, SimpleSpanProcessor, ConsoleSpanExporter, type Sampler, SamplingDecision, ParentBasedSampler, AlwaysOnSampler } from '@opentelemetry/sdk-trace-node'; -import { PeriodicExportingMetricReader, ConsoleMetricExporter } from '@opentelemetry/sdk-metrics'; -import { HttpInstrumentation } from '@opentelemetry/instrumentation-http'; +import azureOtel from '@azure/functions-opentelemetry-instrumentation'; +import { AzureMonitorLogExporter, AzureMonitorMetricExporter, AzureMonitorTraceExporter } from '@azure/monitor-opentelemetry-exporter'; +import type { Attributes, Context, Link, SpanKind } from '@opentelemetry/api'; import { DataloaderInstrumentation } from '@opentelemetry/instrumentation-dataloader'; import { GraphQLInstrumentation } from '@opentelemetry/instrumentation-graphql'; -import azureOtel from '@azure/functions-opentelemetry-instrumentation'; +import { HttpInstrumentation } from '@opentelemetry/instrumentation-http'; import { MongooseInstrumentation } from '@opentelemetry/instrumentation-mongoose'; - +import { BatchLogRecordProcessor, ConsoleLogRecordExporter, SimpleLogRecordProcessor } from '@opentelemetry/sdk-logs'; +import { ConsoleMetricExporter, PeriodicExportingMetricReader } from '@opentelemetry/sdk-metrics'; +import type { NodeSDKConfiguration } from '@opentelemetry/sdk-node'; +import { AlwaysOnSampler, BatchSpanProcessor, ConsoleSpanExporter, ParentBasedSampler, type Sampler, SamplingDecision, SimpleSpanProcessor } from '@opentelemetry/sdk-trace-node'; import { httpInstrumentationConfig } from './http-config.ts'; -import type { Attributes, Context, Link, SpanKind } from '@opentelemetry/api'; + const { AzureFunctionsInstrumentation } = azureOtel; //Need to use destructuring to access AzureFunctionsInstrumentation (CommonJS module) interface Exporters { diff --git a/packages/ocom/service-queue-storage/turbo.json b/packages/ocom/service-queue-storage/turbo.json index 5cf61f325..44aa7bf51 100644 --- a/packages/ocom/service-queue-storage/turbo.json +++ b/packages/ocom/service-queue-storage/turbo.json @@ -8,7 +8,7 @@ "outputs": ["src/**/*.schema.generated.ts"] }, "build": { - "dependsOn": ["gen"], + "dependsOn": ["^build", "gen"], "inputs": ["$TURBO_EXTENDS$"], "outputs": ["$TURBO_EXTENDS$"] } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9c1b08443..8a7f91c53 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -31,20 +31,20 @@ catalogs: specifier: 1.0.1 version: 1.0.1 '@serenity-js/assertions': - specifier: 3.43.0 - version: 3.43.0 + specifier: 3.44.1 + version: 3.44.1 '@serenity-js/console-reporter': - specifier: 3.43.0 - version: 3.43.0 + specifier: 3.44.1 + version: 3.44.1 '@serenity-js/core': - specifier: 3.43.0 - version: 3.43.0 + specifier: 3.44.1 + version: 3.44.1 '@serenity-js/cucumber': - specifier: 3.43.0 - version: 3.43.0 + specifier: 3.44.1 + version: 3.44.1 '@serenity-js/serenity-bdd': - specifier: 3.43.0 - version: 3.43.0 + specifier: 3.44.1 + version: 3.44.1 '@storybook/addon-a11y': specifier: ^10.4.2 version: 10.4.2 @@ -70,8 +70,8 @@ catalogs: specifier: 7.0.0-dev.20260428.1 version: 7.0.0-dev.20260428.1 '@vitest/coverage-istanbul': - specifier: 4.1.8 - version: 4.1.8 + specifier: 4.1.10 + version: 4.1.10 antd: specifier: 6.3.5 version: 6.3.5 @@ -91,8 +91,8 @@ catalogs: specifier: ^10.1.4 version: 10.3.0 mongoose: - specifier: 8.17.0 - version: 8.17.0 + specifier: 8.24.1 + version: 8.24.1 react: specifier: ^19.1.1 version: 19.2.0 @@ -100,8 +100,8 @@ catalogs: specifier: ^19.1.1 version: 19.2.0 react-router-dom: - specifier: 7.15.1 - version: 7.15.1 + specifier: 7.18.1 + version: 7.18.1 rimraf: specifier: 6.0.1 version: 6.0.1 @@ -118,14 +118,14 @@ catalogs: specifier: ^0.28.0 version: 0.28.0 vitest: - specifier: 4.1.8 - version: 4.1.8 + specifier: 4.1.10 + version: 4.1.10 overrides: - '@vitest/browser': 4.1.8 - '@vitest/browser-playwright': 4.1.8 + '@vitest/browser': 4.1.10 + '@vitest/browser-playwright': 4.1.10 happy-dom: 20.10.1 - axios: 1.16.0 + axios: 1.18.1 body-parser: 2.3.0 esbuild: 0.28.1 follow-redirects: ^1.16.0 @@ -133,14 +133,16 @@ overrides: jiti: 2.6.1 rollup: ^4.59.0 '@ant-design/pro-layout>path-to-regexp': ^8.4.0 - brace-expansion: 5.0.7 + brace-expansion@1: 2.1.2 + brace-expansion@5: 5.0.8 diff@4.0.2: 4.0.4 '@protobufjs/codegen': 2.0.5 '@protobufjs/utf8': 1.1.1 + protobufjs@7.5.4: 7.6.5 serve-handler>minimatch: 3.1.5 serialize-javascript@6.0.2: 7.0.5 serialize-javascript@7.0.4: 7.0.5 - svgo: ^3.3.3 + svgo: ^3.3.4 yaml@2.8.2: 2.8.3 yauzl@3.2.0: 3.2.1 qs: 6.15.2 @@ -153,36 +155,43 @@ overrides: node-forge@<1.3.2: '>=1.3.2' picomatch: ^4.0.4 webpack: ^5.105.4 - webpack-dev-server: ^5.2.6 + webpack-dev-server: 5.2.6 express-rate-limit: 8.5.1 '@azure/ms-rest-js>uuid': ^3.4.0 azurite>uuid: ^3.4.0 ws@8.20.0: 8.21.0 playwright-core: 1.59.0 playwright: 1.59.0 - postcss: 8.5.10 + postcss: 8.5.23 protobufjs: 7.6.5 ip-address: ^10.1.1 - fast-uri: ^4.0.1 + fast-uri: ^4.1.1 + websocket-driver: 0.7.5 '@babel/plugin-transform-modules-systemjs': 7.29.4 '@babel/core': ^7.29.6 js-yaml: 4.3.0 js-yaml@3.14.2: 3.15.0 + js-yaml@4.1.1: 4.3.0 + js-yaml@4.2.0: 4.3.0 + body-parser@1.20.5: 1.20.6 + body-parser@2.2.2: 2.3.0 shell-quote@<1.8.4: 1.8.4 '@opentelemetry/exporter-prometheus@0.57.2': 0.217.0 '@opentelemetry/core@2.7.1': 2.8.0 + '@opentelemetry/propagator-jaeger': 2.9.0 + adm-zip: 0.6.0 ws: 8.21.0 shell-quote: 1.9.0 '@grpc/grpc-js': '>=1.14.4' form-data: ^4.0.6 webpack-dev-server>http-proxy-middleware: 3.0.7 joi: ^17.13.4 - brace-expansion@2: 2.0.3 + brace-expansion@2: 2.1.2 dottie: 2.0.7 http-proxy-middleware: 3.0.7 - immutable: 3.8.3 + immutable: 5.1.9 launch-editor: ^2.14.1 - react-router-dom@7.15.0>react-router: 7.15.1 + morgan: 1.11.0 sequelize: 6.37.8 smol-toml: 1.6.1 '@azure/ms-rest-js>tough-cookie': 4.1.3 @@ -200,7 +209,7 @@ importers: devDependencies: '@amiceli/vitest-cucumber': specifier: ^6.3.0 - version: 6.3.0(vitest@4.1.8) + version: 6.3.0(vitest@4.1.10) '@ant-design/cli': specifier: ^6.3.5 version: 6.3.5(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) @@ -236,7 +245,7 @@ importers: version: 1.59.0 '@sonar/scan': specifier: ^4.3.0 - version: 4.3.2 + version: 4.3.2(supports-color@8.1.1) '@types/node': specifier: 'catalog:' version: 22.19.15 @@ -245,7 +254,7 @@ importers: version: 7.0.0-dev.20260428.1 '@vitest/coverage-istanbul': specifier: 'catalog:' - version: 4.1.8(supports-color@8.1.1)(vitest@4.1.8) + version: 4.1.10(supports-color@8.1.1)(vitest@4.1.10) chrome-devtools-mcp: specifier: ^1.3.0 version: 1.3.0 @@ -278,7 +287,7 @@ importers: version: 6.0.3 vitest: specifier: 'catalog:' - version: 4.1.8(@opentelemetry/api@1.9.0)(@types/node@22.19.15)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@22.19.15)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@22.19.15)(@vitest/coverage-istanbul@4.1.10)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@22.19.15)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) apps/api: dependencies: @@ -334,6 +343,9 @@ importers: specifier: 1.9.0 version: 1.9.0 devDependencies: + '@cellix/archunit-tests': + specifier: workspace:* + version: link:../../packages/cellix/archunit-tests '@cellix/config-rolldown': specifier: workspace:* version: link:../../packages/cellix/config-rolldown @@ -351,7 +363,7 @@ importers: version: link:../../packages/ocom/local-dev-config '@vitest/coverage-istanbul': specifier: 'catalog:' - version: 4.1.8(vitest@4.1.8) + version: 4.1.10(vitest@4.1.10) archunit: specifier: 'catalog:' version: 2.1.63 @@ -369,7 +381,7 @@ importers: version: 6.0.3 vitest: specifier: 'catalog:' - version: 4.1.8(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-istanbul@4.1.10)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) apps/docs: dependencies: @@ -433,7 +445,7 @@ importers: version: 6.0.1(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) '@vitest/coverage-istanbul': specifier: 'catalog:' - version: 4.1.8(vitest@4.1.8) + version: 4.1.10(vitest@4.1.10) jsdom: specifier: ^26.1.0 version: 26.1.0 @@ -442,7 +454,7 @@ importers: version: 6.0.3 vitest: specifier: 'catalog:' - version: 4.1.8(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-istanbul@4.1.10)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) apps/server-mongodb-memory-mock: dependencies: @@ -460,7 +472,7 @@ importers: version: 6.18.0 mongoose: specifier: 'catalog:' - version: 8.17.0(supports-color@8.1.1) + version: 8.24.1(supports-color@8.1.1) devDependencies: '@cellix/config-typescript': specifier: workspace:* @@ -498,7 +510,7 @@ importers: version: link:../../packages/cellix/local-dev '@vitest/coverage-istanbul': specifier: 'catalog:' - version: 4.1.8(vitest@4.1.8) + version: 4.1.10(vitest@4.1.10) rimraf: specifier: 'catalog:' version: 6.0.1 @@ -507,7 +519,7 @@ importers: version: 6.0.3 vitest: specifier: 'catalog:' - version: 4.1.8(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-istanbul@4.1.10)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) apps/ui-community: dependencies: @@ -558,8 +570,11 @@ importers: version: 3.3.0(oidc-client-ts@3.4.1)(react@19.2.0) react-router-dom: specifier: 'catalog:' - version: 7.15.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 7.18.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) devDependencies: + '@cellix/archunit-tests': + specifier: workspace:* + version: link:../../packages/cellix/archunit-tests '@cellix/config-typescript': specifier: workspace:* version: link:../../packages/cellix/config-typescript @@ -583,7 +598,7 @@ importers: version: 10.4.2(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)) '@storybook/addon-vitest': specifier: 'catalog:' - version: 10.4.2(@vitest/browser-playwright@4.1.8)(@vitest/browser@4.1.8(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.8))(@vitest/runner@4.1.8)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vitest@4.1.8) + version: 10.4.2(@vitest/browser@4.1.10(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.10))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vitest@4.1.10) '@storybook/react': specifier: 10.4.2 version: 10.4.2(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@6.0.3) @@ -601,7 +616,10 @@ importers: version: 6.0.1(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) '@vitest/coverage-istanbul': specifier: 'catalog:' - version: 4.1.8(vitest@4.1.8) + version: 4.1.10(vitest@4.1.10) + autoprefixer: + specifier: 10.4.22 + version: 10.4.22(postcss@8.5.23) esbuild: specifier: 0.28.1 version: 0.28.1 @@ -631,7 +649,7 @@ importers: version: 0.28.0(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) vitest: specifier: 'catalog:' - version: 4.1.8(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-istanbul@4.1.10)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) apps/ui-staff: dependencies: @@ -691,8 +709,11 @@ importers: version: 3.3.0(oidc-client-ts@3.4.1)(react@19.2.0) react-router-dom: specifier: 'catalog:' - version: 7.15.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 7.18.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) devDependencies: + '@cellix/archunit-tests': + specifier: workspace:* + version: link:../../packages/cellix/archunit-tests '@cellix/config-typescript': specifier: workspace:* version: link:../../packages/cellix/config-typescript @@ -713,7 +734,7 @@ importers: version: 6.0.1(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) '@vitest/coverage-istanbul': specifier: 'catalog:' - version: 4.1.8(vitest@4.1.8) + version: 4.1.10(vitest@4.1.10) esbuild: specifier: 0.28.1 version: 0.28.1 @@ -737,7 +758,7 @@ importers: version: 0.28.0(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) vitest: specifier: 'catalog:' - version: 4.1.8(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-istanbul@4.1.10)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) packages/cellix/api-services-spec: devDependencies: @@ -773,7 +794,7 @@ importers: version: 6.0.3 vitest: specifier: 'catalog:' - version: 4.1.8(@opentelemetry/api@1.9.0)(@types/node@22.19.15)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@22.19.15)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@22.19.15)(@vitest/coverage-istanbul@4.1.10)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@22.19.15)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) packages/cellix/config-rolldown: devDependencies: @@ -785,7 +806,7 @@ importers: version: link:../config-vitest '@vitest/coverage-istanbul': specifier: 'catalog:' - version: 4.1.8(vitest@4.1.8) + version: 4.1.10(vitest@4.1.10) rimraf: specifier: 'catalog:' version: 6.0.1 @@ -797,7 +818,7 @@ importers: version: 6.0.3 vitest: specifier: 'catalog:' - version: 4.1.8(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-istanbul@4.1.10)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) packages/cellix/config-typescript: {} @@ -808,16 +829,16 @@ importers: version: link:../config-typescript '@storybook/addon-vitest': specifier: 'catalog:' - version: 10.4.2(@vitest/browser-playwright@4.1.8)(@vitest/browser@4.1.8(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.8))(@vitest/runner@4.1.8)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vitest@4.1.8) + version: 10.4.2(@vitest/browser-playwright@4.1.10)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vitest@4.1.10) '@vitest/browser-playwright': - specifier: 4.1.8 - version: 4.1.8(playwright@1.59.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.8) + specifier: 4.1.10 + version: 4.1.10(playwright@1.59.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.10) typescript: specifier: 'catalog:' version: 6.0.3 vitest: specifier: 'catalog:' - version: 4.1.8(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-istanbul@4.1.10(supports-color@8.1.1)(vitest@4.1.10))(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) packages/cellix/domain-seedwork: devDependencies: @@ -829,7 +850,7 @@ importers: version: link:../config-vitest '@vitest/coverage-istanbul': specifier: 'catalog:' - version: 4.1.8(vitest@4.1.8) + version: 4.1.10(vitest@4.1.10) rimraf: specifier: 'catalog:' version: 6.0.1 @@ -838,7 +859,7 @@ importers: version: 6.0.3 vitest: specifier: 'catalog:' - version: 4.1.8(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-istanbul@4.1.10)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) packages/cellix/event-bus-seedwork-node: dependencies: @@ -857,7 +878,7 @@ importers: version: link:../config-vitest '@vitest/coverage-istanbul': specifier: 'catalog:' - version: 4.1.8(vitest@4.1.8) + version: 4.1.10(vitest@4.1.10) rimraf: specifier: 'catalog:' version: 6.0.1 @@ -888,7 +909,7 @@ importers: devDependencies: '@amiceli/vitest-cucumber': specifier: ^6.3.0 - version: 6.3.0(vitest@4.1.8) + version: 6.3.0(vitest@4.1.10) '@cellix/config-typescript': specifier: workspace:* version: link:../config-typescript @@ -897,7 +918,7 @@ importers: version: link:../config-vitest '@vitest/coverage-istanbul': specifier: 'catalog:' - version: 4.1.8(vitest@4.1.8) + version: 4.1.10(vitest@4.1.10) rimraf: specifier: 'catalog:' version: 6.0.1 @@ -906,7 +927,7 @@ importers: version: 6.0.3 vitest: specifier: 'catalog:' - version: 4.1.8(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-istanbul@4.1.10)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) packages/cellix/graphql-core: dependencies: @@ -925,7 +946,7 @@ importers: version: link:../config-vitest '@vitest/coverage-istanbul': specifier: 'catalog:' - version: 4.1.8(vitest@4.1.8) + version: 4.1.10(vitest@4.1.10) rimraf: specifier: 'catalog:' version: 6.0.1 @@ -934,7 +955,7 @@ importers: version: 6.0.3 vitest: specifier: 'catalog:' - version: 4.1.8(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-istanbul@4.1.10)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) packages/cellix/local-dev: devDependencies: @@ -949,7 +970,7 @@ importers: version: 22.19.15 '@vitest/coverage-istanbul': specifier: 'catalog:' - version: 4.1.8(vitest@4.1.8) + version: 4.1.10(vitest@4.1.10) rimraf: specifier: 'catalog:' version: 6.0.1 @@ -958,7 +979,7 @@ importers: version: 6.0.3 vitest: specifier: 'catalog:' - version: 4.1.8(@opentelemetry/api@1.9.0)(@types/node@22.19.15)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@22.19.15)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@22.19.15)(@vitest/coverage-istanbul@4.1.10)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@22.19.15)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) packages/cellix/mongoose-seedwork: dependencies: @@ -977,7 +998,7 @@ importers: version: link:../config-vitest '@vitest/coverage-istanbul': specifier: 'catalog:' - version: 4.1.8(vitest@4.1.8) + version: 4.1.10(vitest@4.1.10) mongodb: specifier: 'catalog:' version: 6.18.0 @@ -986,7 +1007,7 @@ importers: version: 10.3.0(supports-color@8.1.1) mongoose: specifier: 'catalog:' - version: 8.17.0(supports-color@8.1.1) + version: 8.24.1(supports-color@8.1.1) rimraf: specifier: 'catalog:' version: 6.0.1 @@ -995,7 +1016,7 @@ importers: version: 6.0.3 vitest: specifier: 'catalog:' - version: 4.1.8(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-istanbul@4.1.10)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) packages/cellix/serenity-framework: dependencies: @@ -1016,7 +1037,7 @@ importers: version: 20.10.6 '@serenity-js/core': specifier: 'catalog:' - version: 3.43.0 + version: 3.44.1 graphql: specifier: 'catalog:' version: 16.12.0 @@ -1050,7 +1071,7 @@ importers: version: 19.2.7 '@vitest/coverage-istanbul': specifier: 'catalog:' - version: 4.1.8(vitest@4.1.8) + version: 4.1.10(vitest@4.1.10) playwright: specifier: 1.59.0 version: 1.59.0 @@ -1065,7 +1086,7 @@ importers: version: 6.0.3 vitest: specifier: 'catalog:' - version: 4.1.8(@opentelemetry/api@1.9.0)(@types/node@22.19.15)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@22.19.15)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@22.19.15)(@vitest/coverage-istanbul@4.1.10)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@22.19.15)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) packages/cellix/server-mongodb-memory-mock-seedwork: dependencies: @@ -1074,7 +1095,7 @@ importers: version: 10.3.0 mongoose: specifier: 'catalog:' - version: 8.17.0(supports-color@8.1.1) + version: 8.24.1(supports-color@8.1.1) devDependencies: '@cellix/config-typescript': specifier: workspace:* @@ -1115,7 +1136,7 @@ importers: version: 5.0.5 '@vitest/coverage-istanbul': specifier: 'catalog:' - version: 4.1.8(vitest@4.1.8) + version: 4.1.10(vitest@4.1.10) rimraf: specifier: 'catalog:' version: 6.0.1 @@ -1124,7 +1145,7 @@ importers: version: 6.0.3 vitest: specifier: 'catalog:' - version: 4.1.8(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-istanbul@4.1.10)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) packages/cellix/service-blob-storage: dependencies: @@ -1146,7 +1167,7 @@ importers: version: link:../config-vitest '@vitest/coverage-istanbul': specifier: 'catalog:' - version: 4.1.8(vitest@4.1.8) + version: 4.1.10(vitest@4.1.10) rimraf: specifier: 'catalog:' version: 6.0.1 @@ -1155,7 +1176,7 @@ importers: version: 6.0.3 vitest: specifier: 'catalog:' - version: 4.1.8(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-istanbul@4.1.10)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) packages/cellix/service-queue-storage: dependencies: @@ -1180,7 +1201,7 @@ importers: devDependencies: '@amiceli/vitest-cucumber': specifier: ^6.3.0 - version: 6.3.0(vitest@4.1.8) + version: 6.3.0(vitest@4.1.10) '@cellix/config-typescript': specifier: workspace:* version: link:../config-typescript @@ -1189,7 +1210,7 @@ importers: version: link:../config-vitest '@vitest/coverage-istanbul': specifier: 'catalog:' - version: 4.1.8(vitest@4.1.8) + version: 4.1.10(vitest@4.1.10) execa: specifier: ^9.6.0 version: 9.6.1 @@ -1201,7 +1222,7 @@ importers: version: 6.0.3 vitest: specifier: 'catalog:' - version: 4.1.8(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-istanbul@4.1.10)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) packages/cellix/ui-core: dependencies: @@ -1235,7 +1256,7 @@ importers: version: 10.4.2(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)) '@storybook/addon-vitest': specifier: 'catalog:' - version: 10.4.2(@vitest/browser-playwright@4.1.8)(@vitest/browser@4.1.8(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.8))(@vitest/runner@4.1.8)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vitest@4.1.8) + version: 10.4.2(@vitest/browser-playwright@4.1.10)(@vitest/browser@4.1.10(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.10))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vitest@4.1.10) '@storybook/react': specifier: 10.4.2 version: 10.4.2(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@6.0.3) @@ -1252,14 +1273,14 @@ importers: specifier: ^19.1.6 version: 19.2.3(@types/react@19.2.7) '@vitest/browser': - specifier: 4.1.8 - version: 4.1.8(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.8) + specifier: 4.1.10 + version: 4.1.10(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.10) '@vitest/browser-playwright': - specifier: 4.1.8 - version: 4.1.8(playwright@1.59.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.8) + specifier: 4.1.10 + version: 4.1.10(playwright@1.59.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.10) '@vitest/coverage-istanbul': specifier: 'catalog:' - version: 4.1.8(vitest@4.1.8) + version: 4.1.10(vitest@4.1.10) jsdom: specifier: 'catalog:' version: 26.1.0 @@ -1268,7 +1289,7 @@ importers: version: 3.3.0(oidc-client-ts@3.4.1)(react@19.2.0) react-router-dom: specifier: 'catalog:' - version: 7.15.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 7.18.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) rimraf: specifier: 'catalog:' version: 6.0.1 @@ -1280,7 +1301,7 @@ importers: version: 6.0.3 vitest: specifier: 'catalog:' - version: 4.1.8(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-istanbul@4.1.10)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) packages/ocom-verification/acceptance-api: dependencies: @@ -1292,19 +1313,19 @@ importers: version: 12.8.1 '@serenity-js/assertions': specifier: 'catalog:' - version: 3.43.0 + version: 3.44.1 '@serenity-js/console-reporter': specifier: 'catalog:' - version: 3.43.0 + version: 3.44.1 '@serenity-js/core': specifier: 'catalog:' - version: 3.43.0 + version: 3.44.1 '@serenity-js/cucumber': specifier: 'catalog:' - version: 3.43.0(@cucumber/cucumber@12.8.1) + version: 3.44.1(@cucumber/cucumber@12.8.1) '@serenity-js/serenity-bdd': specifier: 'catalog:' - version: 3.43.0 + version: 3.44.1 graphql: specifier: 'catalog:' version: 16.12.0 @@ -1318,9 +1339,15 @@ importers: specifier: ^4.0.0 version: 4.0.0 devDependencies: + '@cellix/archunit-tests': + specifier: workspace:* + version: link:../../cellix/archunit-tests '@cellix/config-typescript': specifier: workspace:* version: link:../../cellix/config-typescript + '@cellix/config-vitest': + specifier: workspace:* + version: link:../../cellix/config-vitest '@cellix/service-blob-storage': specifier: workspace:* version: link:../../cellix/service-blob-storage @@ -1375,6 +1402,9 @@ importers: typescript: specifier: 'catalog:' version: 6.0.3 + vitest: + specifier: 'catalog:' + version: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@22.19.15)(@vitest/coverage-istanbul@4.1.10)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@22.19.15)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) packages/ocom-verification/acceptance-ui: dependencies: @@ -1392,16 +1422,16 @@ importers: version: 3.0.4(react@19.2.0) '@serenity-js/console-reporter': specifier: 'catalog:' - version: 3.43.0 + version: 3.44.1 '@serenity-js/core': specifier: 'catalog:' - version: 3.43.0 + version: 3.44.1 '@serenity-js/cucumber': specifier: 'catalog:' - version: 3.43.0(@cucumber/cucumber@12.8.1) + version: 3.44.1(@cucumber/cucumber@12.8.1) '@serenity-js/serenity-bdd': specifier: 'catalog:' - version: 3.43.0 + version: 3.44.1 antd: specifier: 'catalog:' version: 6.3.5(luxon@3.7.2)(moment@2.30.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) @@ -1419,14 +1449,20 @@ importers: version: 3.3.0(oidc-client-ts@3.4.1)(react@19.2.0) react-router-dom: specifier: 'catalog:' - version: 7.15.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 7.18.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) std-env: specifier: ^4.0.0 version: 4.0.0 devDependencies: + '@cellix/archunit-tests': + specifier: workspace:* + version: link:../../cellix/archunit-tests '@cellix/config-typescript': specifier: workspace:* version: link:../../cellix/config-typescript + '@cellix/config-vitest': + specifier: workspace:* + version: link:../../cellix/config-vitest '@ocom-verification/verification-shared': specifier: workspace:* version: link:../verification-shared @@ -1451,6 +1487,9 @@ importers: typescript: specifier: 'catalog:' version: 6.0.3 + vitest: + specifier: 'catalog:' + version: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@22.19.15)(@vitest/coverage-istanbul@4.1.10)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@22.19.15)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) packages/ocom-verification/archunit-tests: devDependencies: @@ -1471,7 +1510,7 @@ importers: version: 6.0.3 vitest: specifier: 'catalog:' - version: 4.1.8(@opentelemetry/api@1.9.0)(@types/node@22.19.15)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@22.19.15)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@22.19.15)(@vitest/coverage-istanbul@4.1.10)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@22.19.15)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) packages/ocom-verification/e2e-tests: dependencies: @@ -1483,26 +1522,32 @@ importers: version: 12.8.1 '@serenity-js/assertions': specifier: 'catalog:' - version: 3.43.0 + version: 3.44.1 '@serenity-js/console-reporter': specifier: 'catalog:' - version: 3.43.0 + version: 3.44.1 '@serenity-js/core': specifier: 'catalog:' - version: 3.43.0 + version: 3.44.1 '@serenity-js/cucumber': specifier: 'catalog:' - version: 3.43.0(@cucumber/cucumber@12.8.1) + version: 3.44.1(@cucumber/cucumber@12.8.1) '@serenity-js/serenity-bdd': specifier: 'catalog:' - version: 3.43.0 + version: 3.44.1 std-env: specifier: ^4.0.0 version: 4.0.0 devDependencies: + '@cellix/archunit-tests': + specifier: workspace:* + version: link:../../cellix/archunit-tests '@cellix/config-typescript': specifier: workspace:* version: link:../../cellix/config-typescript + '@cellix/config-vitest': + specifier: workspace:* + version: link:../../cellix/config-vitest '@cellix/local-dev': specifier: workspace:* version: link:../../cellix/local-dev @@ -1530,6 +1575,9 @@ importers: typescript: specifier: 'catalog:' version: 6.0.3 + vitest: + specifier: 'catalog:' + version: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@22.19.15)(@vitest/coverage-istanbul@4.1.10)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@22.19.15)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) packages/ocom-verification/verification-shared: dependencies: @@ -1538,7 +1586,7 @@ importers: version: link:../../cellix/serenity-framework '@serenity-js/core': specifier: 'catalog:' - version: 3.43.0 + version: 3.44.1 mongodb: specifier: 'catalog:' version: 6.18.0 @@ -1585,7 +1633,7 @@ importers: version: link:../../ocom-verification/archunit-tests '@vitest/coverage-istanbul': specifier: 'catalog:' - version: 4.1.8(vitest@4.1.8) + version: 4.1.10(vitest@4.1.10) rimraf: specifier: 'catalog:' version: 6.0.1 @@ -1594,7 +1642,7 @@ importers: version: 6.0.3 vitest: specifier: 'catalog:' - version: 4.1.8(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-istanbul@4.1.10)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) packages/ocom/context-spec: dependencies: @@ -1631,7 +1679,7 @@ importers: version: link:../../cellix/mongoose-seedwork mongoose: specifier: 'catalog:' - version: 8.17.0(supports-color@8.1.1) + version: 8.24.1(supports-color@8.1.1) devDependencies: '@cellix/archunit-tests': specifier: workspace:* @@ -1653,7 +1701,7 @@ importers: version: 6.0.3 vitest: specifier: 'catalog:' - version: 4.1.8(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-istanbul@4.1.10(supports-color@8.1.1)(vitest@4.1.10))(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) packages/ocom/domain: dependencies: @@ -1690,22 +1738,22 @@ importers: version: link:../../ocom-verification/archunit-tests '@serenity-js/assertions': specifier: 'catalog:' - version: 3.43.0 + version: 3.44.1 '@serenity-js/console-reporter': specifier: 'catalog:' - version: 3.43.0 + version: 3.44.1 '@serenity-js/core': specifier: 'catalog:' - version: 3.43.0 + version: 3.44.1 '@serenity-js/cucumber': specifier: 'catalog:' - version: 3.43.0(@cucumber/cucumber@12.8.1) + version: 3.44.1(@cucumber/cucumber@12.8.1) '@serenity-js/serenity-bdd': specifier: 'catalog:' - version: 3.43.0 + version: 3.44.1 '@vitest/coverage-istanbul': specifier: 'catalog:' - version: 4.1.8(vitest@4.1.8) + version: 4.1.10(vitest@4.1.10) rimraf: specifier: 'catalog:' version: 6.0.1 @@ -1714,7 +1762,7 @@ importers: version: 6.0.3 vitest: specifier: 'catalog:' - version: 4.1.8(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-istanbul@4.1.10)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) packages/ocom/event-handler: dependencies: @@ -1767,7 +1815,7 @@ importers: version: link:../../ocom-verification/archunit-tests '@vitest/coverage-istanbul': specifier: 'catalog:' - version: 4.1.8(vitest@4.1.8) + version: 4.1.10(vitest@4.1.10) rimraf: specifier: 'catalog:' version: 6.0.1 @@ -1776,7 +1824,7 @@ importers: version: 6.0.3 vitest: specifier: 'catalog:' - version: 4.1.8(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-istanbul@4.1.10)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) packages/ocom/graphql-handler: dependencies: @@ -1810,7 +1858,7 @@ importers: version: link:../../cellix/config-vitest '@vitest/coverage-istanbul': specifier: 'catalog:' - version: 4.1.8(vitest@4.1.8) + version: 4.1.10(vitest@4.1.10) rimraf: specifier: 'catalog:' version: 6.0.1 @@ -1819,7 +1867,7 @@ importers: version: 6.0.3 vitest: specifier: 'catalog:' - version: 4.1.8(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-istanbul@4.1.10)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) packages/ocom/local-dev-config: dependencies: @@ -1838,7 +1886,7 @@ importers: version: 22.19.15 '@vitest/coverage-istanbul': specifier: 'catalog:' - version: 4.1.8(vitest@4.1.8) + version: 4.1.10(vitest@4.1.10) rimraf: specifier: 'catalog:' version: 6.0.1 @@ -1847,7 +1895,7 @@ importers: version: 6.0.3 vitest: specifier: 'catalog:' - version: 4.1.8(@opentelemetry/api@1.9.0)(@types/node@22.19.15)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@22.19.15)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@22.19.15)(@vitest/coverage-istanbul@4.1.10)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@22.19.15)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) packages/ocom/persistence: dependencies: @@ -1871,7 +1919,7 @@ importers: version: 6.18.0 mongoose: specifier: 'catalog:' - version: 8.17.0(supports-color@8.1.1) + version: 8.24.1(supports-color@8.1.1) devDependencies: '@cellix/archunit-tests': specifier: workspace:* @@ -1887,7 +1935,7 @@ importers: version: link:../../ocom-verification/archunit-tests '@vitest/coverage-istanbul': specifier: 'catalog:' - version: 4.1.8(vitest@4.1.8) + version: 4.1.10(vitest@4.1.10) rimraf: specifier: 'catalog:' version: 6.0.1 @@ -1896,7 +1944,7 @@ importers: version: 6.0.3 vitest: specifier: 'catalog:' - version: 4.1.8(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-istanbul@4.1.10)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) packages/ocom/rest: dependencies: @@ -1949,7 +1997,7 @@ importers: version: 1.1.6 '@vitest/coverage-istanbul': specifier: 'catalog:' - version: 4.1.8(vitest@4.1.8) + version: 4.1.10(vitest@4.1.10) rimraf: specifier: 'catalog:' version: 6.0.1 @@ -1958,7 +2006,7 @@ importers: version: 6.0.3 vitest: specifier: 'catalog:' - version: 4.1.8(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-istanbul@4.1.10)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) packages/ocom/service-blob-storage: dependencies: @@ -1974,7 +2022,7 @@ importers: version: link:../../cellix/config-vitest '@vitest/coverage-istanbul': specifier: 'catalog:' - version: 4.1.8(vitest@4.1.8) + version: 4.1.10(vitest@4.1.10) rimraf: specifier: 'catalog:' version: 6.0.1 @@ -1983,7 +2031,7 @@ importers: version: 6.0.3 vitest: specifier: 'catalog:' - version: 4.1.8(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-istanbul@4.1.10)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) packages/ocom/service-mongoose: dependencies: @@ -1995,7 +2043,7 @@ importers: version: link:../../cellix/mongoose-seedwork mongoose: specifier: 'catalog:' - version: 8.17.0(supports-color@8.1.1) + version: 8.24.1(supports-color@8.1.1) devDependencies: '@cellix/config-typescript': specifier: workspace:* @@ -2005,7 +2053,7 @@ importers: version: link:../../cellix/config-vitest '@vitest/coverage-istanbul': specifier: 'catalog:' - version: 4.1.8(vitest@4.1.8) + version: 4.1.10(vitest@4.1.10) rimraf: specifier: 'catalog:' version: 6.0.1 @@ -2063,7 +2111,7 @@ importers: version: link:../../cellix/config-vitest '@vitest/coverage-istanbul': specifier: 'catalog:' - version: 4.1.8(vitest@4.1.8) + version: 4.1.10(vitest@4.1.10) rimraf: specifier: 'catalog:' version: 6.0.1 @@ -2072,7 +2120,7 @@ importers: version: 6.0.3 vitest: specifier: 'catalog:' - version: 4.1.8(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-istanbul@4.1.10)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) packages/ocom/service-queue-storage: dependencies: @@ -2088,7 +2136,7 @@ importers: version: link:../../cellix/config-vitest '@vitest/coverage-istanbul': specifier: 'catalog:' - version: 4.1.8(vitest@4.1.8) + version: 4.1.10(vitest@4.1.10) rimraf: specifier: 'catalog:' version: 6.0.1 @@ -2097,7 +2145,7 @@ importers: version: 6.0.3 vitest: specifier: 'catalog:' - version: 4.1.8(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-istanbul@4.1.10)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) packages/ocom/service-token-validation: dependencies: @@ -2116,7 +2164,7 @@ importers: version: link:../../cellix/config-vitest '@vitest/coverage-istanbul': specifier: 'catalog:' - version: 4.1.8(vitest@4.1.8) + version: 4.1.10(vitest@4.1.10) rimraf: specifier: 'catalog:' version: 6.0.1 @@ -2125,7 +2173,7 @@ importers: version: 6.0.3 vitest: specifier: 'catalog:' - version: 4.1.8(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-istanbul@4.1.10)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) packages/ocom/ui-community-route-accounts: dependencies: @@ -2167,7 +2215,7 @@ importers: version: 3.3.0(oidc-client-ts@3.4.1)(react@19.2.0) react-router-dom: specifier: 'catalog:' - version: 7.15.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 7.18.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) devDependencies: '@cellix/archunit-tests': specifier: workspace:* @@ -2192,7 +2240,7 @@ importers: version: 10.4.2(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(esbuild@0.28.1)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(webpack@5.105.4(esbuild@0.28.1)) '@storybook/addon-vitest': specifier: 'catalog:' - version: 10.4.2(@vitest/browser-playwright@4.1.8)(@vitest/browser@4.1.8(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.8))(@vitest/runner@4.1.8)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vitest@4.1.8) + version: 10.4.2(@vitest/browser-playwright@4.1.10)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vitest@4.1.10) '@storybook/react': specifier: 10.4.2 version: 10.4.2(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@6.0.3) @@ -2219,7 +2267,7 @@ importers: version: 8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) vitest: specifier: 'catalog:' - version: 4.1.8(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-istanbul@4.1.10(supports-color@8.1.1)(vitest@4.1.10))(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) packages/ocom/ui-community-route-admin: dependencies: @@ -2261,7 +2309,7 @@ importers: version: 19.2.0(react@19.2.0) react-router-dom: specifier: 'catalog:' - version: 7.15.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 7.18.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) devDependencies: '@cellix/archunit-tests': specifier: workspace:* @@ -2286,7 +2334,7 @@ importers: version: 10.4.2(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(esbuild@0.28.1)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(webpack@5.105.4(esbuild@0.28.1)) '@storybook/addon-vitest': specifier: 'catalog:' - version: 10.4.2(@vitest/browser-playwright@4.1.8)(@vitest/browser@4.1.8(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.8))(@vitest/runner@4.1.8)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vitest@4.1.8) + version: 10.4.2(@vitest/browser-playwright@4.1.10)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vitest@4.1.10) '@storybook/react': specifier: ^10.4.2 version: 10.4.2(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@6.0.3) @@ -2313,7 +2361,7 @@ importers: version: 8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) vitest: specifier: 'catalog:' - version: 4.1.8(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-istanbul@4.1.10(supports-color@8.1.1)(vitest@4.1.10))(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) packages/ocom/ui-community-route-root: dependencies: @@ -2356,7 +2404,7 @@ importers: version: 10.4.2(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(esbuild@0.28.1)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(webpack@5.105.4(esbuild@0.28.1)) '@storybook/addon-vitest': specifier: 'catalog:' - version: 10.4.2(@vitest/browser-playwright@4.1.8)(@vitest/browser@4.1.8(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.8))(@vitest/runner@4.1.8)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vitest@4.1.8) + version: 10.4.2(@vitest/browser-playwright@4.1.10)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vitest@4.1.10) '@storybook/react': specifier: 'catalog:' version: 10.4.2(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@6.0.3) @@ -2383,7 +2431,7 @@ importers: version: 8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) vitest: specifier: 'catalog:' - version: 4.1.8(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-istanbul@4.1.10(supports-color@8.1.1)(vitest@4.1.10))(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) packages/ocom/ui-community-shared: dependencies: @@ -2413,7 +2461,7 @@ importers: version: 19.2.0(react@19.2.0) react-router-dom: specifier: 'catalog:' - version: 7.15.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 7.18.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) devDependencies: '@ant-design/icons': specifier: 'catalog:' @@ -2435,7 +2483,7 @@ importers: version: 10.4.2(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(esbuild@0.28.1)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(webpack@5.105.4(esbuild@0.28.1)) '@storybook/addon-vitest': specifier: 'catalog:' - version: 10.4.2(@vitest/browser-playwright@4.1.8)(@vitest/browser@4.1.8(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.8))(@vitest/runner@4.1.8)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vitest@4.1.8) + version: 10.4.2(@vitest/browser-playwright@4.1.10)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vitest@4.1.10) '@storybook/react': specifier: 'catalog:' version: 10.4.2(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@6.0.3) @@ -2462,7 +2510,7 @@ importers: version: 8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) vitest: specifier: 'catalog:' - version: 4.1.8(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-istanbul@4.1.10(supports-color@8.1.1)(vitest@4.1.10))(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) packages/ocom/ui-shared: dependencies: @@ -2495,7 +2543,7 @@ importers: version: 3.3.0(oidc-client-ts@3.4.1)(react@19.2.0) react-router-dom: specifier: 'catalog:' - version: 7.15.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 7.18.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) devDependencies: '@cellix/archunit-tests': specifier: workspace:* @@ -2520,7 +2568,7 @@ importers: version: 10.4.2(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(esbuild@0.28.1)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(webpack@5.105.4(esbuild@0.28.1)) '@storybook/addon-vitest': specifier: 'catalog:' - version: 10.4.2(@vitest/browser-playwright@4.1.8)(@vitest/browser@4.1.8(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.8))(@vitest/runner@4.1.8)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vitest@4.1.8) + version: 10.4.2(@vitest/browser@4.1.10(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.10))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vitest@4.1.10) '@storybook/react': specifier: 'catalog:' version: 10.4.2(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@6.0.3) @@ -2534,11 +2582,11 @@ importers: specifier: ^19.1.6 version: 19.2.3(@types/react@19.2.7) '@vitest/browser': - specifier: 4.1.8 - version: 4.1.8(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.8) + specifier: 4.1.10 + version: 4.1.10(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.10) '@vitest/coverage-istanbul': specifier: 'catalog:' - version: 4.1.8(vitest@4.1.8) + version: 4.1.10(vitest@4.1.10) jsdom: specifier: 'catalog:' version: 26.1.0 @@ -2559,7 +2607,7 @@ importers: version: 8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) vitest: specifier: 'catalog:' - version: 4.1.8(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-istanbul@4.1.10)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) packages/ocom/ui-staff-route-community-management: dependencies: @@ -2577,7 +2625,7 @@ importers: version: 19.2.0(react@19.2.0) react-router-dom: specifier: 'catalog:' - version: 7.15.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 7.18.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) devDependencies: '@cellix/config-typescript': specifier: workspace:* @@ -2602,7 +2650,7 @@ importers: version: 8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) vitest: specifier: 'catalog:' - version: 4.1.8(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-istanbul@4.1.10(supports-color@8.1.1)(vitest@4.1.10))(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) packages/ocom/ui-staff-route-finance: dependencies: @@ -2620,7 +2668,7 @@ importers: version: 19.2.0(react@19.2.0) react-router-dom: specifier: 'catalog:' - version: 7.15.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 7.18.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) devDependencies: '@cellix/config-typescript': specifier: workspace:* @@ -2645,7 +2693,7 @@ importers: version: 8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) vitest: specifier: 'catalog:' - version: 4.1.8(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-istanbul@4.1.10(supports-color@8.1.1)(vitest@4.1.10))(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) packages/ocom/ui-staff-route-root: dependencies: @@ -2688,7 +2736,7 @@ importers: version: 8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) vitest: specifier: 'catalog:' - version: 4.1.8(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-istanbul@4.1.10(supports-color@8.1.1)(vitest@4.1.10))(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) packages/ocom/ui-staff-route-tech-admin: dependencies: @@ -2706,7 +2754,7 @@ importers: version: 19.2.0(react@19.2.0) react-router-dom: specifier: 'catalog:' - version: 7.15.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 7.18.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) devDependencies: '@cellix/config-typescript': specifier: workspace:* @@ -2731,7 +2779,7 @@ importers: version: 8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) vitest: specifier: 'catalog:' - version: 4.1.8(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-istanbul@4.1.10(supports-color@8.1.1)(vitest@4.1.10))(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) packages/ocom/ui-staff-route-user-management: dependencies: @@ -2758,7 +2806,7 @@ importers: version: 19.2.0(react@19.2.0) react-router-dom: specifier: 'catalog:' - version: 7.15.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 7.18.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) devDependencies: '@cellix/config-typescript': specifier: workspace:* @@ -2777,7 +2825,7 @@ importers: version: 10.4.2(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(esbuild@0.28.1)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(webpack@5.105.4(esbuild@0.28.1)) '@storybook/addon-vitest': specifier: 'catalog:' - version: 10.4.2(@vitest/browser-playwright@4.1.8)(@vitest/browser@4.1.8(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.8))(@vitest/runner@4.1.8)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vitest@4.1.8) + version: 10.4.2(@vitest/browser-playwright@4.1.10)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vitest@4.1.10) '@storybook/react': specifier: 'catalog:' version: 10.4.2(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@6.0.3) @@ -2804,7 +2852,7 @@ importers: version: 8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) vitest: specifier: 'catalog:' - version: 4.1.8(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-istanbul@4.1.10(supports-color@8.1.1)(vitest@4.1.10))(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) packages/ocom/ui-staff-shared: dependencies: @@ -2834,7 +2882,7 @@ importers: version: 19.2.0(react@19.2.0) react-router-dom: specifier: 'catalog:' - version: 7.15.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 7.18.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) devDependencies: '@cellix/config-typescript': specifier: workspace:* @@ -2865,7 +2913,7 @@ importers: version: 8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) vitest: specifier: 'catalog:' - version: 4.1.8(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-istanbul@4.1.10(supports-color@8.1.1)(vitest@4.1.10))(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) packages: @@ -4065,217 +4113,217 @@ packages: resolution: {integrity: sha512-isfLLwksH3yHkFXfCI2Gcaqg7wGGHZZwunoJzEZk0yKYIokgre6hYVFibKL3SYAoR1kBXova8LB+JoO5vZzi9w==} engines: {node: '>=18'} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 '@csstools/postcss-cascade-layers@5.0.2': resolution: {integrity: sha512-nWBE08nhO8uWl6kSAeCx4im7QfVko3zLrtgWZY4/bP87zrSPpSyN/3W3TDqz1jJuH+kbKOHXg5rJnK+ZVYcFFg==} engines: {node: '>=18'} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 '@csstools/postcss-color-function-display-p3-linear@1.0.1': resolution: {integrity: sha512-E5qusdzhlmO1TztYzDIi8XPdPoYOjoTY6HBYBCYSj+Gn4gQRBlvjgPQXzfzuPQqt8EhkC/SzPKObg4Mbn8/xMg==} engines: {node: '>=18'} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 '@csstools/postcss-color-function@4.0.12': resolution: {integrity: sha512-yx3cljQKRaSBc2hfh8rMZFZzChaFgwmO2JfFgFr1vMcF3C/uyy5I4RFIBOIWGq1D+XbKCG789CGkG6zzkLpagA==} engines: {node: '>=18'} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 '@csstools/postcss-color-mix-function@3.0.12': resolution: {integrity: sha512-4STERZfCP5Jcs13P1U5pTvI9SkgLgfMUMhdXW8IlJWkzOOOqhZIjcNhWtNJZes2nkBDsIKJ0CJtFtuaZ00moag==} engines: {node: '>=18'} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 '@csstools/postcss-color-mix-variadic-function-arguments@1.0.2': resolution: {integrity: sha512-rM67Gp9lRAkTo+X31DUqMEq+iK+EFqsidfecmhrteErxJZb6tUoJBVQca1Vn1GpDql1s1rD1pKcuYzMsg7Z1KQ==} engines: {node: '>=18'} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 '@csstools/postcss-content-alt-text@2.0.8': resolution: {integrity: sha512-9SfEW9QCxEpTlNMnpSqFaHyzsiRpZ5J5+KqCu1u5/eEJAWsMhzT40qf0FIbeeglEvrGRMdDzAxMIz3wqoGSb+Q==} engines: {node: '>=18'} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 '@csstools/postcss-contrast-color-function@2.0.12': resolution: {integrity: sha512-YbwWckjK3qwKjeYz/CijgcS7WDUCtKTd8ShLztm3/i5dhh4NaqzsbYnhm4bjrpFpnLZ31jVcbK8YL77z3GBPzA==} engines: {node: '>=18'} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 '@csstools/postcss-exponential-functions@2.0.9': resolution: {integrity: sha512-abg2W/PI3HXwS/CZshSa79kNWNZHdJPMBXeZNyPQFbbj8sKO3jXxOt/wF7juJVjyDTc6JrvaUZYFcSBZBhaxjw==} engines: {node: '>=18'} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 '@csstools/postcss-font-format-keywords@4.0.0': resolution: {integrity: sha512-usBzw9aCRDvchpok6C+4TXC57btc4bJtmKQWOHQxOVKen1ZfVqBUuCZ/wuqdX5GHsD0NRSr9XTP+5ID1ZZQBXw==} engines: {node: '>=18'} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 '@csstools/postcss-gamut-mapping@2.0.11': resolution: {integrity: sha512-fCpCUgZNE2piVJKC76zFsgVW1apF6dpYsqGyH8SIeCcM4pTEsRTWTLCaJIMKFEundsCKwY1rwfhtrio04RJ4Dw==} engines: {node: '>=18'} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 '@csstools/postcss-gradients-interpolation-method@5.0.12': resolution: {integrity: sha512-jugzjwkUY0wtNrZlFeyXzimUL3hN4xMvoPnIXxoZqxDvjZRiSh+itgHcVUWzJ2VwD/VAMEgCLvtaJHX+4Vj3Ow==} engines: {node: '>=18'} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 '@csstools/postcss-hwb-function@4.0.12': resolution: {integrity: sha512-mL/+88Z53KrE4JdePYFJAQWFrcADEqsLprExCM04GDNgHIztwFzj0Mbhd/yxMBngq0NIlz58VVxjt5abNs1VhA==} engines: {node: '>=18'} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 '@csstools/postcss-ic-unit@4.0.4': resolution: {integrity: sha512-yQ4VmossuOAql65sCPppVO1yfb7hDscf4GseF0VCA/DTDaBc0Wtf8MTqVPfjGYlT5+2buokG0Gp7y0atYZpwjg==} engines: {node: '>=18'} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 '@csstools/postcss-initial@2.0.1': resolution: {integrity: sha512-L1wLVMSAZ4wovznquK0xmC7QSctzO4D0Is590bxpGqhqjboLXYA16dWZpfwImkdOgACdQ9PqXsuRroW6qPlEsg==} engines: {node: '>=18'} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 '@csstools/postcss-is-pseudo-class@5.0.3': resolution: {integrity: sha512-jS/TY4SpG4gszAtIg7Qnf3AS2pjcUM5SzxpApOrlndMeGhIbaTzWBzzP/IApXoNWEW7OhcjkRT48jnAUIFXhAQ==} engines: {node: '>=18'} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 '@csstools/postcss-light-dark-function@2.0.11': resolution: {integrity: sha512-fNJcKXJdPM3Lyrbmgw2OBbaioU7yuKZtiXClf4sGdQttitijYlZMD5K7HrC/eF83VRWRrYq6OZ0Lx92leV2LFA==} engines: {node: '>=18'} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 '@csstools/postcss-logical-float-and-clear@3.0.0': resolution: {integrity: sha512-SEmaHMszwakI2rqKRJgE+8rpotFfne1ZS6bZqBoQIicFyV+xT1UF42eORPxJkVJVrH9C0ctUgwMSn3BLOIZldQ==} engines: {node: '>=18'} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 '@csstools/postcss-logical-overflow@2.0.0': resolution: {integrity: sha512-spzR1MInxPuXKEX2csMamshR4LRaSZ3UXVaRGjeQxl70ySxOhMpP2252RAFsg8QyyBXBzuVOOdx1+bVO5bPIzA==} engines: {node: '>=18'} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 '@csstools/postcss-logical-overscroll-behavior@2.0.0': resolution: {integrity: sha512-e/webMjoGOSYfqLunyzByZj5KKe5oyVg/YSbie99VEaSDE2kimFm0q1f6t/6Jo+VVCQ/jbe2Xy+uX+C4xzWs4w==} engines: {node: '>=18'} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 '@csstools/postcss-logical-resize@3.0.0': resolution: {integrity: sha512-DFbHQOFW/+I+MY4Ycd/QN6Dg4Hcbb50elIJCfnwkRTCX05G11SwViI5BbBlg9iHRl4ytB7pmY5ieAFk3ws7yyg==} engines: {node: '>=18'} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 '@csstools/postcss-logical-viewport-units@3.0.4': resolution: {integrity: sha512-q+eHV1haXA4w9xBwZLKjVKAWn3W2CMqmpNpZUk5kRprvSiBEGMgrNH3/sJZ8UA3JgyHaOt3jwT9uFa4wLX4EqQ==} engines: {node: '>=18'} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 '@csstools/postcss-media-minmax@2.0.9': resolution: {integrity: sha512-af9Qw3uS3JhYLnCbqtZ9crTvvkR+0Se+bBqSr7ykAnl9yKhk6895z9rf+2F4dClIDJWxgn0iZZ1PSdkhrbs2ig==} engines: {node: '>=18'} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 '@csstools/postcss-media-queries-aspect-ratio-number-values@3.0.5': resolution: {integrity: sha512-zhAe31xaaXOY2Px8IYfoVTB3wglbJUVigGphFLj6exb7cjZRH9A6adyE22XfFK3P2PzwRk0VDeTJmaxpluyrDg==} engines: {node: '>=18'} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 '@csstools/postcss-nested-calc@4.0.0': resolution: {integrity: sha512-jMYDdqrQQxE7k9+KjstC3NbsmC063n1FTPLCgCRS2/qHUbHM0mNy9pIn4QIiQGs9I/Bg98vMqw7mJXBxa0N88A==} engines: {node: '>=18'} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 '@csstools/postcss-normalize-display-values@4.0.0': resolution: {integrity: sha512-HlEoG0IDRoHXzXnkV4in47dzsxdsjdz6+j7MLjaACABX2NfvjFS6XVAnpaDyGesz9gK2SC7MbNwdCHusObKJ9Q==} engines: {node: '>=18'} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 '@csstools/postcss-oklab-function@4.0.12': resolution: {integrity: sha512-HhlSmnE1NKBhXsTnNGjxvhryKtO7tJd1w42DKOGFD6jSHtYOrsJTQDKPMwvOfrzUAk8t7GcpIfRyM7ssqHpFjg==} engines: {node: '>=18'} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 '@csstools/postcss-progressive-custom-properties@4.2.1': resolution: {integrity: sha512-uPiiXf7IEKtUQXsxu6uWtOlRMXd2QWWy5fhxHDnPdXKCQckPP3E34ZgDoZ62r2iT+UOgWsSbM4NvHE5m3mAEdw==} engines: {node: '>=18'} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 '@csstools/postcss-random-function@2.0.1': resolution: {integrity: sha512-q+FQaNiRBhnoSNo+GzqGOIBKoHQ43lYz0ICrV+UudfWnEF6ksS6DsBIJSISKQT2Bvu3g4k6r7t0zYrk5pDlo8w==} engines: {node: '>=18'} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 '@csstools/postcss-relative-color-syntax@3.0.12': resolution: {integrity: sha512-0RLIeONxu/mtxRtf3o41Lq2ghLimw0w9ByLWnnEVuy89exmEEq8bynveBxNW3nyHqLAFEeNtVEmC1QK9MZ8Huw==} engines: {node: '>=18'} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 '@csstools/postcss-scope-pseudo-class@4.0.1': resolution: {integrity: sha512-IMi9FwtH6LMNuLea1bjVMQAsUhFxJnyLSgOp/cpv5hrzWmrUYU5fm0EguNDIIOHUqzXode8F/1qkC/tEo/qN8Q==} engines: {node: '>=18'} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 '@csstools/postcss-sign-functions@1.1.4': resolution: {integrity: sha512-P97h1XqRPcfcJndFdG95Gv/6ZzxUBBISem0IDqPZ7WMvc/wlO+yU0c5D/OCpZ5TJoTt63Ok3knGk64N+o6L2Pg==} engines: {node: '>=18'} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 '@csstools/postcss-stepped-value-functions@4.0.9': resolution: {integrity: sha512-h9btycWrsex4dNLeQfyU3y3w40LMQooJWFMm/SK9lrKguHDcFl4VMkncKKoXi2z5rM9YGWbUQABI8BT2UydIcA==} engines: {node: '>=18'} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 '@csstools/postcss-text-decoration-shorthand@4.0.3': resolution: {integrity: sha512-KSkGgZfx0kQjRIYnpsD7X2Om9BUXX/Kii77VBifQW9Ih929hK0KNjVngHDH0bFB9GmfWcR9vJYJJRvw/NQjkrA==} engines: {node: '>=18'} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 '@csstools/postcss-trigonometric-functions@4.0.9': resolution: {integrity: sha512-Hnh5zJUdpNrJqK9v1/E3BbrQhaDTj5YiX7P61TOvUhoDHnUmsNNxcDAgkQ32RrcWx9GVUvfUNPcUkn8R3vIX6A==} engines: {node: '>=18'} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 '@csstools/postcss-unset-value@4.0.0': resolution: {integrity: sha512-cBz3tOCI5Fw6NIFEwU3RiwK6mn3nKegjpJuzCndoGq3BZPkUjnsq7uQmIeMNeMbMk7YD2MfKcgCpZwX5jyXqCA==} engines: {node: '>=18'} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 '@csstools/selector-resolve-nested@3.1.0': resolution: {integrity: sha512-mf1LEW0tJLKfWyvn5KdDrhpxHyuxpbNwTIwOYLIvsTffeyOf85j5oIzfG0yosxDgx/sswlqBnESYUcQH0vgZ0g==} @@ -4293,7 +4341,7 @@ packages: resolution: {integrity: sha512-5VdOr0Z71u+Yp3ozOx8T11N703wIFGVRgOWbOZMKgglPJsWA54MRIoMNVMa7shUToIhx5J8vX4sOZgD2XiihiQ==} engines: {node: '>=18'} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 '@ctrl/tinycolor@3.6.1': resolution: {integrity: sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==} @@ -4334,8 +4382,8 @@ packages: '@cucumber/gherkin@38.0.0': resolution: {integrity: sha512-duEXK+KDfQUzu3vsSzXjkxQ2tirF5PRsc1Xrts6THKHJO6mjw4RjM8RV+vliuDasmhhrmdLcOcM7d9nurNTJKw==} - '@cucumber/gherkin@39.1.0': - resolution: {integrity: sha512-pqmSO2bUWxJm3TbNrKXlDaHjL6c77+ez9kWmfCd9oRPeTRPEVH3spZvpAqdXYWOZYSNYwWFCAAeZ4RGpkauNoQ==} + '@cucumber/gherkin@41.0.0': + resolution: {integrity: sha512-pKGx1EzNjtWbpw74kEevKDMj71dF3ZSaFJpLYuWVvRZKe+Cwoq5iEkuMaELIg1jxIu8jH/A2HPMpMR8UBvdG0w==} '@cucumber/html-formatter@21.9.0': resolution: {integrity: sha512-Jj4pIdJHzFFy4mSoOfM1NqR3RgOQMycUvV52PjVnpj0OBZC6Y2M7K5sx2KiDyxSBTW4N9ametgVNG/GGnkOSRA==} @@ -4374,6 +4422,9 @@ packages: '@cucumber/messages@32.3.1': resolution: {integrity: sha512-yNQq1KoXRYaEKrWMFmpUQX7TdeQuU9jeGgJAZ3dArTsC/T4NpJ6DnqaJIIgwPnz/wtQIQTNX7/h0rOuF5xY4qQ==} + '@cucumber/messages@34.0.1': + resolution: {integrity: sha512-Mvh8CkZD4TGykvXqM9qpnYVGy9cqMxYkImtghl2cF1hEuBtuDGU716zQk7KviLh0ssidM/phh9kdbJL/73dHpg==} + '@cucumber/node@0.4.0': resolution: {integrity: sha512-QjLZ+IjXRgV2GpD6zSJcxfPL8mvj9xvMWJrFzmwFGY6ZC7GhgvdFPflckjYCtiFh735d7vrsv+qIVOkuxaVcVg==} @@ -5312,6 +5363,12 @@ packages: peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' + '@opentelemetry/core@2.9.0': + resolution: {integrity: sha512-m2nckMT80NnmjTYSPjJQObBJ+8dgkoajEOUbznL8AHZ3T3yHRk2P7gI1PhEBc1+lOnrYE9UWrWHqJDsmqjmNbw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + '@opentelemetry/exporter-logs-otlp-grpc@0.57.2': resolution: {integrity: sha512-eovEy10n3umjKJl2Ey6TLzikPE+W4cUQ4gCwgGP1RqzTGtgDra0WjIqdy29ohiUKfvmbiL3MndZww58xfIvyFw==} engines: {node: '>=14'} @@ -5444,9 +5501,9 @@ packages: peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' - '@opentelemetry/propagator-jaeger@1.30.1': - resolution: {integrity: sha512-Pj/BfnYEKIOImirH76M4hDaBSx6HyZ2CXUqk+Kj02m6BB80c/yo4BdWkn/1gDFfU+YPY+bPR2U0DKBfdxCKwmg==} - engines: {node: '>=14'} + '@opentelemetry/propagator-jaeger@2.9.0': + resolution: {integrity: sha512-4mYGty27rYvSM0jtp1ZUOqd3LfVRCYg9H5G9OFzSx5HViYToU21MFhWfco7x1HwXr7ER8yGOiCIHZUwjPksc0Q==} + engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' @@ -5524,8 +5581,8 @@ packages: resolution: {integrity: sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==} engines: {node: '>=14'} - '@opentelemetry/semantic-conventions@1.38.0': - resolution: {integrity: sha512-kocjix+/sSggfJhwXqClZ3i9Y/MI0fp7b+g7kCRm6psy2dsf8uApTRclwG18h8Avm7C9+fnt+O36PspJ/OzoWg==} + '@opentelemetry/semantic-conventions@1.42.0': + resolution: {integrity: sha512-icc5xCzndZfhuJMy5oqk5AvloWquR7jtae74qzpkKkhGp8BivK+oCcEXgGnjCdTfp8hA44l+w8gE8yYJbocJJw==} engines: {node: '>=14'} '@oxc-parser/binding-android-arm-eabi@0.121.0': @@ -6704,23 +6761,23 @@ packages: resolution: {integrity: sha512-zCKpyDIWKHwtervNK2ZlaK8mMV7gVUijAgFeJStH+CU/imcdquizV3pFLlSQYRswG+Lbyd6CT/LGRh3IbtkCFw==} engines: {node: '>=8'} - '@serenity-js/assertions@3.43.0': - resolution: {integrity: sha512-ZcBhu4hs8fT25JqUMXsflVqnPt+8xCeIKT7IKfKaO6/2bsVFa+H+cHZY3tlwERNbTT0M053TLdImf438o2dcZw==} - engines: {node: ^20 || ^22 || ^24} + '@serenity-js/assertions@3.44.1': + resolution: {integrity: sha512-yKinFIvxcpGKtQWXobBsubKh0AzMRGDyhDufB+9f9AWCGHg73bDsgyTCoS/RYjnz50VMbt9e4tq+L+296LjFBw==} + engines: {node: '>=22.12 || ^24'} - '@serenity-js/console-reporter@3.43.0': - resolution: {integrity: sha512-IqQCvg21qqBEWeZr+0DwhA49begHBhRqQ/E/z8mv7Ec3KW9EA4uT8ABMJmP4hEgTJNiEAq13q9Ac7P/Wq8tVTQ==} - engines: {node: ^20 || ^22 || ^24} + '@serenity-js/console-reporter@3.44.1': + resolution: {integrity: sha512-s03TWwx3FR6+fOEUrPzoR2qmtUe9fM00IwEEE9dXBhqEkF+DyJnmLGXpKlAZz3Js3jXlU6ZBivvXrmC05D9vHw==} + engines: {node: '>=22.12 || ^24'} - '@serenity-js/core@3.43.0': - resolution: {integrity: sha512-r9MfqbSgOfnedPjbykShPDrje77HiEjER6i4+URxh6/TfH71fzAFvCB4dx01ts0Z6xWik+8/opbIewenekTKxg==} - engines: {node: ^20 || ^22 || ^24} + '@serenity-js/core@3.44.1': + resolution: {integrity: sha512-Jl5GWNLNSMvsPpmZjNSg34k2Q2MgZVXi2M2vwGDNGqwbCDKBOo9HlyTlQZigI/faahnclQgpBQOQ08/iZRMbFg==} + engines: {node: '>=22.12 || ^24'} - '@serenity-js/cucumber@3.43.0': - resolution: {integrity: sha512-9mUoEWZKnqzwD9x31di8b0hj3ohdo0On6feHtJyytIeSZuPOOJM+OuICXQp8zOSFjc7I6VqQyeN7hHVLa+l6IQ==} - engines: {node: ^20 || ^22 || ^24} + '@serenity-js/cucumber@3.44.1': + resolution: {integrity: sha512-zUFwzDwIndKHUlyzqo0qBYjc3/hFrKyg37nMIXfjL/PjcYM8VpXaF/pl2c94pAT9+0oe7aPc7vj9lNUQqqikfw==} + engines: {node: '>=22.12 || ^24'} peerDependencies: - '@cucumber/cucumber': ^7.3.2 || ^8.5.0 || ^9.1.0 || ^10.0.0 || ^11.0.0 || ^12.0.0 + '@cucumber/cucumber': ^7.3.2 || ^8.5.0 || ^9.1.0 || ^10.0.0 || ^11.0.0 || ^12.0.0 || ^13.0.0 cucumber: ^1.3.3 || ^2.3.1 || ^3.2.1 || ^4.2.1 || ^5.0.0 || ^6.0.0 peerDependenciesMeta: '@cucumber/cucumber': @@ -6728,13 +6785,13 @@ packages: cucumber: optional: true - '@serenity-js/rest@3.43.0': - resolution: {integrity: sha512-LVGNgJX5qz3rwSBV9Nw/uL0FIqZv2d4pLRM9Kki1V+mFBjEfawai8tRsTIcnP0YHbr0nxG0UtEEFv+LzMpnrcg==} - engines: {node: ^20 || ^22 || ^24} + '@serenity-js/rest@3.44.1': + resolution: {integrity: sha512-dXdtwRsFTry/P0v3VcpDhPyLM+nSiqQnullQHPZrv7mKi3GTc1gpeZeX5rjFyg1RxKKl8PL2LAfbXyCvE5fWjw==} + engines: {node: '>=22.12 || ^24'} - '@serenity-js/serenity-bdd@3.43.0': - resolution: {integrity: sha512-Y+1qzmrsGcd10alhZoYGOLb0flXQrLNz6momjEwDbQFGz+KfFJ++xaRL+kzbg7PAyBOsPOrFPMoLyKpXGvAQmw==} - engines: {node: ^20 || ^22 || ^24} + '@serenity-js/serenity-bdd@3.44.1': + resolution: {integrity: sha512-Tm8C5XhD+IWm7ddXlggnTc8HTEizBby2x+cDoy4g0CW7z83zr4Xhu9ieLcUFK3TeW318Gy5BS+EOW2Sbw7MHoQ==} + engines: {node: '>=22.12 || ^24'} hasBin: true '@sideway/address@4.1.5': @@ -6807,8 +6864,8 @@ packages: '@storybook/addon-vitest@10.4.2': resolution: {integrity: sha512-gq1ZVr0IOLgiS2PzaJqHxKLczwrXvA5g3W2k/FVJA19fJNFNUut1IyQCQRSJTXLLXbnNaa8I0wjGGc2BoLarJg==} peerDependencies: - '@vitest/browser': 4.1.8 - '@vitest/browser-playwright': 4.1.8 + '@vitest/browser': 4.1.10 + '@vitest/browser-playwright': 4.1.10 '@vitest/runner': ^3.0.0 || ^4.0.0 storybook: ^10.4.2 vitest: ^3.0.0 || ^4.0.0 @@ -7352,30 +7409,30 @@ packages: babel-plugin-react-compiler: optional: true - '@vitest/browser-playwright@4.1.8': - resolution: {integrity: sha512-SR7FqgegaexEg73xvf3ArtygXegagMdXnL0EZMpxrWvvhQxvicD/E8p0ib0J91riPRtQUViyh67Xjw3NqvyhVg==} + '@vitest/browser-playwright@4.1.10': + resolution: {integrity: sha512-nMoXGEiRpT7m3W7NsbvrM2aKNwiNHZf+zEpUCvMteGjZFvfT96Q9fh7QyB98dvDWXiKvrLxA7bJ1mCOOv+JQPw==} peerDependencies: playwright: 1.59.0 - vitest: 4.1.8 + vitest: 4.1.10 - '@vitest/browser@4.1.8': - resolution: {integrity: sha512-u21VzX07HzlJYpFgkxmjEXar/tG2UqWGgyGG/46SrrPc7rSdCTPw5vuowopO9CIqF8UCUQzDFdbVnNpw6N0BfQ==} + '@vitest/browser@4.1.10': + resolution: {integrity: sha512-UDwuWGwXj646CBx/bQHOaJSX7np0I8JL/UKQYa1e4QrVHH8VdWtx8eaOuf8sy0ShwDgR6NjJAsp5eF6vjF6qng==} peerDependencies: - vitest: 4.1.8 + vitest: 4.1.10 - '@vitest/coverage-istanbul@4.1.8': - resolution: {integrity: sha512-/h514nMZMKI6foh21mVgO1zlCH6pdDamwKMbla1uLU2GMxTlfp0PQMxovWozmzQdCIQYZ2XXEzg2zNZom2zAOg==} + '@vitest/coverage-istanbul@4.1.10': + resolution: {integrity: sha512-AyNJ5pQRFqCX7pwB9PSTmoVKPaZ4H5IEVJfJsT+q1DYkXvZMEFYgJlyk5sfStmt9rVYRyYYRRsuBeImCOc39ww==} peerDependencies: - vitest: 4.1.8 + vitest: 4.1.10 '@vitest/expect@3.2.4': resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==} - '@vitest/expect@4.1.8': - resolution: {integrity: sha512-h3nDO677RDLEGlBxyQ5CW8RlMThSKSRLUePLOx09gNIWRL40edgA1GCZSZgf1W55MFAG6/Sw14KeaAnqv0NKdQ==} + '@vitest/expect@4.1.10': + resolution: {integrity: sha512-YsCn+qAk1GWjQOWFEsEcL2gNQ0zmVmQu3T03qP6UyjhtmdtwtbuI+DASn/7iQB3HGTXkdBwGddzxPlmiql5vlA==} - '@vitest/mocker@4.1.8': - resolution: {integrity: sha512-LEiN/xe4OSIbKe9HQIp5OC24agGD9J5CnmMgsLohVVoOPWL9a2sBoR6VBx43jQZb7Kr1l4RCuyCJzcAa0+dojw==} + '@vitest/mocker@4.1.10': + resolution: {integrity: sha512-v0xaezt+DKEmKfaxg133ldzADrwLGd7Ze1MfQQTYfvs8OqZIwbxyxaYURivwV7sWy5fqn3rH5uOrSp07bp44Ow==} peerDependencies: msw: ^2.4.9 vite: 8.0.16 @@ -7388,26 +7445,26 @@ packages: '@vitest/pretty-format@3.2.4': resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==} - '@vitest/pretty-format@4.1.8': - resolution: {integrity: sha512-9GasEBxpZ1VYIpqHf/0+YGg121uSNwCKOJqIrTwWP/TB7DmFCiaBpNl3aPZzoLWfWkuqhbH8vJIVobZkvdo2cA==} + '@vitest/pretty-format@4.1.10': + resolution: {integrity: sha512-W1HsjSH4MXQ9YfmmhLAoIYf1HRfekQCGngeIgcei6MP5QQGWUe0gkopdZQaVCFO+JDJMrAJGwa5pRpNpvy4P8Q==} - '@vitest/runner@4.1.8': - resolution: {integrity: sha512-EmVxeBAfMJvycdjd6Hm+RbFBbA9fKvo0Kx37hNpBYoYeavH3RNsBXWDooR1mgD52dCrxIIuP7UotpfiwOikvcg==} + '@vitest/runner@4.1.10': + resolution: {integrity: sha512-IKI6kpIH+LmpROplyLwBBaCfMgOZOMsygVa6BARD6ahA04VRuJSa6OaVG7kRvSEMD870Vd91rSSw0eegtWyLGg==} - '@vitest/snapshot@4.1.8': - resolution: {integrity: sha512-acfZboRmAIf05DEKcBQy33VXojFJjtUdLyo7oOmV9kebb2xdU01UknNiPuPZoJZQyO7DF0gZdTGTpeAzET9QPQ==} + '@vitest/snapshot@4.1.10': + resolution: {integrity: sha512-xRkfOT1qpTAi/Ti4Y1LtfRc3kEuqxGw59eN2jN9pRWMtS/XDevekhcFSqvQqjUNGksfjMJu3Y+oJ+4Ypn2OaJw==} '@vitest/spy@3.2.4': resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==} - '@vitest/spy@4.1.8': - resolution: {integrity: sha512-6EevtBp6OZOPF7bmz36HrGMeP3txgVSrgebWxHOafDXGkhIzfXK14f8KF6MuFfgXXUeHxmpD3BQxkV00/3s5mA==} + '@vitest/spy@4.1.10': + resolution: {integrity: sha512-PLf/Ugvoq5wO/b4rwYCR1h2PSIdXz7wnkQFMiUpLdtM7l6pqVFcQIBEHyT1+l+cj7mNwAfZHzqXqDyjvOuwbDw==} '@vitest/utils@3.2.4': resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==} - '@vitest/utils@4.1.8': - resolution: {integrity: sha512-uOJamYALNhfJ6iolExyQM40yIQwDqYnkKtQ5VCiSe17E33H0aQ/u+1GlRuz4LZBk6Mm3sg90G9hEbmEt37C1Zg==} + '@vitest/utils@4.1.10': + resolution: {integrity: sha512-fy9am/HWxbaGt/Sawrp90vt6Y6jQwf1RX77cz3uwoJwJVMli/e1IEwRPnMNJ7vKfPTwo0diXifkpPvwH9v7nGA==} '@webassemblyjs/ast@1.14.1': resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} @@ -7537,9 +7594,13 @@ packages: resolution: {integrity: sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==} engines: {node: '>= 10.0.0'} - adm-zip@0.5.16: - resolution: {integrity: sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==} - engines: {node: '>=12.0'} + adm-zip@0.6.0: + resolution: {integrity: sha512-XleryMhbuksdKtofnWZ9Sk+4CUTbms4Mb/EU32SZwToAyZ5RgVos/ki8n+yr0LWHOGKuakbXTuuYNHLQjhddgg==} + engines: {node: '>=14.0'} + + agent-base@6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} agent-base@7.1.4: resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} @@ -7769,7 +7830,7 @@ packages: engines: {node: ^10 || ^12 || >=14} hasBin: true peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 available-typed-arrays@1.0.7: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} @@ -7783,8 +7844,8 @@ packages: resolution: {integrity: sha512-ilYanEU8vxxBexpJd8cWM4ElSQq4QctCLKih0TSfjIfCQTeyH/6zVrmIJfLPrKTKJRbiG+cfnZbQIjAlJmF1jQ==} engines: {node: '>=4'} - axios@1.16.0: - resolution: {integrity: sha512-6hp5CwvTPlN2A31g5dxnwAX0orzM7pmCRDLnZSX772mv8WDqICwFjowHuPs04Mc8deIld1+ejhtaMn5vp6b+1w==} + axios@1.18.1: + resolution: {integrity: sha512-3nTvFlvpn9Zu/RkHUqtc7/+al4UpRW5az71ap5zccp6e8RAYEzhMTecX8Dz1wWDYrPpUoB1HAQEGEAEvUr7S9g==} azurite@3.35.0: resolution: {integrity: sha512-GzKmi+/5U0baNRjEEVtBMLpLuIKEJ0uSh0VWBzOI4qe4f5ziJyoZQmcTO7QhxZTF6+rphj7TZS3PtJY7uiiacA==} @@ -7876,6 +7937,10 @@ packages: bn.js@5.2.3: resolution: {integrity: sha512-EAcmnPkxpntVL+DS7bO1zhcZNvCkxqtkd0ZY53h06GNQ3DEkkGZ/gKgmDv6DdZQGj9BgfSPKtJJ7Dp1GPP8f7w==} + body-parser@1.20.6: + resolution: {integrity: sha512-p5tAzS57i5MV9fZFDj9LeIiTZEufbSe2eDozP+ElheSUq1m74CRq1jI4mYNDdVs9vQztXFLuk/Gd6BWTdwRJ5g==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + body-parser@2.3.0: resolution: {integrity: sha512-2cGmJupaNgg+QUwVLAucDuWuoMZ6EX9iHDRswZ5lsNYEmwPaRknMPCLZz07yTzVq/83p4o/wzbDZbBrTvGGTIw==} engines: {node: '>=18'} @@ -7898,12 +7963,12 @@ packages: resolution: {integrity: sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog==} engines: {node: '>=14.16'} - brace-expansion@2.0.3: - resolution: {integrity: sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==} + brace-expansion@2.1.2: + resolution: {integrity: sha512-w5JZcKgdhDOgOwm8H+KgbosopHMuGcl6qbulwjtz3SM7I7P3yW1eAjzMPLrIE+NQ9vjgANKHWeMHnrT0OXW1oA==} - brace-expansion@5.0.7: - resolution: {integrity: sha512-7oFy703dxfY3/NLxC1fh2SUCQ0H9rmAY+5EpDVfXjUTTs+HEwR2nYaqLv+GWcTsumwxPfiz6CzCNkwXwBUwqCA==} - engines: {node: 18 || 20 || >=22} + brace-expansion@5.0.8: + resolution: {integrity: sha512-JZyDyq3D4AUifKTPOB7DELf6XsB3WdPuNxCtob1vFXPsSXhdAiHBWJ/tJ8HAc9aH84BK+5JFZLNkJKx3G9kzQg==} + engines: {node: 20 || >=22} braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} @@ -8467,19 +8532,19 @@ packages: resolution: {integrity: sha512-jf+twWGDf6LDoXDUode+nc7ZlrqfaNphrBIBrcmeP3D8yw1uPaix1gCC8LUQUGQ6CycuK2opkbFFWFuq/a94ag==} engines: {node: '>=18'} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 css-declaration-sorter@7.3.0: resolution: {integrity: sha512-LQF6N/3vkAMYF4xoHLJfG718HRJh34Z8BnNhd6bosOMIVjMlhuZK5++oZa3uYAgrI5+7x2o27gUqTR2U/KjUOQ==} engines: {node: ^14 || ^16 || >=18} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 css-has-pseudo@7.0.3: resolution: {integrity: sha512-oG+vKuGyqe/xvEMoxAQrhi7uY16deJR3i7wwhBerVrGQKSqUC5GiOVxTpM9F9B9hw0J+eKeOWLH7E9gZ1Dr5rA==} engines: {node: '>=18'} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 css-loader@6.11.0: resolution: {integrity: sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==} @@ -8522,7 +8587,7 @@ packages: resolution: {integrity: sha512-VCtXZAWivRglTZditUfB4StnsWr6YVZ2PRtuxQLKTNRdtAf8tpzaVPE9zXIF3VaSc7O70iK/j1+NXxyQCqdPjQ==} engines: {node: '>=18'} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 css-select@4.3.0: resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==} @@ -8557,25 +8622,25 @@ packages: resolution: {integrity: sha512-Nhao7eD8ph2DoHolEzQs5CfRpiEP0xa1HBdnFZ82kvqdmbwVBUr2r1QuQ4t1pi+D1ZpqpcO4T+wy/7RxzJ/WPQ==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 cssnano-preset-default@6.1.2: resolution: {integrity: sha512-1C0C+eNaeN8OcHQa193aRgYexyJtU8XwbdieEjClw+J9d94E41LwT6ivKH0WT+fYwYWB0Zp3I3IZ7tI/BbUbrg==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 cssnano-utils@4.0.2: resolution: {integrity: sha512-ZR1jHg+wZ8o4c3zqf1SIUSTIvm/9mU343FMR6Obe/unskbvpGhZOo1J6d/r8D1pzkRQYuwbcH3hToOuoA2G7oQ==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 cssnano@6.1.2: resolution: {integrity: sha512-rYk5UeX7VAM/u0lNqewCdasdtPK81CgX8wJFLEIXHbV2oldWRgJAsZrdhRXkV1NJzA2g850KiFm9mMU2HxNxMA==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 csso@5.0.5: resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} @@ -8941,8 +9006,8 @@ packages: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} - es-module-lexer@2.0.0: - resolution: {integrity: sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==} + es-module-lexer@2.3.0: + resolution: {integrity: sha512-KLdwQm2NvGLDkQDCGvmiQrhkd0JbMzXthwQAUgWjQuQdBLFa3eiBP5arXZyA+f8x+x7OXgud6bq2rxjGtHV2tw==} es-object-atoms@1.1.1: resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} @@ -9124,8 +9189,8 @@ packages: fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - fast-uri@4.0.1: - resolution: {integrity: sha512-j0VntHrljgRKiWdbjL1xECG44OQu5sb7en4b8z2CcRvtDUEG5DAvkXlllrRhvbABR+m2mUiSgYBPvDj/PzB0dg==} + fast-uri@4.1.1: + resolution: {integrity: sha512-YPOs1zD5TG2+EZt+r88LwF6mclA7TPkpwMP7ZN3TO2HiHS8TXvq7QA/17iJsV9dubcLo/f8eEYqMBruyQV21hQ==} fast-xml-builder@1.2.0: resolution: {integrity: sha512-00aAWieqff+ZJhsXA4g1g7M8k+7AYoMUUHF+/zFb5U6Uv/P0Vl4QZo84/IcufzYalLuEj9928bXN9PbbFzMF0Q==} @@ -9714,6 +9779,10 @@ packages: https-browserify@1.0.0: resolution: {integrity: sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==} + https-proxy-agent@5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + https-proxy-agent@7.0.6: resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} engines: {node: '>= 14'} @@ -9735,6 +9804,10 @@ packages: resolution: {integrity: sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==} engines: {node: '>=10.18'} + iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + iconv-lite@0.6.3: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} @@ -9751,7 +9824,7 @@ packages: resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} @@ -9777,9 +9850,8 @@ packages: immediate@3.0.6: resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} - immutable@3.8.3: - resolution: {integrity: sha512-AUY/VyX0E5XlibOmWt10uabJzam1zlYjwiEgQSDc5+UIkFNaF9WM0JxXKaNMGf+F/ffUF+7kRKXM9A7C0xXqMg==} - engines: {node: '>=0.10.0'} + immutable@5.1.9: + resolution: {integrity: sha512-m8nVez3rwrgmWxtLMt1ZYXB2Lv7OKYn/disyxAlSDYAlKSlFoPPfIAmAM/M5xqL4m4C/wAPw7S2/CNaUii1Hxg==} import-fresh@3.3.1: resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} @@ -10559,6 +10631,10 @@ packages: resolution: {integrity: sha512-Gf/KoL3C/MlI7Bt0PGI9I+TeTC/I6r/csU58N4BSNc4lppLBeKsOdFYkK+dX0ABDUMJNfCHTyPpzwwO21Awd3A==} engines: {node: 20 || >=22} + lru-cache@11.5.1: + resolution: {integrity: sha512-RPimw/7aMdv2oqRrxKwvZXcPfwBrn/JZ2xYcY9Hus/6LaS3VOAKVWKWgNLCFSiOm1ESXinjsDlidVU7JlnCN2A==} + engines: {node: 20 || >=22} + lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} @@ -10987,6 +11063,33 @@ packages: socks: optional: true + mongodb@6.20.0: + resolution: {integrity: sha512-Tl6MEIU3K4Rq3TSHd+sZQqRBoGlFsOgNrH5ltAcFBV62Re3Fd+FcaVf8uSEQFOJ51SDowDVttBTONMfoYWrWlQ==} + engines: {node: '>=16.20.1'} + peerDependencies: + '@aws-sdk/credential-providers': ^3.188.0 + '@mongodb-js/zstd': ^1.1.0 || ^2.0.0 + gcp-metadata: ^5.2.0 + kerberos: ^2.0.1 + mongodb-client-encryption: '>=6.0.0 <7' + snappy: ^7.3.2 + socks: ^2.7.1 + peerDependenciesMeta: + '@aws-sdk/credential-providers': + optional: true + '@mongodb-js/zstd': + optional: true + gcp-metadata: + optional: true + kerberos: + optional: true + mongodb-client-encryption: + optional: true + snappy: + optional: true + socks: + optional: true + mongodb@6.21.0: resolution: {integrity: sha512-URyb/VXMjJ4da46OeSXg+puO39XH9DeQpWCslifrRn9JWugy0D+DvvBvkm2WxmHe61O/H19JM66p1z7RHVkZ6A==} engines: {node: '>=16.20.1'} @@ -11014,12 +11117,12 @@ packages: socks: optional: true - mongoose@8.17.0: - resolution: {integrity: sha512-mxW6TBPHViORfNYOFXCVOnT4d5aRr+CgDxTs1ViYXfuHzNpkelgJQrQa+Lz6hofoEQISnKlXv1L3ZnHyJRkhfA==} + mongoose@8.24.1: + resolution: {integrity: sha512-UpHBA0l5kHyKJQFjmBaFYQFo5sgz1DK0TRqDkOyBLYbqiIbKKhIvBpHWBXqeo0rgW4kGI1UhhAw+kTQZoj1BdA==} engines: {node: '>=16.20.1'} - morgan@1.10.1: - resolution: {integrity: sha512-223dMRJtI/l25dJKWpgij2cMtywuG/WiUKXdvwfbhGKBhy1puASqXwFzmWZ7+K73vUPoR7SS2Qz2cI/g9MKw0A==} + morgan@1.11.0: + resolution: {integrity: sha512-zSkVu3t18r39pw4ixfBKvfZi3y2UOqr7d4WYwcj3m8nXpEQK4rPO6GLzs/CExoRgmX3y9EjmmcXqv6jq0SK46g==} engines: {node: '>= 0.8.0'} mpath@0.9.0: @@ -11065,8 +11168,8 @@ packages: resolution: {integrity: sha512-eLoBxg6wE/rZkJPhU/xRX1WTpkFEwDJEN96oxFrTsqBdbT5ec295Q+CoHrL9IT0DipqKhmGcaZmwOt8OON5x1w==} engines: {node: '>=12.0.0'} - nanoid@3.3.11: - resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + nanoid@3.3.16: + resolution: {integrity: sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true @@ -11226,10 +11329,6 @@ packages: resolution: {integrity: sha512-jNdst/U28Iasukx/L5MP6b274Vr7ftQs6qAhPBCvz6Wt5rPCA+Q/tUmCzfCHHWweWw5szeMy2Gfrm1rITwUKrw==} engines: {node: '>=18'} - on-finished@2.3.0: - resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==} - engines: {node: '>= 0.8'} - on-finished@2.4.1: resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} engines: {node: '>= 0.8'} @@ -11566,163 +11665,163 @@ packages: resolution: {integrity: sha512-Uai+SupNSqzlschRyNx3kbCTWgY/2hcwtHEI/ej2LJWc9JJ77qKgGptd8DHwY1mXtZ7Aoh4z4yxfwMBue9eNgw==} engines: {node: '>=18'} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-calc@9.0.1: resolution: {integrity: sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-clamp@4.1.0: resolution: {integrity: sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==} engines: {node: '>=7.6.0'} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-color-functional-notation@7.0.12: resolution: {integrity: sha512-TLCW9fN5kvO/u38/uesdpbx3e8AkTYhMvDZYa9JpmImWuTE99bDQ7GU7hdOADIZsiI9/zuxfAJxny/khknp1Zw==} engines: {node: '>=18'} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-color-hex-alpha@10.0.0: resolution: {integrity: sha512-1kervM2cnlgPs2a8Vt/Qbe5cQ++N7rkYo/2rz2BkqJZIHQwaVuJgQH38REHrAi4uM0b1fqxMkWYmese94iMp3w==} engines: {node: '>=18'} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-color-rebeccapurple@10.0.0: resolution: {integrity: sha512-JFta737jSP+hdAIEhk1Vs0q0YF5P8fFcj+09pweS8ktuGuZ8pPlykHsk6mPxZ8awDl4TrcxUqJo9l1IhVr/OjQ==} engines: {node: '>=18'} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-colormin@6.1.0: resolution: {integrity: sha512-x9yX7DOxeMAR+BgGVnNSAxmAj98NX/YxEMNFP+SDCEeNLb2r3i6Hh1ksMsnW8Ub5SLCpbescQqn9YEbE9554Sw==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-convert-values@6.1.0: resolution: {integrity: sha512-zx8IwP/ts9WvUM6NkVSkiU902QZL1bwPhaVaLynPtCsOTqp+ZKbNi+s6XJg3rfqpKGA/oc7Oxk5t8pOQJcwl/w==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-custom-media@11.0.6: resolution: {integrity: sha512-C4lD4b7mUIw+RZhtY7qUbf4eADmb7Ey8BFA2px9jUbwg7pjTZDl4KY4bvlUV+/vXQvzQRfiGEVJyAbtOsCMInw==} engines: {node: '>=18'} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-custom-properties@14.0.6: resolution: {integrity: sha512-fTYSp3xuk4BUeVhxCSJdIPhDLpJfNakZKoiTDx7yRGCdlZrSJR7mWKVOBS4sBF+5poPQFMj2YdXx1VHItBGihQ==} engines: {node: '>=18'} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-custom-selectors@8.0.5: resolution: {integrity: sha512-9PGmckHQswiB2usSO6XMSswO2yFWVoCAuih1yl9FVcwkscLjRKjwsjM3t+NIWpSU2Jx3eOiK2+t4vVTQaoCHHg==} engines: {node: '>=18'} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-dir-pseudo-class@9.0.1: resolution: {integrity: sha512-tRBEK0MHYvcMUrAuYMEOa0zg9APqirBcgzi6P21OhxtJyJADo/SWBwY1CAwEohQ/6HDaa9jCjLRG7K3PVQYHEA==} engines: {node: '>=18'} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-discard-comments@6.0.2: resolution: {integrity: sha512-65w/uIqhSBBfQmYnG92FO1mWZjJ4GL5b8atm5Yw2UgrwD7HiNiSSNwJor1eCFGzUgYnN/iIknhNRVqjrrpuglw==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-discard-duplicates@6.0.3: resolution: {integrity: sha512-+JA0DCvc5XvFAxwx6f/e68gQu/7Z9ud584VLmcgto28eB8FqSFZwtrLwB5Kcp70eIoWP/HXqz4wpo8rD8gpsTw==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-discard-empty@6.0.3: resolution: {integrity: sha512-znyno9cHKQsK6PtxL5D19Fj9uwSzC2mB74cpT66fhgOadEUPyXFkbgwm5tvc3bt3NAy8ltE5MrghxovZRVnOjQ==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-discard-overridden@6.0.2: resolution: {integrity: sha512-j87xzI4LUggC5zND7KdjsI25APtyMuynXZSujByMaav2roV6OZX+8AaCUcZSWqckZpjAjRyFDdpqybgjFO0HJQ==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-discard-unused@6.0.5: resolution: {integrity: sha512-wHalBlRHkaNnNwfC8z+ppX57VhvS+HWgjW508esjdaEYr3Mx7Gnn2xA4R/CKf5+Z9S5qsqC+Uzh4ueENWwCVUA==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-double-position-gradients@6.0.4: resolution: {integrity: sha512-m6IKmxo7FxSP5nF2l63QbCC3r+bWpFUWmZXZf096WxG0m7Vl1Q1+ruFOhpdDRmKrRS+S3Jtk+TVk/7z0+BVK6g==} engines: {node: '>=18'} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-focus-visible@10.0.1: resolution: {integrity: sha512-U58wyjS/I1GZgjRok33aE8juW9qQgQUNwTSdxQGuShHzwuYdcklnvK/+qOWX1Q9kr7ysbraQ6ht6r+udansalA==} engines: {node: '>=18'} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-focus-within@9.0.1: resolution: {integrity: sha512-fzNUyS1yOYa7mOjpci/bR+u+ESvdar6hk8XNK/TRR0fiGTp2QT5N+ducP0n3rfH/m9I7H/EQU6lsa2BrgxkEjw==} engines: {node: '>=18'} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-font-variant@5.0.0: resolution: {integrity: sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-gap-properties@6.0.0: resolution: {integrity: sha512-Om0WPjEwiM9Ru+VhfEDPZJAKWUd0mV1HmNXqp2C29z80aQ2uP9UVhLc7e3aYMIor/S5cVhoPgYQ7RtfeZpYTRw==} engines: {node: '>=18'} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-image-set-function@7.0.0: resolution: {integrity: sha512-QL7W7QNlZuzOwBTeXEmbVckNt1FSmhQtbMRvGGqqU4Nf4xk6KUEQhAoWuMzwbSv5jxiRiSZ5Tv7eiDB9U87znA==} engines: {node: '>=18'} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-import@15.1.0: resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} engines: {node: '>=14.0.0'} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-js@4.1.0: resolution: {integrity: sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==} engines: {node: ^12 || ^14 || >= 16} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-lab-function@7.0.12: resolution: {integrity: sha512-tUcyRk1ZTPec3OuKFsqtRzW2Go5lehW29XA21lZ65XmzQkz43VY2tyWEC202F7W3mILOjw0voOiuxRGTsN+J9w==} engines: {node: '>=18'} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-load-config@6.0.1: resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==} engines: {node: '>= 18'} peerDependencies: jiti: 2.6.1 - postcss: 8.5.10 + postcss: 8.5.23 tsx: ^4.8.1 yaml: 2.8.3 peerDependenciesMeta: @@ -11739,216 +11838,216 @@ packages: resolution: {integrity: sha512-iW5WTTBSC5BfsBJ9daFMPVrLT36MrNiC6fqOZTTaHjBNX6Pfd5p+hSBqe/fEeNd7pc13QiAyGt7VdGMw4eRC4A==} engines: {node: '>= 14.15.0'} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 webpack: ^5.105.4 postcss-logical@8.1.0: resolution: {integrity: sha512-pL1hXFQ2fEXNKiNiAgtfA005T9FBxky5zkX6s4GZM2D8RkVgRqz3f4g1JUoq925zXv495qk8UNldDwh8uGEDoA==} engines: {node: '>=18'} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-merge-idents@6.0.3: resolution: {integrity: sha512-1oIoAsODUs6IHQZkLQGO15uGEbK3EAl5wi9SS8hs45VgsxQfMnxvt+L+zIr7ifZFIH14cfAeVe2uCTa+SPRa3g==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-merge-longhand@6.0.5: resolution: {integrity: sha512-5LOiordeTfi64QhICp07nzzuTDjNSO8g5Ksdibt44d+uvIIAE1oZdRn8y/W5ZtYgRH/lnLDlvi9F8btZcVzu3w==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-merge-rules@6.1.1: resolution: {integrity: sha512-KOdWF0gju31AQPZiD+2Ar9Qjowz1LTChSjFFbS+e2sFgc4uHOp3ZvVX4sNeTlk0w2O31ecFGgrFzhO0RSWbWwQ==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-minify-font-values@6.1.0: resolution: {integrity: sha512-gklfI/n+9rTh8nYaSJXlCo3nOKqMNkxuGpTn/Qm0gstL3ywTr9/WRKznE+oy6fvfolH6dF+QM4nCo8yPLdvGJg==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-minify-gradients@6.0.3: resolution: {integrity: sha512-4KXAHrYlzF0Rr7uc4VrfwDJ2ajrtNEpNEuLxFgwkhFZ56/7gaE4Nr49nLsQDZyUe+ds+kEhf+YAUolJiYXF8+Q==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-minify-params@6.1.0: resolution: {integrity: sha512-bmSKnDtyyE8ujHQK0RQJDIKhQ20Jq1LYiez54WiaOoBtcSuflfK3Nm596LvbtlFcpipMjgClQGyGr7GAs+H1uA==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-minify-selectors@6.0.4: resolution: {integrity: sha512-L8dZSwNLgK7pjTto9PzWRoMbnLq5vsZSTu8+j1P/2GB8qdtGQfn+K1uSvFgYvgh83cbyxT5m43ZZhUMTJDSClQ==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-modules-extract-imports@3.1.0: resolution: {integrity: sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-modules-local-by-default@4.2.0: resolution: {integrity: sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-modules-scope@3.2.1: resolution: {integrity: sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-modules-values@4.0.0: resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-nested@6.2.0: resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} engines: {node: '>=12.0'} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-nesting@13.0.2: resolution: {integrity: sha512-1YCI290TX+VP0U/K/aFxzHzQWHWURL+CtHMSbex1lCdpXD1SoR2sYuxDu5aNI9lPoXpKTCggFZiDJbwylU0LEQ==} engines: {node: '>=18'} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-normalize-charset@6.0.2: resolution: {integrity: sha512-a8N9czmdnrjPHa3DeFlwqst5eaL5W8jYu3EBbTTkI5FHkfMhFZh1EGbku6jhHhIzTA6tquI2P42NtZ59M/H/kQ==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-normalize-display-values@6.0.2: resolution: {integrity: sha512-8H04Mxsb82ON/aAkPeq8kcBbAtI5Q2a64X/mnRRfPXBq7XeogoQvReqxEfc0B4WPq1KimjezNC8flUtC3Qz6jg==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-normalize-positions@6.0.2: resolution: {integrity: sha512-/JFzI441OAB9O7VnLA+RtSNZvQ0NCFZDOtp6QPFo1iIyawyXg0YI3CYM9HBy1WvwCRHnPep/BvI1+dGPKoXx/Q==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-normalize-repeat-style@6.0.2: resolution: {integrity: sha512-YdCgsfHkJ2jEXwR4RR3Tm/iOxSfdRt7jplS6XRh9Js9PyCR/aka/FCb6TuHT2U8gQubbm/mPmF6L7FY9d79VwQ==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-normalize-string@6.0.2: resolution: {integrity: sha512-vQZIivlxlfqqMp4L9PZsFE4YUkWniziKjQWUtsxUiVsSSPelQydwS8Wwcuw0+83ZjPWNTl02oxlIvXsmmG+CiQ==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-normalize-timing-functions@6.0.2: resolution: {integrity: sha512-a+YrtMox4TBtId/AEwbA03VcJgtyW4dGBizPl7e88cTFULYsprgHWTbfyjSLyHeBcK/Q9JhXkt2ZXiwaVHoMzA==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-normalize-unicode@6.1.0: resolution: {integrity: sha512-QVC5TQHsVj33otj8/JD869Ndr5Xcc/+fwRh4HAsFsAeygQQXm+0PySrKbr/8tkDKzW+EVT3QkqZMfFrGiossDg==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-normalize-url@6.0.2: resolution: {integrity: sha512-kVNcWhCeKAzZ8B4pv/DnrU1wNh458zBNp8dh4y5hhxih5RZQ12QWMuQrDgPRw3LRl8mN9vOVfHl7uhvHYMoXsQ==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-normalize-whitespace@6.0.2: resolution: {integrity: sha512-sXZ2Nj1icbJOKmdjXVT9pnyHQKiSAyuNQHSgRCUgThn2388Y9cGVDR+E9J9iAYbSbLHI+UUwLVl1Wzco/zgv0Q==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-opacity-percentage@3.0.0: resolution: {integrity: sha512-K6HGVzyxUxd/VgZdX04DCtdwWJ4NGLG212US4/LA1TLAbHgmAsTWVR86o+gGIbFtnTkfOpb9sCRBx8K7HO66qQ==} engines: {node: '>=18'} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-ordered-values@6.0.2: resolution: {integrity: sha512-VRZSOB+JU32RsEAQrO94QPkClGPKJEL/Z9PCBImXMhIeK5KAYo6slP/hBYlLgrCjFxyqvn5VC81tycFEDBLG1Q==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-overflow-shorthand@6.0.0: resolution: {integrity: sha512-BdDl/AbVkDjoTofzDQnwDdm/Ym6oS9KgmO7Gr+LHYjNWJ6ExORe4+3pcLQsLA9gIROMkiGVjjwZNoL/mpXHd5Q==} engines: {node: '>=18'} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-page-break@3.0.4: resolution: {integrity: sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-place@10.0.0: resolution: {integrity: sha512-5EBrMzat2pPAxQNWYavwAfoKfYcTADJ8AXGVPcUZ2UkNloUTWzJQExgrzrDkh3EKzmAx1evfTAzF9I8NGcc+qw==} engines: {node: '>=18'} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-preset-env@10.4.0: resolution: {integrity: sha512-2kqpOthQ6JhxqQq1FSAAZGe9COQv75Aw8WbsOvQVNJ2nSevc9Yx/IKZGuZ7XJ+iOTtVon7LfO7ELRzg8AZ+sdw==} engines: {node: '>=18'} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-pseudo-class-any-link@10.0.1: resolution: {integrity: sha512-3el9rXlBOqTFaMFkWDOkHUTQekFIYnaQY55Rsp8As8QQkpiSgIYEcF/6Ond93oHiDsGb4kad8zjt+NPlOC1H0Q==} engines: {node: '>=18'} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-reduce-idents@6.0.3: resolution: {integrity: sha512-G3yCqZDpsNPoQgbDUy3T0E6hqOQ5xigUtBQyrmq3tn2GxlyiL0yyl7H+T8ulQR6kOcHJ9t7/9H4/R2tv8tJbMA==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-reduce-initial@6.1.0: resolution: {integrity: sha512-RarLgBK/CrL1qZags04oKbVbrrVK2wcxhvta3GCxrZO4zveibqbRPmm2VI8sSgCXwoUHEliRSbOfpR0b/VIoiw==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-reduce-transforms@6.0.2: resolution: {integrity: sha512-sB+Ya++3Xj1WaT9+5LOOdirAxP7dJZms3GRcYheSPi1PiTMigsxHAdkrbItHxwYHr4kt1zL7mmcHstgMYT+aiA==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-replace-overflow-wrap@4.0.0: resolution: {integrity: sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-selector-not@8.0.1: resolution: {integrity: sha512-kmVy/5PYVb2UOhy0+LqUYAhKj7DUGDpSWa5LZqlkWJaaAV+dxxsOG3+St0yNLu6vsKD7Dmqx+nWQt0iil89+WA==} engines: {node: '>=18'} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-selector-parser@6.1.2: resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} @@ -11962,19 +12061,19 @@ packages: resolution: {integrity: sha512-AZ5fDMLD8SldlAYlvi8NIqo0+Z8xnXU2ia0jxmuhxAU+Lqt9K+AlmLNJ/zWEnE9x+Zx3qL3+1K20ATgNOr3fAA==} engines: {node: '>=14.0.0'} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-svgo@6.0.3: resolution: {integrity: sha512-dlrahRmxP22bX6iKEjOM+c8/1p+81asjKT+V5lrgOH944ryx/OHpclnIbGsKVd3uWOXFLYJwCVf0eEkJGvO96g==} engines: {node: ^14 || ^16 || >= 18} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-unique-selectors@6.0.4: resolution: {integrity: sha512-K38OCaIrO8+PzpArzkLKB42dSARtC2tmG6PvD4b1o1Q2E9Os8jzfWFfSy/rixsHwohtsDdFtAWGjFVFUdwYaMg==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} @@ -11983,10 +12082,10 @@ packages: resolution: {integrity: sha512-5BxW9l1evPB/4ZIc+2GobEBoKC+h8gPGCMi+jxsYvd2x0mjq7wazk6DrP71pStqxE9Foxh5TVnonbWpFZzXaYg==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 - postcss@8.5.10: - resolution: {integrity: sha512-pMMHxBOZKFU6HgAZ4eyGnwXF/EvPGGqUr0MnZ5+99485wwW41kW91A4LOGxSHhgugZmSChL5AlElNdwlNgcnLQ==} + postcss@8.5.23: + resolution: {integrity: sha512-g50586zr4bZmwFiTlflMu8E0bDTb5I5gertgwAKmsdUlTQIhZtunzUlD1WSzwcVWPoAVpsrA6vlfCD7oXvRwgg==} engines: {node: ^10 || ^12 || >=14} pretty-error@4.0.0: @@ -12123,6 +12222,10 @@ packages: resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} engines: {node: '>= 0.6'} + raw-body@2.5.3: + resolution: {integrity: sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==} + engines: {node: '>= 0.8'} + raw-body@3.0.2: resolution: {integrity: sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==} engines: {node: '>= 0.10'} @@ -12200,8 +12303,8 @@ packages: peerDependencies: react: '>=15' - react-router-dom@7.15.1: - resolution: {integrity: sha512-AzF62gjY6U9rkMq4RfP/r2EVtQ7DMfNMjyOp/flLTCrtRylLiK4wT4pSq6O8rOXZ2eXdZYJPEYe+ifomiv+Igg==} + react-router-dom@7.18.1: + resolution: {integrity: sha512-KaZh+X/6UtEp28x51AUYZDMg9NGoz2ja3dNHa+ta/tk40vCzKhQ/RypCWBMLbmDr6//E24Vv5uPsrqXFozdkAg==} engines: {node: '>=20.0.0'} peerDependencies: react: '>=18' @@ -12212,8 +12315,8 @@ packages: peerDependencies: react: '>=15' - react-router@7.15.1: - resolution: {integrity: sha512-R8rl9HhgikFYoPJymnUtPXWbnDb3oget6lQnfIoupbt61aT9aOhRkDsY2XRhZRyX1Z/8a5sL74fXmFNm3NRK5A==} + react-router@7.18.1: + resolution: {integrity: sha512-GDLgg3i3uM0aeJO3Fm+TCS+sDQ7gu12T6x0qdTEzcwqEfleci7JwugVNIF3U//0FWKnJT7ptG+20B2jfDqnZAg==} engines: {node: '>=20.0.0'} peerDependencies: react: '>=18' @@ -12612,11 +12715,6 @@ packages: engines: {node: '>=10'} hasBin: true - semver@7.7.3: - resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} - engines: {node: '>=10'} - hasBin: true - semver@7.7.4: resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==} engines: {node: '>=10'} @@ -12627,6 +12725,11 @@ packages: engines: {node: '>=10'} hasBin: true + semver@7.8.5: + resolution: {integrity: sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==} + engines: {node: '>=10'} + hasBin: true + send@0.19.0: resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} engines: {node: '>= 0.8.0'} @@ -13079,7 +13182,7 @@ packages: resolution: {integrity: sha512-gSTTEQ670cJNoaeIp9KX6lZmm8LJ3jPB5yJmX8Zq/wQxOsAFXV3qjWzHas3YYk1qesuVIyYWWUpZ0vSE/dTSGg==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: - postcss: 8.5.10 + postcss: 8.5.23 stylis@4.3.6: resolution: {integrity: sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==} @@ -13108,8 +13211,8 @@ packages: svg-parser@2.0.4: resolution: {integrity: sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==} - svgo@3.3.3: - resolution: {integrity: sha512-+wn7I4p7YgJhHs38k2TNjy1vCfPIfLIJWR5MnCStsN8WuuTcBnRKcMHQLMM2ijxGZmDoZwNv8ipl5aTTen62ng==} + svgo@3.3.4: + resolution: {integrity: sha512-GsNRis4e8jxn2Y9ENz/8lbJ93CstG8svtMnuRaHbiF2LTJ5tK0/q3t/URPq9Zc7zVWBJnNnJMIp6bevK7bSmNg==} engines: {node: '>=14.0.0'} hasBin: true @@ -13245,10 +13348,6 @@ packages: resolution: {integrity: sha512-u9r3uZC0bdpGOXtlxUIdwf9pkmvhqJdrVCH9fapQtgy/OeTTMZ1nqH7agtvEfmGui6e1XxjcdrlxvxJvc3sMqw==} engines: {node: '>=18'} - tinyglobby@0.2.15: - resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} - engines: {node: '>=12.0.0'} - tinyglobby@0.2.17: resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} engines: {node: '>=12.0.0'} @@ -13734,20 +13833,20 @@ packages: yaml: optional: true - vitest@4.1.8: - resolution: {integrity: sha512-flY6ScbCIt9HThs+C5HS7jvGOB560DJtk/Z15IQROTA6zEy49Nh8T/dofWTQL+n3vswqn87sbJNiuqw1SDp5Ig==} + vitest@4.1.10: + resolution: {integrity: sha512-R9jUTe5S4Qb0HCd4TNqpC7oGcrMssMRGXLW80ubjWsW9VH5GF8y1Y0SFLY9AbqSk6nt0PnOx4H4WNJYZ13GUPw==} engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@opentelemetry/api': ^1.9.0 '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 - '@vitest/browser-playwright': 4.1.8 - '@vitest/browser-preview': 4.1.8 - '@vitest/browser-webdriverio': 4.1.8 - '@vitest/coverage-istanbul': 4.1.8 - '@vitest/coverage-v8': 4.1.8 - '@vitest/ui': 4.1.8 + '@vitest/browser-playwright': 4.1.10 + '@vitest/browser-preview': 4.1.10 + '@vitest/browser-webdriverio': 4.1.10 + '@vitest/coverage-istanbul': 4.1.10 + '@vitest/coverage-v8': 4.1.10 + '@vitest/ui': 4.1.10 happy-dom: 20.10.1 jsdom: '*' vite: 8.0.16 @@ -13877,8 +13976,8 @@ packages: webpack: optional: true - websocket-driver@0.7.4: - resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==} + websocket-driver@0.7.5: + resolution: {integrity: sha512-ZL2+3c7kMBdIRCMz6l8jQMHyGVxj+UL+xVk74Ombiciboca8rHa15L86B19E5oh1pL9Ii/uj54gtsIrZGMo6zA==} engines: {node: '>=0.8.0'} websocket-extensions@0.1.4: @@ -14065,6 +14164,10 @@ packages: resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} engines: {node: '>=12'} + yargs@17.7.3: + resolution: {integrity: sha512-GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g==} + engines: {node: '>=12'} + yauzl@3.2.1: resolution: {integrity: sha512-k1isifdbpNSFEHFJ1ZY4YDewv0IH9FR61lDetaRMD3j2ae3bIXGV+7c+LHCqtQGofSd8PIyV4X6+dHMAnSr60A==} engines: {node: '>=12'} @@ -14238,13 +14341,13 @@ snapshots: '@alloc/quick-lru@5.2.0': {} - '@amiceli/vitest-cucumber@6.3.0(vitest@4.1.8)': + '@amiceli/vitest-cucumber@6.3.0(vitest@4.1.10)': dependencies: callsites: 4.2.0 minimist: 1.2.8 parsecurrency: 1.1.1 ts-morph: 27.0.2 - vitest: 4.1.8(@opentelemetry/api@1.9.0)(@types/node@22.19.15)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@22.19.15)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + vitest: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@22.19.15)(@vitest/coverage-istanbul@4.1.10)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@22.19.15)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) '@ant-design/cli@6.3.5(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': dependencies: @@ -14442,7 +14545,7 @@ snapshots: '@apollo/utils.withrequired': 3.0.0 '@graphql-tools/schema': 10.0.30(graphql@16.12.0) async-retry: 1.3.3 - body-parser: 2.3.0 + body-parser: 2.3.0(supports-color@8.1.1) content-type: 1.0.5 cors: 2.8.5 finalhandler: 2.1.1(supports-color@8.1.1) @@ -14516,7 +14619,7 @@ snapshots: chalk: 4.1.2 fb-watchman: 2.0.2 graphql: 16.12.0 - immutable: 3.8.3 + immutable: 5.1.9 invariant: 2.2.4 nullthrows: 1.1.1 relay-runtime: 12.0.0 @@ -14742,7 +14845,7 @@ snapshots: '@opentelemetry/sdk-logs': 0.57.2(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-metrics': 1.30.1(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-trace-base': 1.30.1(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.38.0 + '@opentelemetry/semantic-conventions': 1.42.0 tslib: 2.8.1 transitivePeerDependencies: - supports-color @@ -14750,7 +14853,7 @@ snapshots: '@azure/ms-rest-js@1.11.2': dependencies: '@azure/core-auth': 1.10.1 - axios: 1.16.0 + axios: 1.18.1(supports-color@8.1.1) form-data: 4.0.6 tough-cookie: 4.1.3 tslib: 1.14.1 @@ -15625,9 +15728,9 @@ snapshots: '@babel/template@7.28.6': dependencies: - '@babel/code-frame': 7.29.0 - '@babel/parser': 7.29.2 - '@babel/types': 7.29.0 + '@babel/code-frame': 7.29.7 + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 '@babel/template@7.29.7': dependencies: @@ -15760,251 +15863,251 @@ snapshots: '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) '@csstools/css-tokenizer': 3.0.4 - '@csstools/postcss-alpha-function@1.0.1(postcss@8.5.10)': + '@csstools/postcss-alpha-function@1.0.1(postcss@8.5.23)': dependencies: '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) '@csstools/css-tokenizer': 3.0.4 - '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.10) - '@csstools/utilities': 2.0.0(postcss@8.5.10) - postcss: 8.5.10 + '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.23) + '@csstools/utilities': 2.0.0(postcss@8.5.23) + postcss: 8.5.23 - '@csstools/postcss-cascade-layers@5.0.2(postcss@8.5.10)': + '@csstools/postcss-cascade-layers@5.0.2(postcss@8.5.23)': dependencies: '@csstools/selector-specificity': 5.0.0(postcss-selector-parser@7.1.1) - postcss: 8.5.10 + postcss: 8.5.23 postcss-selector-parser: 7.1.1 - '@csstools/postcss-color-function-display-p3-linear@1.0.1(postcss@8.5.10)': + '@csstools/postcss-color-function-display-p3-linear@1.0.1(postcss@8.5.23)': dependencies: '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) '@csstools/css-tokenizer': 3.0.4 - '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.10) - '@csstools/utilities': 2.0.0(postcss@8.5.10) - postcss: 8.5.10 + '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.23) + '@csstools/utilities': 2.0.0(postcss@8.5.23) + postcss: 8.5.23 - '@csstools/postcss-color-function@4.0.12(postcss@8.5.10)': + '@csstools/postcss-color-function@4.0.12(postcss@8.5.23)': dependencies: '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) '@csstools/css-tokenizer': 3.0.4 - '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.10) - '@csstools/utilities': 2.0.0(postcss@8.5.10) - postcss: 8.5.10 + '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.23) + '@csstools/utilities': 2.0.0(postcss@8.5.23) + postcss: 8.5.23 - '@csstools/postcss-color-mix-function@3.0.12(postcss@8.5.10)': + '@csstools/postcss-color-mix-function@3.0.12(postcss@8.5.23)': dependencies: '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) '@csstools/css-tokenizer': 3.0.4 - '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.10) - '@csstools/utilities': 2.0.0(postcss@8.5.10) - postcss: 8.5.10 + '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.23) + '@csstools/utilities': 2.0.0(postcss@8.5.23) + postcss: 8.5.23 - '@csstools/postcss-color-mix-variadic-function-arguments@1.0.2(postcss@8.5.10)': + '@csstools/postcss-color-mix-variadic-function-arguments@1.0.2(postcss@8.5.23)': dependencies: '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) '@csstools/css-tokenizer': 3.0.4 - '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.10) - '@csstools/utilities': 2.0.0(postcss@8.5.10) - postcss: 8.5.10 + '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.23) + '@csstools/utilities': 2.0.0(postcss@8.5.23) + postcss: 8.5.23 - '@csstools/postcss-content-alt-text@2.0.8(postcss@8.5.10)': + '@csstools/postcss-content-alt-text@2.0.8(postcss@8.5.23)': dependencies: '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) '@csstools/css-tokenizer': 3.0.4 - '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.10) - '@csstools/utilities': 2.0.0(postcss@8.5.10) - postcss: 8.5.10 + '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.23) + '@csstools/utilities': 2.0.0(postcss@8.5.23) + postcss: 8.5.23 - '@csstools/postcss-contrast-color-function@2.0.12(postcss@8.5.10)': + '@csstools/postcss-contrast-color-function@2.0.12(postcss@8.5.23)': dependencies: '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) '@csstools/css-tokenizer': 3.0.4 - '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.10) - '@csstools/utilities': 2.0.0(postcss@8.5.10) - postcss: 8.5.10 + '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.23) + '@csstools/utilities': 2.0.0(postcss@8.5.23) + postcss: 8.5.23 - '@csstools/postcss-exponential-functions@2.0.9(postcss@8.5.10)': + '@csstools/postcss-exponential-functions@2.0.9(postcss@8.5.23)': dependencies: '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) '@csstools/css-tokenizer': 3.0.4 - postcss: 8.5.10 + postcss: 8.5.23 - '@csstools/postcss-font-format-keywords@4.0.0(postcss@8.5.10)': + '@csstools/postcss-font-format-keywords@4.0.0(postcss@8.5.23)': dependencies: - '@csstools/utilities': 2.0.0(postcss@8.5.10) - postcss: 8.5.10 + '@csstools/utilities': 2.0.0(postcss@8.5.23) + postcss: 8.5.23 postcss-value-parser: 4.2.0 - '@csstools/postcss-gamut-mapping@2.0.11(postcss@8.5.10)': + '@csstools/postcss-gamut-mapping@2.0.11(postcss@8.5.23)': dependencies: '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) '@csstools/css-tokenizer': 3.0.4 - postcss: 8.5.10 + postcss: 8.5.23 - '@csstools/postcss-gradients-interpolation-method@5.0.12(postcss@8.5.10)': + '@csstools/postcss-gradients-interpolation-method@5.0.12(postcss@8.5.23)': dependencies: '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) '@csstools/css-tokenizer': 3.0.4 - '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.10) - '@csstools/utilities': 2.0.0(postcss@8.5.10) - postcss: 8.5.10 + '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.23) + '@csstools/utilities': 2.0.0(postcss@8.5.23) + postcss: 8.5.23 - '@csstools/postcss-hwb-function@4.0.12(postcss@8.5.10)': + '@csstools/postcss-hwb-function@4.0.12(postcss@8.5.23)': dependencies: '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) '@csstools/css-tokenizer': 3.0.4 - '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.10) - '@csstools/utilities': 2.0.0(postcss@8.5.10) - postcss: 8.5.10 + '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.23) + '@csstools/utilities': 2.0.0(postcss@8.5.23) + postcss: 8.5.23 - '@csstools/postcss-ic-unit@4.0.4(postcss@8.5.10)': + '@csstools/postcss-ic-unit@4.0.4(postcss@8.5.23)': dependencies: - '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.10) - '@csstools/utilities': 2.0.0(postcss@8.5.10) - postcss: 8.5.10 + '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.23) + '@csstools/utilities': 2.0.0(postcss@8.5.23) + postcss: 8.5.23 postcss-value-parser: 4.2.0 - '@csstools/postcss-initial@2.0.1(postcss@8.5.10)': + '@csstools/postcss-initial@2.0.1(postcss@8.5.23)': dependencies: - postcss: 8.5.10 + postcss: 8.5.23 - '@csstools/postcss-is-pseudo-class@5.0.3(postcss@8.5.10)': + '@csstools/postcss-is-pseudo-class@5.0.3(postcss@8.5.23)': dependencies: '@csstools/selector-specificity': 5.0.0(postcss-selector-parser@7.1.1) - postcss: 8.5.10 + postcss: 8.5.23 postcss-selector-parser: 7.1.1 - '@csstools/postcss-light-dark-function@2.0.11(postcss@8.5.10)': + '@csstools/postcss-light-dark-function@2.0.11(postcss@8.5.23)': dependencies: '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) '@csstools/css-tokenizer': 3.0.4 - '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.10) - '@csstools/utilities': 2.0.0(postcss@8.5.10) - postcss: 8.5.10 + '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.23) + '@csstools/utilities': 2.0.0(postcss@8.5.23) + postcss: 8.5.23 - '@csstools/postcss-logical-float-and-clear@3.0.0(postcss@8.5.10)': + '@csstools/postcss-logical-float-and-clear@3.0.0(postcss@8.5.23)': dependencies: - postcss: 8.5.10 + postcss: 8.5.23 - '@csstools/postcss-logical-overflow@2.0.0(postcss@8.5.10)': + '@csstools/postcss-logical-overflow@2.0.0(postcss@8.5.23)': dependencies: - postcss: 8.5.10 + postcss: 8.5.23 - '@csstools/postcss-logical-overscroll-behavior@2.0.0(postcss@8.5.10)': + '@csstools/postcss-logical-overscroll-behavior@2.0.0(postcss@8.5.23)': dependencies: - postcss: 8.5.10 + postcss: 8.5.23 - '@csstools/postcss-logical-resize@3.0.0(postcss@8.5.10)': + '@csstools/postcss-logical-resize@3.0.0(postcss@8.5.23)': dependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-value-parser: 4.2.0 - '@csstools/postcss-logical-viewport-units@3.0.4(postcss@8.5.10)': + '@csstools/postcss-logical-viewport-units@3.0.4(postcss@8.5.23)': dependencies: '@csstools/css-tokenizer': 3.0.4 - '@csstools/utilities': 2.0.0(postcss@8.5.10) - postcss: 8.5.10 + '@csstools/utilities': 2.0.0(postcss@8.5.23) + postcss: 8.5.23 - '@csstools/postcss-media-minmax@2.0.9(postcss@8.5.10)': + '@csstools/postcss-media-minmax@2.0.9(postcss@8.5.23)': dependencies: '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) '@csstools/css-tokenizer': 3.0.4 '@csstools/media-query-list-parser': 4.0.3(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) - postcss: 8.5.10 + postcss: 8.5.23 - '@csstools/postcss-media-queries-aspect-ratio-number-values@3.0.5(postcss@8.5.10)': + '@csstools/postcss-media-queries-aspect-ratio-number-values@3.0.5(postcss@8.5.23)': dependencies: '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) '@csstools/css-tokenizer': 3.0.4 '@csstools/media-query-list-parser': 4.0.3(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) - postcss: 8.5.10 + postcss: 8.5.23 - '@csstools/postcss-nested-calc@4.0.0(postcss@8.5.10)': + '@csstools/postcss-nested-calc@4.0.0(postcss@8.5.23)': dependencies: - '@csstools/utilities': 2.0.0(postcss@8.5.10) - postcss: 8.5.10 + '@csstools/utilities': 2.0.0(postcss@8.5.23) + postcss: 8.5.23 postcss-value-parser: 4.2.0 - '@csstools/postcss-normalize-display-values@4.0.0(postcss@8.5.10)': + '@csstools/postcss-normalize-display-values@4.0.0(postcss@8.5.23)': dependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-value-parser: 4.2.0 - '@csstools/postcss-oklab-function@4.0.12(postcss@8.5.10)': + '@csstools/postcss-oklab-function@4.0.12(postcss@8.5.23)': dependencies: '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) '@csstools/css-tokenizer': 3.0.4 - '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.10) - '@csstools/utilities': 2.0.0(postcss@8.5.10) - postcss: 8.5.10 + '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.23) + '@csstools/utilities': 2.0.0(postcss@8.5.23) + postcss: 8.5.23 - '@csstools/postcss-progressive-custom-properties@4.2.1(postcss@8.5.10)': + '@csstools/postcss-progressive-custom-properties@4.2.1(postcss@8.5.23)': dependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-value-parser: 4.2.0 - '@csstools/postcss-random-function@2.0.1(postcss@8.5.10)': + '@csstools/postcss-random-function@2.0.1(postcss@8.5.23)': dependencies: '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) '@csstools/css-tokenizer': 3.0.4 - postcss: 8.5.10 + postcss: 8.5.23 - '@csstools/postcss-relative-color-syntax@3.0.12(postcss@8.5.10)': + '@csstools/postcss-relative-color-syntax@3.0.12(postcss@8.5.23)': dependencies: '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) '@csstools/css-tokenizer': 3.0.4 - '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.10) - '@csstools/utilities': 2.0.0(postcss@8.5.10) - postcss: 8.5.10 + '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.23) + '@csstools/utilities': 2.0.0(postcss@8.5.23) + postcss: 8.5.23 - '@csstools/postcss-scope-pseudo-class@4.0.1(postcss@8.5.10)': + '@csstools/postcss-scope-pseudo-class@4.0.1(postcss@8.5.23)': dependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-selector-parser: 7.1.1 - '@csstools/postcss-sign-functions@1.1.4(postcss@8.5.10)': + '@csstools/postcss-sign-functions@1.1.4(postcss@8.5.23)': dependencies: '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) '@csstools/css-tokenizer': 3.0.4 - postcss: 8.5.10 + postcss: 8.5.23 - '@csstools/postcss-stepped-value-functions@4.0.9(postcss@8.5.10)': + '@csstools/postcss-stepped-value-functions@4.0.9(postcss@8.5.23)': dependencies: '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) '@csstools/css-tokenizer': 3.0.4 - postcss: 8.5.10 + postcss: 8.5.23 - '@csstools/postcss-text-decoration-shorthand@4.0.3(postcss@8.5.10)': + '@csstools/postcss-text-decoration-shorthand@4.0.3(postcss@8.5.23)': dependencies: '@csstools/color-helpers': 5.1.0 - postcss: 8.5.10 + postcss: 8.5.23 postcss-value-parser: 4.2.0 - '@csstools/postcss-trigonometric-functions@4.0.9(postcss@8.5.10)': + '@csstools/postcss-trigonometric-functions@4.0.9(postcss@8.5.23)': dependencies: '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) '@csstools/css-tokenizer': 3.0.4 - postcss: 8.5.10 + postcss: 8.5.23 - '@csstools/postcss-unset-value@4.0.0(postcss@8.5.10)': + '@csstools/postcss-unset-value@4.0.0(postcss@8.5.23)': dependencies: - postcss: 8.5.10 + postcss: 8.5.23 '@csstools/selector-resolve-nested@3.1.0(postcss-selector-parser@7.1.1)': dependencies: @@ -16014,9 +16117,9 @@ snapshots: dependencies: postcss-selector-parser: 7.1.1 - '@csstools/utilities@2.0.0(postcss@8.5.10)': + '@csstools/utilities@2.0.0(postcss@8.5.23)': dependencies: - postcss: 8.5.10 + postcss: 8.5.23 '@ctrl/tinycolor@3.6.1': {} @@ -16098,7 +16201,7 @@ snapshots: dependencies: '@cucumber/messages': 32.3.1 - '@cucumber/gherkin@39.1.0': + '@cucumber/gherkin@41.0.0': dependencies: '@cucumber/messages': 32.3.1 @@ -16155,6 +16258,8 @@ snapshots: class-transformer: 0.5.1 reflect-metadata: 0.2.2 + '@cucumber/messages@34.0.1': {} + '@cucumber/node@0.4.0': dependencies: '@cucumber/ci-environment': 10.0.1 @@ -16274,14 +16379,14 @@ snapshots: copy-webpack-plugin: 11.0.0(webpack@5.105.4(esbuild@0.28.1)) css-loader: 6.11.0(webpack@5.105.4(esbuild@0.28.1)) css-minimizer-webpack-plugin: 5.0.1(clean-css@5.3.3)(esbuild@0.28.1)(webpack@5.105.4(esbuild@0.28.1)) - cssnano: 6.1.2(postcss@8.5.10) + cssnano: 6.1.2(postcss@8.5.23) file-loader: 6.2.0(webpack@5.105.4(esbuild@0.28.1)) html-minifier-terser: 7.2.0 mini-css-extract-plugin: 2.9.4(webpack@5.105.4(esbuild@0.28.1)) null-loader: 4.0.1(webpack@5.105.4(esbuild@0.28.1)) - postcss: 8.5.10 - postcss-loader: 7.3.4(postcss@8.5.10)(typescript@6.0.3)(webpack@5.105.4(esbuild@0.28.1)) - postcss-preset-env: 10.4.0(postcss@8.5.10) + postcss: 8.5.23 + postcss-loader: 7.3.4(postcss@8.5.23)(typescript@6.0.3)(webpack@5.105.4(esbuild@0.28.1)) + postcss-preset-env: 10.4.0(postcss@8.5.23) terser-webpack-plugin: 5.4.0(esbuild@0.28.1)(webpack@5.105.4(esbuild@0.28.1)) tslib: 2.8.1 url-loader: 4.1.1(file-loader@6.2.0(webpack@5.105.4(esbuild@0.28.1)))(webpack@5.105.4(esbuild@0.28.1)) @@ -16366,9 +16471,9 @@ snapshots: '@docusaurus/cssnano-preset@3.10.1': dependencies: - cssnano-preset-advanced: 6.1.2(postcss@8.5.10) - postcss: 8.5.10 - postcss-sort-media-queries: 5.2.0(postcss@8.5.10) + cssnano-preset-advanced: 6.1.2(postcss@8.5.23) + postcss: 8.5.23 + postcss-sort-media-queries: 5.2.0(postcss@8.5.23) tslib: 2.8.1 '@docusaurus/logger@3.10.1': @@ -16791,7 +16896,7 @@ snapshots: infima: 0.2.0-alpha.45 lodash: 4.18.1 nprogress: 0.2.0 - postcss: 8.5.10 + postcss: 8.5.23 prism-react-renderer: 2.4.1(react@19.2.0) prismjs: 1.30.0 react: 19.2.0 @@ -17464,10 +17569,10 @@ snapshots: '@graphql-tools/graphql-tag-pluck@8.3.26(graphql@16.12.0)': dependencies: '@babel/core': 7.29.6(supports-color@8.1.1) - '@babel/parser': 7.29.2 + '@babel/parser': 7.29.7 '@babel/plugin-syntax-import-assertions': 7.27.1(@babel/core@7.29.6) - '@babel/traverse': 7.29.0 - '@babel/types': 7.29.0 + '@babel/traverse': 7.29.7(supports-color@8.1.1) + '@babel/types': 7.29.7 '@graphql-tools/utils': 10.11.0(graphql@16.12.0) graphql: 16.12.0 tslib: 2.8.1 @@ -17648,7 +17753,7 @@ snapshots: '@inquirer/external-editor@1.0.3(@types/node@22.19.15)': dependencies: chardet: 2.1.1 - iconv-lite: 0.7.0 + iconv-lite: 0.7.3 optionalDependencies: '@types/node': 22.19.15 @@ -17866,12 +17971,17 @@ snapshots: '@opentelemetry/core@2.2.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/semantic-conventions': 1.38.0 + '@opentelemetry/semantic-conventions': 1.42.0 '@opentelemetry/core@2.8.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/semantic-conventions': 1.38.0 + '@opentelemetry/semantic-conventions': 1.42.0 + + '@opentelemetry/core@2.9.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/semantic-conventions': 1.42.0 '@opentelemetry/exporter-logs-otlp-grpc@0.57.2(@opentelemetry/api@1.9.0)': dependencies: @@ -17940,7 +18050,7 @@ snapshots: '@opentelemetry/core': 2.8.0(@opentelemetry/api@1.9.0) '@opentelemetry/resources': 2.7.1(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-metrics': 2.7.1(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.38.0 + '@opentelemetry/semantic-conventions': 1.42.0 '@opentelemetry/exporter-trace-otlp-grpc@0.57.2(@opentelemetry/api@1.9.0)': dependencies: @@ -17999,7 +18109,7 @@ snapshots: '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.25.1 - semver: 7.7.3 + semver: 7.8.0 transitivePeerDependencies: - supports-color @@ -18030,7 +18140,7 @@ snapshots: '@types/shimmer': 1.2.0 import-in-the-middle: 1.15.0 require-in-the-middle: 7.5.2 - semver: 7.7.4 + semver: 7.8.0 shimmer: 1.2.1 transitivePeerDependencies: - supports-color @@ -18042,7 +18152,7 @@ snapshots: '@types/shimmer': 1.2.0 import-in-the-middle: 1.15.0 require-in-the-middle: 7.5.2 - semver: 7.7.4 + semver: 7.8.0 shimmer: 1.2.1 transitivePeerDependencies: - supports-color @@ -18077,10 +18187,10 @@ snapshots: '@opentelemetry/api': 1.9.0 '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) - '@opentelemetry/propagator-jaeger@1.30.1(@opentelemetry/api@1.9.0)': + '@opentelemetry/propagator-jaeger@2.9.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.9.0(@opentelemetry/api@1.9.0) '@opentelemetry/resources@1.30.1(@opentelemetry/api@1.9.0)': dependencies: @@ -18092,13 +18202,13 @@ snapshots: dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.38.0 + '@opentelemetry/semantic-conventions': 1.42.0 '@opentelemetry/resources@2.7.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/core': 2.8.0(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.38.0 + '@opentelemetry/semantic-conventions': 1.42.0 '@opentelemetry/sdk-logs@0.57.2(@opentelemetry/api@1.9.0)': dependencies: @@ -18157,7 +18267,7 @@ snapshots: '@opentelemetry/api': 1.9.0 '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) '@opentelemetry/resources': 2.2.0(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.38.0 + '@opentelemetry/semantic-conventions': 1.42.0 '@opentelemetry/sdk-trace-node@1.30.1(@opentelemetry/api@1.9.0)': dependencies: @@ -18165,9 +18275,9 @@ snapshots: '@opentelemetry/context-async-hooks': 1.30.1(@opentelemetry/api@1.9.0) '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) '@opentelemetry/propagator-b3': 1.30.1(@opentelemetry/api@1.9.0) - '@opentelemetry/propagator-jaeger': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/propagator-jaeger': 2.9.0(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-trace-base': 1.30.1(@opentelemetry/api@1.9.0) - semver: 7.7.4 + semver: 7.8.0 '@opentelemetry/sdk-trace-web@2.2.0(@opentelemetry/api@1.9.0)': dependencies: @@ -18179,7 +18289,7 @@ snapshots: '@opentelemetry/semantic-conventions@1.28.0': {} - '@opentelemetry/semantic-conventions@1.38.0': {} + '@opentelemetry/semantic-conventions@1.42.0': {} '@oxc-parser/binding-android-arm-eabi@0.121.0': optional: true @@ -19144,18 +19254,18 @@ snapshots: dependencies: '@sentry/types': 7.120.4 - '@serenity-js/assertions@3.43.0': + '@serenity-js/assertions@3.44.1': dependencies: - '@serenity-js/core': 3.43.0 + '@serenity-js/core': 3.44.1 tiny-types: 2.0.5 - '@serenity-js/console-reporter@3.43.0': + '@serenity-js/console-reporter@3.44.1': dependencies: - '@serenity-js/core': 3.43.0 + '@serenity-js/core': 3.44.1 chalk: 4.1.2 tiny-types: 2.0.5 - '@serenity-js/core@3.43.0': + '@serenity-js/core@3.44.1': dependencies: '@paralleldrive/cuid2': 2.3.1 chalk: 4.1.2 @@ -19164,47 +19274,47 @@ snapshots: fast-glob: 3.3.3 filenamify: 4.3.0 graceful-fs: 4.2.11 - semver: 7.8.0 + semver: 7.8.5 tiny-types: 2.0.5 upath: 2.0.1 validate-npm-package-name: 7.0.2 - '@serenity-js/cucumber@3.43.0(@cucumber/cucumber@12.8.1)': + '@serenity-js/cucumber@3.44.1(@cucumber/cucumber@12.8.1)': dependencies: - '@cucumber/gherkin': 39.1.0 - '@cucumber/messages': 32.3.1 - '@serenity-js/core': 3.43.0 + '@cucumber/gherkin': 41.0.0 + '@cucumber/messages': 34.0.1 + '@serenity-js/core': 3.44.1 cli-table3: 0.6.5 tiny-types: 2.0.5 optionalDependencies: '@cucumber/cucumber': 12.8.1 - '@serenity-js/rest@3.43.0': + '@serenity-js/rest@3.44.1': dependencies: - '@serenity-js/core': 3.43.0 + '@serenity-js/core': 3.44.1 agent-base: 7.1.4 - axios: 1.16.0 + axios: 1.18.1(supports-color@8.1.1) http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 - lru-cache: 11.3.6 + lru-cache: 11.5.1 tiny-types: 2.0.5 transitivePeerDependencies: - debug - supports-color - '@serenity-js/serenity-bdd@3.43.0': + '@serenity-js/serenity-bdd@3.44.1': dependencies: - '@serenity-js/assertions': 3.43.0 - '@serenity-js/core': 3.43.0 - '@serenity-js/rest': 3.43.0 + '@serenity-js/assertions': 3.44.1 + '@serenity-js/core': 3.44.1 + '@serenity-js/rest': 3.44.1 ansi-regex: 5.0.1 - axios: 1.16.0 + axios: 1.18.1(supports-color@8.1.1) chalk: 4.1.2 find-java-home: 2.0.0 progress: 2.0.3 tiny-types: 2.0.5 which: 6.0.1 - yargs: 17.7.2 + yargs: 17.7.3 transitivePeerDependencies: - debug - supports-color @@ -19248,10 +19358,10 @@ snapshots: color: 5.0.3 text-hex: 1.0.0 - '@sonar/scan@4.3.2': + '@sonar/scan@4.3.2(supports-color@8.1.1)': dependencies: - adm-zip: 0.5.16 - axios: 1.16.0 + adm-zip: 0.6.0 + axios: 1.18.1(supports-color@8.1.1) commander: 13.1.0 fs-extra: 11.3.2 hpagent: 1.2.0 @@ -19265,6 +19375,7 @@ snapshots: - bare-abort-controller - debug - react-native-b4a + - supports-color '@standard-schema/spec@1.1.0': {} @@ -19297,16 +19408,39 @@ snapshots: dependencies: storybook: 10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@storybook/addon-vitest@10.4.2(@vitest/browser-playwright@4.1.8)(@vitest/browser@4.1.8(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.8))(@vitest/runner@4.1.8)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vitest@4.1.8)': + '@storybook/addon-vitest@10.4.2(@vitest/browser-playwright@4.1.10)(@vitest/browser@4.1.10(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.10))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vitest@4.1.10)': dependencies: '@storybook/global': 5.0.0 '@storybook/icons': 2.0.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) storybook: 10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) optionalDependencies: - '@vitest/browser': 4.1.8(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.8) - '@vitest/browser-playwright': 4.1.8(playwright@1.59.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.8) - '@vitest/runner': 4.1.8 - vitest: 4.1.8(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + '@vitest/browser': 4.1.10(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.10) + '@vitest/browser-playwright': 4.1.10(playwright@1.59.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.10) + vitest: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-istanbul@4.1.10)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + transitivePeerDependencies: + - react + - react-dom + + '@storybook/addon-vitest@10.4.2(@vitest/browser-playwright@4.1.10)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vitest@4.1.10)': + dependencies: + '@storybook/global': 5.0.0 + '@storybook/icons': 2.0.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + storybook: 10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + optionalDependencies: + '@vitest/browser-playwright': 4.1.10(playwright@1.59.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.10) + vitest: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-istanbul@4.1.10(supports-color@8.1.1)(vitest@4.1.10))(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + transitivePeerDependencies: + - react + - react-dom + + '@storybook/addon-vitest@10.4.2(@vitest/browser@4.1.10(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.10))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vitest@4.1.10)': + dependencies: + '@storybook/global': 5.0.0 + '@storybook/icons': 2.0.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + storybook: 10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + optionalDependencies: + '@vitest/browser': 4.1.10(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.10) + vitest: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-istanbul@4.1.10)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) transitivePeerDependencies: - react - react-dom @@ -19462,7 +19596,7 @@ snapshots: '@svgr/core': 8.1.0(typescript@6.0.3) cosmiconfig: 8.3.6(typescript@6.0.3) deepmerge: 4.3.1 - svgo: 3.3.3 + svgo: 3.3.4 transitivePeerDependencies: - typescript @@ -19868,69 +20002,37 @@ snapshots: '@rolldown/pluginutils': 1.0.0-rc.7 vite: 8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) - '@vitest/browser-playwright@4.1.8(playwright@1.59.0)(vite@8.0.16(@types/node@22.19.15)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.8)': - dependencies: - '@vitest/browser': 4.1.8(vite@8.0.16(@types/node@22.19.15)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.8) - '@vitest/mocker': 4.1.8(vite@8.0.16(@types/node@22.19.15)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) - playwright: 1.59.0 - tinyrainbow: 3.1.0 - vitest: 4.1.8(@opentelemetry/api@1.9.0)(@types/node@22.19.15)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@22.19.15)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) - transitivePeerDependencies: - - bufferutil - - msw - - utf-8-validate - - vite - optional: true - - '@vitest/browser-playwright@4.1.8(playwright@1.59.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.8)': + '@vitest/browser-playwright@4.1.10(playwright@1.59.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.10)': dependencies: - '@vitest/browser': 4.1.8(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.8) - '@vitest/mocker': 4.1.8(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + '@vitest/browser': 4.1.10(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.10) + '@vitest/mocker': 4.1.10(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) playwright: 1.59.0 tinyrainbow: 3.1.0 - vitest: 4.1.8(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + vitest: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-istanbul@4.1.10(supports-color@8.1.1)(vitest@4.1.10))(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) transitivePeerDependencies: - bufferutil - msw - utf-8-validate - vite - '@vitest/browser@4.1.8(vite@8.0.16(@types/node@22.19.15)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.8)': + '@vitest/browser@4.1.10(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.10)': dependencies: '@blazediff/core': 1.9.1 - '@vitest/mocker': 4.1.8(vite@8.0.16(@types/node@22.19.15)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) - '@vitest/utils': 4.1.8 + '@vitest/mocker': 4.1.10(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + '@vitest/utils': 4.1.10 magic-string: 0.30.21 pngjs: 7.0.0 sirv: 3.0.2 tinyrainbow: 3.1.0 - vitest: 4.1.8(@opentelemetry/api@1.9.0)(@types/node@22.19.15)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@22.19.15)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + vitest: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-istanbul@4.1.10)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) ws: 8.21.0 transitivePeerDependencies: - bufferutil - msw - utf-8-validate - vite - optional: true - '@vitest/browser@4.1.8(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.8)': - dependencies: - '@blazediff/core': 1.9.1 - '@vitest/mocker': 4.1.8(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) - '@vitest/utils': 4.1.8 - magic-string: 0.30.21 - pngjs: 7.0.0 - sirv: 3.0.2 - tinyrainbow: 3.1.0 - vitest: 4.1.8(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) - ws: 8.21.0 - transitivePeerDependencies: - - bufferutil - - msw - - utf-8-validate - - vite - - '@vitest/coverage-istanbul@4.1.8(supports-color@8.1.1)(vitest@4.1.8)': + '@vitest/coverage-istanbul@4.1.10(supports-color@8.1.1)(vitest@4.1.10)': dependencies: '@babel/core': 7.29.6(supports-color@8.1.1) '@istanbuljs/schema': 0.1.3 @@ -19942,11 +20044,11 @@ snapshots: magicast: 0.5.2 obug: 2.1.1 tinyrainbow: 3.1.0 - vitest: 4.1.8(@opentelemetry/api@1.9.0)(@types/node@22.19.15)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@22.19.15)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + vitest: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@22.19.15)(@vitest/coverage-istanbul@4.1.10)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@22.19.15)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) transitivePeerDependencies: - supports-color - '@vitest/coverage-istanbul@4.1.8(vitest@4.1.8)': + '@vitest/coverage-istanbul@4.1.10(vitest@4.1.10)': dependencies: '@babel/core': 7.29.6(supports-color@8.1.1) '@istanbuljs/schema': 0.1.3 @@ -19958,7 +20060,7 @@ snapshots: magicast: 0.5.2 obug: 2.1.1 tinyrainbow: 3.1.0 - vitest: 4.1.8(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + vitest: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-istanbul@4.1.10)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) transitivePeerDependencies: - supports-color @@ -19970,26 +20072,26 @@ snapshots: chai: 5.3.3 tinyrainbow: 2.0.0 - '@vitest/expect@4.1.8': + '@vitest/expect@4.1.10': dependencies: '@standard-schema/spec': 1.1.0 '@types/chai': 5.2.3 - '@vitest/spy': 4.1.8 - '@vitest/utils': 4.1.8 + '@vitest/spy': 4.1.10 + '@vitest/utils': 4.1.10 chai: 6.2.2 tinyrainbow: 3.1.0 - '@vitest/mocker@4.1.8(vite@8.0.16(@types/node@22.19.15)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))': + '@vitest/mocker@4.1.10(vite@8.0.16(@types/node@22.19.15)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: - '@vitest/spy': 4.1.8 + '@vitest/spy': 4.1.10 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: vite: 8.0.16(@types/node@22.19.15)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) - '@vitest/mocker@4.1.8(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))': + '@vitest/mocker@4.1.10(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: - '@vitest/spy': 4.1.8 + '@vitest/spy': 4.1.10 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: @@ -19999,19 +20101,19 @@ snapshots: dependencies: tinyrainbow: 2.0.0 - '@vitest/pretty-format@4.1.8': + '@vitest/pretty-format@4.1.10': dependencies: tinyrainbow: 3.1.0 - '@vitest/runner@4.1.8': + '@vitest/runner@4.1.10': dependencies: - '@vitest/utils': 4.1.8 + '@vitest/utils': 4.1.10 pathe: 2.0.3 - '@vitest/snapshot@4.1.8': + '@vitest/snapshot@4.1.10': dependencies: - '@vitest/pretty-format': 4.1.8 - '@vitest/utils': 4.1.8 + '@vitest/pretty-format': 4.1.10 + '@vitest/utils': 4.1.10 magic-string: 0.30.21 pathe: 2.0.3 @@ -20019,7 +20121,7 @@ snapshots: dependencies: tinyspy: 4.0.4 - '@vitest/spy@4.1.8': {} + '@vitest/spy@4.1.10': {} '@vitest/utils@3.2.4': dependencies: @@ -20027,9 +20129,9 @@ snapshots: loupe: 3.2.1 tinyrainbow: 2.0.0 - '@vitest/utils@4.1.8': + '@vitest/utils@4.1.10': dependencies: - '@vitest/pretty-format': 4.1.8 + '@vitest/pretty-format': 4.1.10 convert-source-map: 2.0.0 tinyrainbow: 3.1.0 @@ -20186,7 +20288,13 @@ snapshots: address@1.2.2: {} - adm-zip@0.5.16: {} + adm-zip@0.6.0: {} + + agent-base@6.0.2(supports-color@8.1.1): + dependencies: + debug: 4.4.3(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color agent-base@7.1.4: {} @@ -20226,7 +20334,7 @@ snapshots: ajv@8.18.0: dependencies: fast-deep-equal: 3.1.3 - fast-uri: 4.0.1 + fast-uri: 4.1.1 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 @@ -20481,14 +20589,14 @@ snapshots: auto-bind@4.0.0: {} - autoprefixer@10.4.22(postcss@8.5.10): + autoprefixer@10.4.22(postcss@8.5.23): dependencies: browserslist: 4.28.1 caniuse-lite: 1.0.30001777 fraction.js: 5.3.4 normalize-range: 0.1.2 picocolors: 1.1.1 - postcss: 8.5.10 + postcss: 8.5.23 postcss-value-parser: 4.2.0 available-typed-arrays@1.0.7: @@ -20499,27 +20607,29 @@ snapshots: axe-core@4.11.0: {} - axios@1.16.0: + axios@1.18.1(supports-color@8.1.1): dependencies: follow-redirects: 1.16.0(debug@4.4.3) form-data: 4.0.6 + https-proxy-agent: 5.0.1(supports-color@8.1.1) proxy-from-env: 2.1.0 transitivePeerDependencies: - debug + - supports-color azurite@3.35.0(supports-color@8.1.1): dependencies: '@azure/ms-rest-js': 1.11.2 applicationinsights: 2.9.8 args: 5.0.3 - axios: 1.16.0 + axios: 1.18.1(supports-color@8.1.1) etag: 1.8.1 express: 4.22.2 fs-extra: 11.3.2 glob-to-regexp: 0.4.1 jsonwebtoken: 9.0.2 lokijs: 1.5.12 - morgan: 1.10.1 + morgan: 1.11.0 multistream: 2.1.1 mysql2: 3.15.3 rimraf: 3.0.2 @@ -20559,7 +20669,7 @@ snapshots: babel-plugin-polyfill-corejs2@0.4.14(@babel/core@7.29.6): dependencies: - '@babel/compat-data': 7.29.0 + '@babel/compat-data': 7.29.7 '@babel/core': 7.29.6(supports-color@8.1.1) '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.29.6) semver: 6.3.1 @@ -20620,7 +20730,24 @@ snapshots: bn.js@5.2.3: {} - body-parser@2.3.0: + body-parser@1.20.6: + dependencies: + bytes: 3.1.2 + content-type: 1.0.5 + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + http-errors: 2.0.1 + iconv-lite: 0.4.24 + on-finished: 2.4.1 + qs: 6.15.2 + raw-body: 2.5.3 + type-is: 1.6.18 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + + body-parser@2.3.0(supports-color@8.1.1): dependencies: bytes: 3.1.2 content-type: 2.0.0 @@ -20665,11 +20792,11 @@ snapshots: widest-line: 4.0.1 wrap-ansi: 8.1.0 - brace-expansion@2.0.3: + brace-expansion@2.1.2: dependencies: balanced-match: 1.0.2 - brace-expansion@5.0.7: + brace-expansion@5.0.8: dependencies: balanced-match: 4.0.4 @@ -20964,7 +21091,7 @@ snapshots: chromatic@16.10.0: dependencies: - semver: 7.7.4 + semver: 7.8.0 chrome-devtools-mcp@1.3.0: {} @@ -21282,41 +21409,41 @@ snapshots: dependencies: type-fest: 1.4.0 - css-blank-pseudo@7.0.1(postcss@8.5.10): + css-blank-pseudo@7.0.1(postcss@8.5.23): dependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-selector-parser: 7.1.1 - css-declaration-sorter@7.3.0(postcss@8.5.10): + css-declaration-sorter@7.3.0(postcss@8.5.23): dependencies: - postcss: 8.5.10 + postcss: 8.5.23 - css-has-pseudo@7.0.3(postcss@8.5.10): + css-has-pseudo@7.0.3(postcss@8.5.23): dependencies: '@csstools/selector-specificity': 5.0.0(postcss-selector-parser@7.1.1) - postcss: 8.5.10 + postcss: 8.5.23 postcss-selector-parser: 7.1.1 postcss-value-parser: 4.2.0 css-loader@6.11.0(webpack@5.105.4(esbuild@0.28.1)): dependencies: - icss-utils: 5.1.0(postcss@8.5.10) - postcss: 8.5.10 - postcss-modules-extract-imports: 3.1.0(postcss@8.5.10) - postcss-modules-local-by-default: 4.2.0(postcss@8.5.10) - postcss-modules-scope: 3.2.1(postcss@8.5.10) - postcss-modules-values: 4.0.0(postcss@8.5.10) + icss-utils: 5.1.0(postcss@8.5.23) + postcss: 8.5.23 + postcss-modules-extract-imports: 3.1.0(postcss@8.5.23) + postcss-modules-local-by-default: 4.2.0(postcss@8.5.23) + postcss-modules-scope: 3.2.1(postcss@8.5.23) + postcss-modules-values: 4.0.0(postcss@8.5.23) postcss-value-parser: 4.2.0 - semver: 7.7.4 + semver: 7.8.0 optionalDependencies: webpack: 5.105.4(esbuild@0.28.1) css-minimizer-webpack-plugin@5.0.1(clean-css@5.3.3)(esbuild@0.28.1)(webpack@5.105.4(esbuild@0.28.1)): dependencies: '@jridgewell/trace-mapping': 0.3.31 - cssnano: 6.1.2(postcss@8.5.10) + cssnano: 6.1.2(postcss@8.5.23) jest-worker: 29.7.0 - postcss: 8.5.10 + postcss: 8.5.23 schema-utils: 4.3.3 serialize-javascript: 7.0.5 webpack: 5.105.4(esbuild@0.28.1) @@ -21324,9 +21451,9 @@ snapshots: clean-css: 5.3.3 esbuild: 0.28.1 - css-prefers-color-scheme@10.0.0(postcss@8.5.10): + css-prefers-color-scheme@10.0.0(postcss@8.5.23): dependencies: - postcss: 8.5.10 + postcss: 8.5.23 css-select@4.3.0: dependencies: @@ -21362,60 +21489,60 @@ snapshots: cssesc@3.0.0: {} - cssnano-preset-advanced@6.1.2(postcss@8.5.10): + cssnano-preset-advanced@6.1.2(postcss@8.5.23): dependencies: - autoprefixer: 10.4.22(postcss@8.5.10) + autoprefixer: 10.4.22(postcss@8.5.23) browserslist: 4.28.1 - cssnano-preset-default: 6.1.2(postcss@8.5.10) - postcss: 8.5.10 - postcss-discard-unused: 6.0.5(postcss@8.5.10) - postcss-merge-idents: 6.0.3(postcss@8.5.10) - postcss-reduce-idents: 6.0.3(postcss@8.5.10) - postcss-zindex: 6.0.2(postcss@8.5.10) + cssnano-preset-default: 6.1.2(postcss@8.5.23) + postcss: 8.5.23 + postcss-discard-unused: 6.0.5(postcss@8.5.23) + postcss-merge-idents: 6.0.3(postcss@8.5.23) + postcss-reduce-idents: 6.0.3(postcss@8.5.23) + postcss-zindex: 6.0.2(postcss@8.5.23) - cssnano-preset-default@6.1.2(postcss@8.5.10): + cssnano-preset-default@6.1.2(postcss@8.5.23): dependencies: browserslist: 4.28.1 - css-declaration-sorter: 7.3.0(postcss@8.5.10) - cssnano-utils: 4.0.2(postcss@8.5.10) - postcss: 8.5.10 - postcss-calc: 9.0.1(postcss@8.5.10) - postcss-colormin: 6.1.0(postcss@8.5.10) - postcss-convert-values: 6.1.0(postcss@8.5.10) - postcss-discard-comments: 6.0.2(postcss@8.5.10) - postcss-discard-duplicates: 6.0.3(postcss@8.5.10) - postcss-discard-empty: 6.0.3(postcss@8.5.10) - postcss-discard-overridden: 6.0.2(postcss@8.5.10) - postcss-merge-longhand: 6.0.5(postcss@8.5.10) - postcss-merge-rules: 6.1.1(postcss@8.5.10) - postcss-minify-font-values: 6.1.0(postcss@8.5.10) - postcss-minify-gradients: 6.0.3(postcss@8.5.10) - postcss-minify-params: 6.1.0(postcss@8.5.10) - postcss-minify-selectors: 6.0.4(postcss@8.5.10) - postcss-normalize-charset: 6.0.2(postcss@8.5.10) - postcss-normalize-display-values: 6.0.2(postcss@8.5.10) - postcss-normalize-positions: 6.0.2(postcss@8.5.10) - postcss-normalize-repeat-style: 6.0.2(postcss@8.5.10) - postcss-normalize-string: 6.0.2(postcss@8.5.10) - postcss-normalize-timing-functions: 6.0.2(postcss@8.5.10) - postcss-normalize-unicode: 6.1.0(postcss@8.5.10) - postcss-normalize-url: 6.0.2(postcss@8.5.10) - postcss-normalize-whitespace: 6.0.2(postcss@8.5.10) - postcss-ordered-values: 6.0.2(postcss@8.5.10) - postcss-reduce-initial: 6.1.0(postcss@8.5.10) - postcss-reduce-transforms: 6.0.2(postcss@8.5.10) - postcss-svgo: 6.0.3(postcss@8.5.10) - postcss-unique-selectors: 6.0.4(postcss@8.5.10) - - cssnano-utils@4.0.2(postcss@8.5.10): - dependencies: - postcss: 8.5.10 - - cssnano@6.1.2(postcss@8.5.10): - dependencies: - cssnano-preset-default: 6.1.2(postcss@8.5.10) + css-declaration-sorter: 7.3.0(postcss@8.5.23) + cssnano-utils: 4.0.2(postcss@8.5.23) + postcss: 8.5.23 + postcss-calc: 9.0.1(postcss@8.5.23) + postcss-colormin: 6.1.0(postcss@8.5.23) + postcss-convert-values: 6.1.0(postcss@8.5.23) + postcss-discard-comments: 6.0.2(postcss@8.5.23) + postcss-discard-duplicates: 6.0.3(postcss@8.5.23) + postcss-discard-empty: 6.0.3(postcss@8.5.23) + postcss-discard-overridden: 6.0.2(postcss@8.5.23) + postcss-merge-longhand: 6.0.5(postcss@8.5.23) + postcss-merge-rules: 6.1.1(postcss@8.5.23) + postcss-minify-font-values: 6.1.0(postcss@8.5.23) + postcss-minify-gradients: 6.0.3(postcss@8.5.23) + postcss-minify-params: 6.1.0(postcss@8.5.23) + postcss-minify-selectors: 6.0.4(postcss@8.5.23) + postcss-normalize-charset: 6.0.2(postcss@8.5.23) + postcss-normalize-display-values: 6.0.2(postcss@8.5.23) + postcss-normalize-positions: 6.0.2(postcss@8.5.23) + postcss-normalize-repeat-style: 6.0.2(postcss@8.5.23) + postcss-normalize-string: 6.0.2(postcss@8.5.23) + postcss-normalize-timing-functions: 6.0.2(postcss@8.5.23) + postcss-normalize-unicode: 6.1.0(postcss@8.5.23) + postcss-normalize-url: 6.0.2(postcss@8.5.23) + postcss-normalize-whitespace: 6.0.2(postcss@8.5.23) + postcss-ordered-values: 6.0.2(postcss@8.5.23) + postcss-reduce-initial: 6.1.0(postcss@8.5.23) + postcss-reduce-transforms: 6.0.2(postcss@8.5.23) + postcss-svgo: 6.0.3(postcss@8.5.23) + postcss-unique-selectors: 6.0.4(postcss@8.5.23) + + cssnano-utils@4.0.2(postcss@8.5.23): + dependencies: + postcss: 8.5.23 + + cssnano@6.1.2(postcss@8.5.23): + dependencies: + cssnano-preset-default: 6.1.2(postcss@8.5.23) lilconfig: 3.1.3 - postcss: 8.5.10 + postcss: 8.5.23 csso@5.0.5: dependencies: @@ -21799,7 +21926,7 @@ snapshots: es-errors@1.3.0: {} - es-module-lexer@2.0.0: {} + es-module-lexer@2.3.0: {} es-object-atoms@1.1.1: dependencies: @@ -21810,7 +21937,7 @@ snapshots: es-errors: 1.3.0 get-intrinsic: 1.3.0 has-tostringtag: 1.0.2 - hasown: 2.0.2 + hasown: 2.0.4 es-to-primitive@1.3.0: dependencies: @@ -21999,7 +22126,7 @@ snapshots: dependencies: accepts: 1.3.8 array-flatten: 1.1.1 - body-parser: 2.3.0 + body-parser: 1.20.6 content-disposition: 0.5.4 content-type: 1.0.5 cookie: 0.7.2 @@ -22051,7 +22178,7 @@ snapshots: fast-json-stable-stringify@2.1.0: {} - fast-uri@4.0.1: {} + fast-uri@4.1.1: {} fast-xml-builder@1.2.0: dependencies: @@ -22076,7 +22203,7 @@ snapshots: faye-websocket@0.11.4: dependencies: - websocket-driver: 0.7.4 + websocket-driver: 0.7.5 fb-watchman@2.0.2: dependencies: @@ -22381,7 +22508,7 @@ snapshots: es6-error: 4.1.1 matcher: 3.0.0 roarr: 2.15.4 - semver: 7.7.4 + semver: 7.8.0 serialize-error: 7.0.1 global-dirs@3.0.1: @@ -22830,6 +22957,13 @@ snapshots: https-browserify@1.0.0: {} + https-proxy-agent@5.0.1(supports-color@8.1.1): + dependencies: + agent-base: 6.0.2(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + https-proxy-agent@7.0.6: dependencies: agent-base: 7.1.4 @@ -22845,6 +22979,10 @@ snapshots: hyperdyperid@1.2.0: {} + iconv-lite@0.4.24: + dependencies: + safer-buffer: 2.1.2 + iconv-lite@0.6.3: dependencies: safer-buffer: 2.1.2 @@ -22857,9 +22995,9 @@ snapshots: dependencies: safer-buffer: 2.1.2 - icss-utils@5.1.0(postcss@8.5.10): + icss-utils@5.1.0(postcss@8.5.23): dependencies: - postcss: 8.5.10 + postcss: 8.5.23 ieee754@1.2.1: {} @@ -22874,7 +23012,7 @@ snapshots: immediate@3.0.6: {} - immutable@3.8.3: {} + immutable@5.1.9: {} import-fresh@3.3.1: dependencies: @@ -23621,6 +23759,8 @@ snapshots: lru-cache@11.3.6: {} + lru-cache@11.5.1: {} + lru-cache@5.1.1: dependencies: yallist: 3.1.1 @@ -23639,8 +23779,8 @@ snapshots: magicast@0.5.2: dependencies: - '@babel/parser': 7.29.2 - '@babel/types': 7.29.0 + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 source-map-js: 1.2.1 make-dir@2.1.0: @@ -23655,7 +23795,7 @@ snapshots: make-dir@4.0.0: dependencies: - semver: 7.7.4 + semver: 7.8.0 map-cache@0.2.2: {} @@ -24243,19 +24383,19 @@ snapshots: minimatch@10.2.4: dependencies: - brace-expansion: 5.0.7 + brace-expansion: 5.0.8 minimatch@10.2.5: dependencies: - brace-expansion: 5.0.7 + brace-expansion: 5.0.8 minimatch@3.1.5: dependencies: - brace-expansion: 5.0.7 + brace-expansion: 2.1.2 minimatch@9.0.9: dependencies: - brace-expansion: 2.0.3 + brace-expansion: 2.1.2 minimist@1.2.8: {} @@ -24286,7 +24426,7 @@ snapshots: https-proxy-agent: 7.0.6 mongodb: 6.21.0 new-find-package-json: 2.0.0(supports-color@8.1.1) - semver: 7.7.4 + semver: 7.8.0 tar-stream: 3.1.7 tslib: 2.8.1 yauzl: 3.2.1 @@ -24312,7 +24452,7 @@ snapshots: https-proxy-agent: 7.0.6 mongodb: 6.21.0 new-find-package-json: 2.0.0(supports-color@8.1.1) - semver: 7.7.4 + semver: 7.8.0 tar-stream: 3.1.7 tslib: 2.8.1 yauzl: 3.2.1 @@ -24366,17 +24506,23 @@ snapshots: bson: 6.10.4 mongodb-connection-string-url: 3.0.2 + mongodb@6.20.0: + dependencies: + '@mongodb-js/saslprep': 1.3.2 + bson: 6.10.4 + mongodb-connection-string-url: 3.0.2 + mongodb@6.21.0: dependencies: '@mongodb-js/saslprep': 1.3.2 bson: 6.10.4 mongodb-connection-string-url: 3.0.2 - mongoose@8.17.0(supports-color@8.1.1): + mongoose@8.24.1(supports-color@8.1.1): dependencies: bson: 6.10.4 kareem: 2.6.3 - mongodb: 6.18.0 + mongodb: 6.20.0 mpath: 0.9.0 mquery: 5.0.0(supports-color@8.1.1) ms: 2.1.3 @@ -24391,12 +24537,12 @@ snapshots: - socks - supports-color - morgan@1.10.1: + morgan@1.11.0: dependencies: basic-auth: 2.0.1 debug: 2.6.9 depd: 2.0.0 - on-finished: 2.3.0 + on-finished: 2.4.1 on-headers: 1.1.0 transitivePeerDependencies: - supports-color @@ -24451,7 +24597,7 @@ snapshots: dependencies: lru-cache: 7.18.3 - nanoid@3.3.11: {} + nanoid@3.3.16: {} native-duplexpair@1.0.0: {} @@ -24618,10 +24764,6 @@ snapshots: dependencies: jwt-decode: 4.0.0 - on-finished@2.3.0: - dependencies: - ee-first: 1.1.1 - on-finished@2.4.1: dependencies: ee-first: 1.1.1 @@ -25046,429 +25188,429 @@ snapshots: possible-typed-array-names@1.1.0: {} - postcss-attribute-case-insensitive@7.0.1(postcss@8.5.10): + postcss-attribute-case-insensitive@7.0.1(postcss@8.5.23): dependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-selector-parser: 7.1.1 - postcss-calc@9.0.1(postcss@8.5.10): + postcss-calc@9.0.1(postcss@8.5.23): dependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-selector-parser: 6.1.2 postcss-value-parser: 4.2.0 - postcss-clamp@4.1.0(postcss@8.5.10): + postcss-clamp@4.1.0(postcss@8.5.23): dependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-value-parser: 4.2.0 - postcss-color-functional-notation@7.0.12(postcss@8.5.10): + postcss-color-functional-notation@7.0.12(postcss@8.5.23): dependencies: '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) '@csstools/css-tokenizer': 3.0.4 - '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.10) - '@csstools/utilities': 2.0.0(postcss@8.5.10) - postcss: 8.5.10 + '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.23) + '@csstools/utilities': 2.0.0(postcss@8.5.23) + postcss: 8.5.23 - postcss-color-hex-alpha@10.0.0(postcss@8.5.10): + postcss-color-hex-alpha@10.0.0(postcss@8.5.23): dependencies: - '@csstools/utilities': 2.0.0(postcss@8.5.10) - postcss: 8.5.10 + '@csstools/utilities': 2.0.0(postcss@8.5.23) + postcss: 8.5.23 postcss-value-parser: 4.2.0 - postcss-color-rebeccapurple@10.0.0(postcss@8.5.10): + postcss-color-rebeccapurple@10.0.0(postcss@8.5.23): dependencies: - '@csstools/utilities': 2.0.0(postcss@8.5.10) - postcss: 8.5.10 + '@csstools/utilities': 2.0.0(postcss@8.5.23) + postcss: 8.5.23 postcss-value-parser: 4.2.0 - postcss-colormin@6.1.0(postcss@8.5.10): + postcss-colormin@6.1.0(postcss@8.5.23): dependencies: browserslist: 4.28.1 caniuse-api: 3.0.0 colord: 2.9.3 - postcss: 8.5.10 + postcss: 8.5.23 postcss-value-parser: 4.2.0 - postcss-convert-values@6.1.0(postcss@8.5.10): + postcss-convert-values@6.1.0(postcss@8.5.23): dependencies: browserslist: 4.28.1 - postcss: 8.5.10 + postcss: 8.5.23 postcss-value-parser: 4.2.0 - postcss-custom-media@11.0.6(postcss@8.5.10): + postcss-custom-media@11.0.6(postcss@8.5.23): dependencies: '@csstools/cascade-layer-name-parser': 2.0.5(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) '@csstools/css-tokenizer': 3.0.4 '@csstools/media-query-list-parser': 4.0.3(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) - postcss: 8.5.10 + postcss: 8.5.23 - postcss-custom-properties@14.0.6(postcss@8.5.10): + postcss-custom-properties@14.0.6(postcss@8.5.23): dependencies: '@csstools/cascade-layer-name-parser': 2.0.5(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) '@csstools/css-tokenizer': 3.0.4 - '@csstools/utilities': 2.0.0(postcss@8.5.10) - postcss: 8.5.10 + '@csstools/utilities': 2.0.0(postcss@8.5.23) + postcss: 8.5.23 postcss-value-parser: 4.2.0 - postcss-custom-selectors@8.0.5(postcss@8.5.10): + postcss-custom-selectors@8.0.5(postcss@8.5.23): dependencies: '@csstools/cascade-layer-name-parser': 2.0.5(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) '@csstools/css-tokenizer': 3.0.4 - postcss: 8.5.10 + postcss: 8.5.23 postcss-selector-parser: 7.1.1 - postcss-dir-pseudo-class@9.0.1(postcss@8.5.10): + postcss-dir-pseudo-class@9.0.1(postcss@8.5.23): dependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-selector-parser: 7.1.1 - postcss-discard-comments@6.0.2(postcss@8.5.10): + postcss-discard-comments@6.0.2(postcss@8.5.23): dependencies: - postcss: 8.5.10 + postcss: 8.5.23 - postcss-discard-duplicates@6.0.3(postcss@8.5.10): + postcss-discard-duplicates@6.0.3(postcss@8.5.23): dependencies: - postcss: 8.5.10 + postcss: 8.5.23 - postcss-discard-empty@6.0.3(postcss@8.5.10): + postcss-discard-empty@6.0.3(postcss@8.5.23): dependencies: - postcss: 8.5.10 + postcss: 8.5.23 - postcss-discard-overridden@6.0.2(postcss@8.5.10): + postcss-discard-overridden@6.0.2(postcss@8.5.23): dependencies: - postcss: 8.5.10 + postcss: 8.5.23 - postcss-discard-unused@6.0.5(postcss@8.5.10): + postcss-discard-unused@6.0.5(postcss@8.5.23): dependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-selector-parser: 6.1.2 - postcss-double-position-gradients@6.0.4(postcss@8.5.10): + postcss-double-position-gradients@6.0.4(postcss@8.5.23): dependencies: - '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.10) - '@csstools/utilities': 2.0.0(postcss@8.5.10) - postcss: 8.5.10 + '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.23) + '@csstools/utilities': 2.0.0(postcss@8.5.23) + postcss: 8.5.23 postcss-value-parser: 4.2.0 - postcss-focus-visible@10.0.1(postcss@8.5.10): + postcss-focus-visible@10.0.1(postcss@8.5.23): dependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-selector-parser: 7.1.1 - postcss-focus-within@9.0.1(postcss@8.5.10): + postcss-focus-within@9.0.1(postcss@8.5.23): dependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-selector-parser: 7.1.1 - postcss-font-variant@5.0.0(postcss@8.5.10): + postcss-font-variant@5.0.0(postcss@8.5.23): dependencies: - postcss: 8.5.10 + postcss: 8.5.23 - postcss-gap-properties@6.0.0(postcss@8.5.10): + postcss-gap-properties@6.0.0(postcss@8.5.23): dependencies: - postcss: 8.5.10 + postcss: 8.5.23 - postcss-image-set-function@7.0.0(postcss@8.5.10): + postcss-image-set-function@7.0.0(postcss@8.5.23): dependencies: - '@csstools/utilities': 2.0.0(postcss@8.5.10) - postcss: 8.5.10 + '@csstools/utilities': 2.0.0(postcss@8.5.23) + postcss: 8.5.23 postcss-value-parser: 4.2.0 - postcss-import@15.1.0(postcss@8.5.10): + postcss-import@15.1.0(postcss@8.5.23): dependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.11 - postcss-js@4.1.0(postcss@8.5.10): + postcss-js@4.1.0(postcss@8.5.23): dependencies: camelcase-css: 2.0.1 - postcss: 8.5.10 + postcss: 8.5.23 - postcss-lab-function@7.0.12(postcss@8.5.10): + postcss-lab-function@7.0.12(postcss@8.5.23): dependencies: '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) '@csstools/css-tokenizer': 3.0.4 - '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.10) - '@csstools/utilities': 2.0.0(postcss@8.5.10) - postcss: 8.5.10 + '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.23) + '@csstools/utilities': 2.0.0(postcss@8.5.23) + postcss: 8.5.23 - postcss-load-config@6.0.1(jiti@2.6.1)(postcss@8.5.10)(tsx@4.21.0)(yaml@2.8.3): + postcss-load-config@6.0.1(jiti@2.6.1)(postcss@8.5.23)(tsx@4.21.0)(yaml@2.8.3): dependencies: lilconfig: 3.1.3 optionalDependencies: jiti: 2.6.1 - postcss: 8.5.10 + postcss: 8.5.23 tsx: 4.21.0 yaml: 2.8.3 - postcss-loader@7.3.4(postcss@8.5.10)(typescript@6.0.3)(webpack@5.105.4(esbuild@0.28.1)): + postcss-loader@7.3.4(postcss@8.5.23)(typescript@6.0.3)(webpack@5.105.4(esbuild@0.28.1)): dependencies: cosmiconfig: 8.3.6(typescript@6.0.3) jiti: 2.6.1 - postcss: 8.5.10 - semver: 7.7.4 + postcss: 8.5.23 + semver: 7.8.0 webpack: 5.105.4(esbuild@0.28.1) transitivePeerDependencies: - typescript - postcss-logical@8.1.0(postcss@8.5.10): + postcss-logical@8.1.0(postcss@8.5.23): dependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-value-parser: 4.2.0 - postcss-merge-idents@6.0.3(postcss@8.5.10): + postcss-merge-idents@6.0.3(postcss@8.5.23): dependencies: - cssnano-utils: 4.0.2(postcss@8.5.10) - postcss: 8.5.10 + cssnano-utils: 4.0.2(postcss@8.5.23) + postcss: 8.5.23 postcss-value-parser: 4.2.0 - postcss-merge-longhand@6.0.5(postcss@8.5.10): + postcss-merge-longhand@6.0.5(postcss@8.5.23): dependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-value-parser: 4.2.0 - stylehacks: 6.1.1(postcss@8.5.10) + stylehacks: 6.1.1(postcss@8.5.23) - postcss-merge-rules@6.1.1(postcss@8.5.10): + postcss-merge-rules@6.1.1(postcss@8.5.23): dependencies: browserslist: 4.28.1 caniuse-api: 3.0.0 - cssnano-utils: 4.0.2(postcss@8.5.10) - postcss: 8.5.10 + cssnano-utils: 4.0.2(postcss@8.5.23) + postcss: 8.5.23 postcss-selector-parser: 6.1.2 - postcss-minify-font-values@6.1.0(postcss@8.5.10): + postcss-minify-font-values@6.1.0(postcss@8.5.23): dependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-value-parser: 4.2.0 - postcss-minify-gradients@6.0.3(postcss@8.5.10): + postcss-minify-gradients@6.0.3(postcss@8.5.23): dependencies: colord: 2.9.3 - cssnano-utils: 4.0.2(postcss@8.5.10) - postcss: 8.5.10 + cssnano-utils: 4.0.2(postcss@8.5.23) + postcss: 8.5.23 postcss-value-parser: 4.2.0 - postcss-minify-params@6.1.0(postcss@8.5.10): + postcss-minify-params@6.1.0(postcss@8.5.23): dependencies: browserslist: 4.28.1 - cssnano-utils: 4.0.2(postcss@8.5.10) - postcss: 8.5.10 + cssnano-utils: 4.0.2(postcss@8.5.23) + postcss: 8.5.23 postcss-value-parser: 4.2.0 - postcss-minify-selectors@6.0.4(postcss@8.5.10): + postcss-minify-selectors@6.0.4(postcss@8.5.23): dependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-selector-parser: 6.1.2 - postcss-modules-extract-imports@3.1.0(postcss@8.5.10): + postcss-modules-extract-imports@3.1.0(postcss@8.5.23): dependencies: - postcss: 8.5.10 + postcss: 8.5.23 - postcss-modules-local-by-default@4.2.0(postcss@8.5.10): + postcss-modules-local-by-default@4.2.0(postcss@8.5.23): dependencies: - icss-utils: 5.1.0(postcss@8.5.10) - postcss: 8.5.10 + icss-utils: 5.1.0(postcss@8.5.23) + postcss: 8.5.23 postcss-selector-parser: 7.1.1 postcss-value-parser: 4.2.0 - postcss-modules-scope@3.2.1(postcss@8.5.10): + postcss-modules-scope@3.2.1(postcss@8.5.23): dependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-selector-parser: 7.1.1 - postcss-modules-values@4.0.0(postcss@8.5.10): + postcss-modules-values@4.0.0(postcss@8.5.23): dependencies: - icss-utils: 5.1.0(postcss@8.5.10) - postcss: 8.5.10 + icss-utils: 5.1.0(postcss@8.5.23) + postcss: 8.5.23 - postcss-nested@6.2.0(postcss@8.5.10): + postcss-nested@6.2.0(postcss@8.5.23): dependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-selector-parser: 6.1.2 - postcss-nesting@13.0.2(postcss@8.5.10): + postcss-nesting@13.0.2(postcss@8.5.23): dependencies: '@csstools/selector-resolve-nested': 3.1.0(postcss-selector-parser@7.1.1) '@csstools/selector-specificity': 5.0.0(postcss-selector-parser@7.1.1) - postcss: 8.5.10 + postcss: 8.5.23 postcss-selector-parser: 7.1.1 - postcss-normalize-charset@6.0.2(postcss@8.5.10): + postcss-normalize-charset@6.0.2(postcss@8.5.23): dependencies: - postcss: 8.5.10 + postcss: 8.5.23 - postcss-normalize-display-values@6.0.2(postcss@8.5.10): + postcss-normalize-display-values@6.0.2(postcss@8.5.23): dependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-value-parser: 4.2.0 - postcss-normalize-positions@6.0.2(postcss@8.5.10): + postcss-normalize-positions@6.0.2(postcss@8.5.23): dependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-value-parser: 4.2.0 - postcss-normalize-repeat-style@6.0.2(postcss@8.5.10): + postcss-normalize-repeat-style@6.0.2(postcss@8.5.23): dependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-value-parser: 4.2.0 - postcss-normalize-string@6.0.2(postcss@8.5.10): + postcss-normalize-string@6.0.2(postcss@8.5.23): dependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-value-parser: 4.2.0 - postcss-normalize-timing-functions@6.0.2(postcss@8.5.10): + postcss-normalize-timing-functions@6.0.2(postcss@8.5.23): dependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-value-parser: 4.2.0 - postcss-normalize-unicode@6.1.0(postcss@8.5.10): + postcss-normalize-unicode@6.1.0(postcss@8.5.23): dependencies: browserslist: 4.28.1 - postcss: 8.5.10 + postcss: 8.5.23 postcss-value-parser: 4.2.0 - postcss-normalize-url@6.0.2(postcss@8.5.10): + postcss-normalize-url@6.0.2(postcss@8.5.23): dependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-value-parser: 4.2.0 - postcss-normalize-whitespace@6.0.2(postcss@8.5.10): + postcss-normalize-whitespace@6.0.2(postcss@8.5.23): dependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-value-parser: 4.2.0 - postcss-opacity-percentage@3.0.0(postcss@8.5.10): + postcss-opacity-percentage@3.0.0(postcss@8.5.23): dependencies: - postcss: 8.5.10 + postcss: 8.5.23 - postcss-ordered-values@6.0.2(postcss@8.5.10): + postcss-ordered-values@6.0.2(postcss@8.5.23): dependencies: - cssnano-utils: 4.0.2(postcss@8.5.10) - postcss: 8.5.10 + cssnano-utils: 4.0.2(postcss@8.5.23) + postcss: 8.5.23 postcss-value-parser: 4.2.0 - postcss-overflow-shorthand@6.0.0(postcss@8.5.10): + postcss-overflow-shorthand@6.0.0(postcss@8.5.23): dependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-value-parser: 4.2.0 - postcss-page-break@3.0.4(postcss@8.5.10): + postcss-page-break@3.0.4(postcss@8.5.23): dependencies: - postcss: 8.5.10 + postcss: 8.5.23 - postcss-place@10.0.0(postcss@8.5.10): + postcss-place@10.0.0(postcss@8.5.23): dependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-value-parser: 4.2.0 - postcss-preset-env@10.4.0(postcss@8.5.10): - dependencies: - '@csstools/postcss-alpha-function': 1.0.1(postcss@8.5.10) - '@csstools/postcss-cascade-layers': 5.0.2(postcss@8.5.10) - '@csstools/postcss-color-function': 4.0.12(postcss@8.5.10) - '@csstools/postcss-color-function-display-p3-linear': 1.0.1(postcss@8.5.10) - '@csstools/postcss-color-mix-function': 3.0.12(postcss@8.5.10) - '@csstools/postcss-color-mix-variadic-function-arguments': 1.0.2(postcss@8.5.10) - '@csstools/postcss-content-alt-text': 2.0.8(postcss@8.5.10) - '@csstools/postcss-contrast-color-function': 2.0.12(postcss@8.5.10) - '@csstools/postcss-exponential-functions': 2.0.9(postcss@8.5.10) - '@csstools/postcss-font-format-keywords': 4.0.0(postcss@8.5.10) - '@csstools/postcss-gamut-mapping': 2.0.11(postcss@8.5.10) - '@csstools/postcss-gradients-interpolation-method': 5.0.12(postcss@8.5.10) - '@csstools/postcss-hwb-function': 4.0.12(postcss@8.5.10) - '@csstools/postcss-ic-unit': 4.0.4(postcss@8.5.10) - '@csstools/postcss-initial': 2.0.1(postcss@8.5.10) - '@csstools/postcss-is-pseudo-class': 5.0.3(postcss@8.5.10) - '@csstools/postcss-light-dark-function': 2.0.11(postcss@8.5.10) - '@csstools/postcss-logical-float-and-clear': 3.0.0(postcss@8.5.10) - '@csstools/postcss-logical-overflow': 2.0.0(postcss@8.5.10) - '@csstools/postcss-logical-overscroll-behavior': 2.0.0(postcss@8.5.10) - '@csstools/postcss-logical-resize': 3.0.0(postcss@8.5.10) - '@csstools/postcss-logical-viewport-units': 3.0.4(postcss@8.5.10) - '@csstools/postcss-media-minmax': 2.0.9(postcss@8.5.10) - '@csstools/postcss-media-queries-aspect-ratio-number-values': 3.0.5(postcss@8.5.10) - '@csstools/postcss-nested-calc': 4.0.0(postcss@8.5.10) - '@csstools/postcss-normalize-display-values': 4.0.0(postcss@8.5.10) - '@csstools/postcss-oklab-function': 4.0.12(postcss@8.5.10) - '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.10) - '@csstools/postcss-random-function': 2.0.1(postcss@8.5.10) - '@csstools/postcss-relative-color-syntax': 3.0.12(postcss@8.5.10) - '@csstools/postcss-scope-pseudo-class': 4.0.1(postcss@8.5.10) - '@csstools/postcss-sign-functions': 1.1.4(postcss@8.5.10) - '@csstools/postcss-stepped-value-functions': 4.0.9(postcss@8.5.10) - '@csstools/postcss-text-decoration-shorthand': 4.0.3(postcss@8.5.10) - '@csstools/postcss-trigonometric-functions': 4.0.9(postcss@8.5.10) - '@csstools/postcss-unset-value': 4.0.0(postcss@8.5.10) - autoprefixer: 10.4.22(postcss@8.5.10) + postcss-preset-env@10.4.0(postcss@8.5.23): + dependencies: + '@csstools/postcss-alpha-function': 1.0.1(postcss@8.5.23) + '@csstools/postcss-cascade-layers': 5.0.2(postcss@8.5.23) + '@csstools/postcss-color-function': 4.0.12(postcss@8.5.23) + '@csstools/postcss-color-function-display-p3-linear': 1.0.1(postcss@8.5.23) + '@csstools/postcss-color-mix-function': 3.0.12(postcss@8.5.23) + '@csstools/postcss-color-mix-variadic-function-arguments': 1.0.2(postcss@8.5.23) + '@csstools/postcss-content-alt-text': 2.0.8(postcss@8.5.23) + '@csstools/postcss-contrast-color-function': 2.0.12(postcss@8.5.23) + '@csstools/postcss-exponential-functions': 2.0.9(postcss@8.5.23) + '@csstools/postcss-font-format-keywords': 4.0.0(postcss@8.5.23) + '@csstools/postcss-gamut-mapping': 2.0.11(postcss@8.5.23) + '@csstools/postcss-gradients-interpolation-method': 5.0.12(postcss@8.5.23) + '@csstools/postcss-hwb-function': 4.0.12(postcss@8.5.23) + '@csstools/postcss-ic-unit': 4.0.4(postcss@8.5.23) + '@csstools/postcss-initial': 2.0.1(postcss@8.5.23) + '@csstools/postcss-is-pseudo-class': 5.0.3(postcss@8.5.23) + '@csstools/postcss-light-dark-function': 2.0.11(postcss@8.5.23) + '@csstools/postcss-logical-float-and-clear': 3.0.0(postcss@8.5.23) + '@csstools/postcss-logical-overflow': 2.0.0(postcss@8.5.23) + '@csstools/postcss-logical-overscroll-behavior': 2.0.0(postcss@8.5.23) + '@csstools/postcss-logical-resize': 3.0.0(postcss@8.5.23) + '@csstools/postcss-logical-viewport-units': 3.0.4(postcss@8.5.23) + '@csstools/postcss-media-minmax': 2.0.9(postcss@8.5.23) + '@csstools/postcss-media-queries-aspect-ratio-number-values': 3.0.5(postcss@8.5.23) + '@csstools/postcss-nested-calc': 4.0.0(postcss@8.5.23) + '@csstools/postcss-normalize-display-values': 4.0.0(postcss@8.5.23) + '@csstools/postcss-oklab-function': 4.0.12(postcss@8.5.23) + '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.23) + '@csstools/postcss-random-function': 2.0.1(postcss@8.5.23) + '@csstools/postcss-relative-color-syntax': 3.0.12(postcss@8.5.23) + '@csstools/postcss-scope-pseudo-class': 4.0.1(postcss@8.5.23) + '@csstools/postcss-sign-functions': 1.1.4(postcss@8.5.23) + '@csstools/postcss-stepped-value-functions': 4.0.9(postcss@8.5.23) + '@csstools/postcss-text-decoration-shorthand': 4.0.3(postcss@8.5.23) + '@csstools/postcss-trigonometric-functions': 4.0.9(postcss@8.5.23) + '@csstools/postcss-unset-value': 4.0.0(postcss@8.5.23) + autoprefixer: 10.4.22(postcss@8.5.23) browserslist: 4.28.1 - css-blank-pseudo: 7.0.1(postcss@8.5.10) - css-has-pseudo: 7.0.3(postcss@8.5.10) - css-prefers-color-scheme: 10.0.0(postcss@8.5.10) + css-blank-pseudo: 7.0.1(postcss@8.5.23) + css-has-pseudo: 7.0.3(postcss@8.5.23) + css-prefers-color-scheme: 10.0.0(postcss@8.5.23) cssdb: 8.4.3 - postcss: 8.5.10 - postcss-attribute-case-insensitive: 7.0.1(postcss@8.5.10) - postcss-clamp: 4.1.0(postcss@8.5.10) - postcss-color-functional-notation: 7.0.12(postcss@8.5.10) - postcss-color-hex-alpha: 10.0.0(postcss@8.5.10) - postcss-color-rebeccapurple: 10.0.0(postcss@8.5.10) - postcss-custom-media: 11.0.6(postcss@8.5.10) - postcss-custom-properties: 14.0.6(postcss@8.5.10) - postcss-custom-selectors: 8.0.5(postcss@8.5.10) - postcss-dir-pseudo-class: 9.0.1(postcss@8.5.10) - postcss-double-position-gradients: 6.0.4(postcss@8.5.10) - postcss-focus-visible: 10.0.1(postcss@8.5.10) - postcss-focus-within: 9.0.1(postcss@8.5.10) - postcss-font-variant: 5.0.0(postcss@8.5.10) - postcss-gap-properties: 6.0.0(postcss@8.5.10) - postcss-image-set-function: 7.0.0(postcss@8.5.10) - postcss-lab-function: 7.0.12(postcss@8.5.10) - postcss-logical: 8.1.0(postcss@8.5.10) - postcss-nesting: 13.0.2(postcss@8.5.10) - postcss-opacity-percentage: 3.0.0(postcss@8.5.10) - postcss-overflow-shorthand: 6.0.0(postcss@8.5.10) - postcss-page-break: 3.0.4(postcss@8.5.10) - postcss-place: 10.0.0(postcss@8.5.10) - postcss-pseudo-class-any-link: 10.0.1(postcss@8.5.10) - postcss-replace-overflow-wrap: 4.0.0(postcss@8.5.10) - postcss-selector-not: 8.0.1(postcss@8.5.10) - - postcss-pseudo-class-any-link@10.0.1(postcss@8.5.10): - dependencies: - postcss: 8.5.10 + postcss: 8.5.23 + postcss-attribute-case-insensitive: 7.0.1(postcss@8.5.23) + postcss-clamp: 4.1.0(postcss@8.5.23) + postcss-color-functional-notation: 7.0.12(postcss@8.5.23) + postcss-color-hex-alpha: 10.0.0(postcss@8.5.23) + postcss-color-rebeccapurple: 10.0.0(postcss@8.5.23) + postcss-custom-media: 11.0.6(postcss@8.5.23) + postcss-custom-properties: 14.0.6(postcss@8.5.23) + postcss-custom-selectors: 8.0.5(postcss@8.5.23) + postcss-dir-pseudo-class: 9.0.1(postcss@8.5.23) + postcss-double-position-gradients: 6.0.4(postcss@8.5.23) + postcss-focus-visible: 10.0.1(postcss@8.5.23) + postcss-focus-within: 9.0.1(postcss@8.5.23) + postcss-font-variant: 5.0.0(postcss@8.5.23) + postcss-gap-properties: 6.0.0(postcss@8.5.23) + postcss-image-set-function: 7.0.0(postcss@8.5.23) + postcss-lab-function: 7.0.12(postcss@8.5.23) + postcss-logical: 8.1.0(postcss@8.5.23) + postcss-nesting: 13.0.2(postcss@8.5.23) + postcss-opacity-percentage: 3.0.0(postcss@8.5.23) + postcss-overflow-shorthand: 6.0.0(postcss@8.5.23) + postcss-page-break: 3.0.4(postcss@8.5.23) + postcss-place: 10.0.0(postcss@8.5.23) + postcss-pseudo-class-any-link: 10.0.1(postcss@8.5.23) + postcss-replace-overflow-wrap: 4.0.0(postcss@8.5.23) + postcss-selector-not: 8.0.1(postcss@8.5.23) + + postcss-pseudo-class-any-link@10.0.1(postcss@8.5.23): + dependencies: + postcss: 8.5.23 postcss-selector-parser: 7.1.1 - postcss-reduce-idents@6.0.3(postcss@8.5.10): + postcss-reduce-idents@6.0.3(postcss@8.5.23): dependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-value-parser: 4.2.0 - postcss-reduce-initial@6.1.0(postcss@8.5.10): + postcss-reduce-initial@6.1.0(postcss@8.5.23): dependencies: browserslist: 4.28.1 caniuse-api: 3.0.0 - postcss: 8.5.10 + postcss: 8.5.23 - postcss-reduce-transforms@6.0.2(postcss@8.5.10): + postcss-reduce-transforms@6.0.2(postcss@8.5.23): dependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-value-parser: 4.2.0 - postcss-replace-overflow-wrap@4.0.0(postcss@8.5.10): + postcss-replace-overflow-wrap@4.0.0(postcss@8.5.23): dependencies: - postcss: 8.5.10 + postcss: 8.5.23 - postcss-selector-not@8.0.1(postcss@8.5.10): + postcss-selector-not@8.0.1(postcss@8.5.23): dependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-selector-parser: 7.1.1 postcss-selector-parser@6.1.2: @@ -25481,31 +25623,31 @@ snapshots: cssesc: 3.0.0 util-deprecate: 1.0.2 - postcss-sort-media-queries@5.2.0(postcss@8.5.10): + postcss-sort-media-queries@5.2.0(postcss@8.5.23): dependencies: - postcss: 8.5.10 + postcss: 8.5.23 sort-css-media-queries: 2.2.0 - postcss-svgo@6.0.3(postcss@8.5.10): + postcss-svgo@6.0.3(postcss@8.5.23): dependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-value-parser: 4.2.0 - svgo: 3.3.3 + svgo: 3.3.4 - postcss-unique-selectors@6.0.4(postcss@8.5.10): + postcss-unique-selectors@6.0.4(postcss@8.5.23): dependencies: - postcss: 8.5.10 + postcss: 8.5.23 postcss-selector-parser: 6.1.2 postcss-value-parser@4.2.0: {} - postcss-zindex@6.0.2(postcss@8.5.10): + postcss-zindex@6.0.2(postcss@8.5.23): dependencies: - postcss: 8.5.10 + postcss: 8.5.23 - postcss@8.5.10: + postcss@8.5.23: dependencies: - nanoid: 3.3.11 + nanoid: 3.3.16 picocolors: 1.1.1 source-map-js: 1.2.1 @@ -25643,11 +25785,18 @@ snapshots: range-parser@1.2.1: {} + raw-body@2.5.3: + dependencies: + bytes: 3.1.2 + http-errors: 2.0.1 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + raw-body@3.0.2: dependencies: bytes: 3.1.2 http-errors: 2.0.1 - iconv-lite: 0.7.0 + iconv-lite: 0.7.3 unpipe: 1.0.0 rc-resize-observer@1.4.3(react-dom@19.2.0(react@19.2.0))(react@19.2.0): @@ -25737,11 +25886,11 @@ snapshots: tiny-invariant: 1.3.3 tiny-warning: 1.0.3 - react-router-dom@7.15.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0): + react-router-dom@7.18.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0): dependencies: react: 19.2.0 react-dom: 19.2.0(react@19.2.0) - react-router: 7.15.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + react-router: 7.18.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) react-router@5.3.4(react@19.2.0): dependencies: @@ -25756,7 +25905,7 @@ snapshots: tiny-invariant: 1.3.3 tiny-warning: 1.0.3 - react-router@7.15.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0): + react-router@7.18.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0): dependencies: cookie: 1.1.1 react: 19.2.0 @@ -26167,7 +26316,7 @@ snapshots: dependencies: escalade: 3.2.0 picocolors: 1.1.1 - postcss: 8.5.10 + postcss: 8.5.23 strip-json-comments: 3.1.1 run-applescript@7.1.0: {} @@ -26258,7 +26407,7 @@ snapshots: semver-diff@4.0.0: dependencies: - semver: 7.7.4 + semver: 7.8.0 semver@5.7.2: {} @@ -26266,12 +26415,12 @@ snapshots: semver@7.7.2: {} - semver@7.7.3: {} - semver@7.7.4: {} semver@7.8.0: {} + semver@7.8.5: {} + send@0.19.0: dependencies: debug: 2.6.9 @@ -26512,7 +26661,7 @@ snapshots: dependencies: faye-websocket: 0.11.4 uuid: 8.3.2 - websocket-driver: 0.7.4 + websocket-driver: 0.7.5 sort-css-media-queries@2.2.0: {} @@ -26773,10 +26922,10 @@ snapshots: dependencies: inline-style-parser: 0.2.7 - stylehacks@6.1.1(postcss@8.5.10): + stylehacks@6.1.1(postcss@8.5.23): dependencies: browserslist: 4.28.1 - postcss: 8.5.10 + postcss: 8.5.23 postcss-selector-parser: 6.1.2 stylis@4.3.6: {} @@ -26788,7 +26937,7 @@ snapshots: lines-and-columns: 1.2.4 mz: 2.7.0 pirates: 4.0.7 - tinyglobby: 0.2.15 + tinyglobby: 0.2.17 ts-interface-checker: 0.1.13 supports-color@5.5.0: @@ -26807,7 +26956,7 @@ snapshots: svg-parser@2.0.4: {} - svgo@3.3.3: + svgo@3.3.4: dependencies: commander: 7.2.0 css-select: 5.2.2 @@ -26855,11 +27004,11 @@ snapshots: normalize-path: 3.0.0 object-hash: 3.0.0 picocolors: 1.1.1 - postcss: 8.5.10 - postcss-import: 15.1.0(postcss@8.5.10) - postcss-js: 4.1.0(postcss@8.5.10) - postcss-load-config: 6.0.1(jiti@2.6.1)(postcss@8.5.10)(tsx@4.21.0)(yaml@2.8.3) - postcss-nested: 6.2.0(postcss@8.5.10) + postcss: 8.5.23 + postcss-import: 15.1.0(postcss@8.5.23) + postcss-js: 4.1.0(postcss@8.5.23) + postcss-load-config: 6.0.1(jiti@2.6.1)(postcss@8.5.23)(tsx@4.21.0)(yaml@2.8.3) + postcss-nested: 6.2.0(postcss@8.5.23) postcss-selector-parser: 6.1.2 resolve: 1.22.11 sucrase: 3.35.1 @@ -26974,11 +27123,6 @@ snapshots: tinyexec@1.0.4: {} - tinyglobby@0.2.15: - dependencies: - fdir: 6.5.0(picomatch@4.0.4) - picomatch: 4.0.4 - tinyglobby@0.2.17: dependencies: fdir: 6.5.0(picomatch@4.0.4) @@ -27292,7 +27436,7 @@ snapshots: is-yarn-global: 0.4.1 latest-version: 7.0.0 pupa: 3.3.0 - semver: 7.7.4 + semver: 7.8.0 semver-diff: 4.0.0 xdg-basedir: 5.1.0 @@ -27411,7 +27555,7 @@ snapshots: dependencies: lightningcss: 1.32.0 picomatch: 4.0.4 - postcss: 8.5.10 + postcss: 8.5.23 rolldown: 1.0.3 tinyglobby: 0.2.17 optionalDependencies: @@ -27428,7 +27572,7 @@ snapshots: dependencies: lightningcss: 1.32.0 picomatch: 4.0.4 - postcss: 8.5.10 + postcss: 8.5.23 rolldown: 1.0.3 tinyglobby: 0.2.17 optionalDependencies: @@ -27441,16 +27585,16 @@ snapshots: tsx: 4.21.0 yaml: 2.8.3 - vitest@4.1.8(@opentelemetry/api@1.9.0)(@types/node@22.19.15)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@22.19.15)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)): + vitest@4.1.10(@opentelemetry/api@1.9.0)(@types/node@22.19.15)(@vitest/coverage-istanbul@4.1.10)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@22.19.15)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)): dependencies: - '@vitest/expect': 4.1.8 - '@vitest/mocker': 4.1.8(vite@8.0.16(@types/node@22.19.15)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) - '@vitest/pretty-format': 4.1.8 - '@vitest/runner': 4.1.8 - '@vitest/snapshot': 4.1.8 - '@vitest/spy': 4.1.8 - '@vitest/utils': 4.1.8 - es-module-lexer: 2.0.0 + '@vitest/expect': 4.1.10 + '@vitest/mocker': 4.1.10(vite@8.0.16(@types/node@22.19.15)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + '@vitest/pretty-format': 4.1.10 + '@vitest/runner': 4.1.10 + '@vitest/snapshot': 4.1.10 + '@vitest/spy': 4.1.10 + '@vitest/utils': 4.1.10 + es-module-lexer: 2.3.0 expect-type: 1.3.0 magic-string: 0.30.21 obug: 2.1.1 @@ -27466,23 +27610,54 @@ snapshots: optionalDependencies: '@opentelemetry/api': 1.9.0 '@types/node': 22.19.15 - '@vitest/browser-playwright': 4.1.8(playwright@1.59.0)(vite@8.0.16(@types/node@22.19.15)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.8) - '@vitest/coverage-istanbul': 4.1.8(supports-color@8.1.1)(vitest@4.1.8) + '@vitest/coverage-istanbul': 4.1.10(supports-color@8.1.1)(vitest@4.1.10) + happy-dom: 20.10.1 + jsdom: 26.1.0 + transitivePeerDependencies: + - msw + + vitest@4.1.10(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-istanbul@4.1.10(supports-color@8.1.1)(vitest@4.1.10))(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)): + dependencies: + '@vitest/expect': 4.1.10 + '@vitest/mocker': 4.1.10(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + '@vitest/pretty-format': 4.1.10 + '@vitest/runner': 4.1.10 + '@vitest/snapshot': 4.1.10 + '@vitest/spy': 4.1.10 + '@vitest/utils': 4.1.10 + es-module-lexer: 2.3.0 + expect-type: 1.3.0 + magic-string: 0.30.21 + obug: 2.1.1 + pathe: 2.0.3 + picomatch: 4.0.4 + std-env: 4.0.0 + tinybench: 2.9.0 + tinyexec: 1.0.4 + tinyglobby: 0.2.17 + tinyrainbow: 3.1.0 + vite: 8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + why-is-node-running: 2.3.0 + optionalDependencies: + '@opentelemetry/api': 1.9.0 + '@types/node': 24.10.1 + '@vitest/browser-playwright': 4.1.10(playwright@1.59.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.10) + '@vitest/coverage-istanbul': 4.1.10(supports-color@8.1.1)(vitest@4.1.10) happy-dom: 20.10.1 jsdom: 26.1.0 transitivePeerDependencies: - msw - vitest@4.1.8(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)): + vitest@4.1.10(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-istanbul@4.1.10)(happy-dom@20.10.1)(jsdom@26.1.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)): dependencies: - '@vitest/expect': 4.1.8 - '@vitest/mocker': 4.1.8(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) - '@vitest/pretty-format': 4.1.8 - '@vitest/runner': 4.1.8 - '@vitest/snapshot': 4.1.8 - '@vitest/spy': 4.1.8 - '@vitest/utils': 4.1.8 - es-module-lexer: 2.0.0 + '@vitest/expect': 4.1.10 + '@vitest/mocker': 4.1.10(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + '@vitest/pretty-format': 4.1.10 + '@vitest/runner': 4.1.10 + '@vitest/snapshot': 4.1.10 + '@vitest/spy': 4.1.10 + '@vitest/utils': 4.1.10 + es-module-lexer: 2.3.0 expect-type: 1.3.0 magic-string: 0.30.21 obug: 2.1.1 @@ -27498,8 +27673,8 @@ snapshots: optionalDependencies: '@opentelemetry/api': 1.9.0 '@types/node': 24.10.1 - '@vitest/browser-playwright': 4.1.8(playwright@1.59.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.8) - '@vitest/coverage-istanbul': 4.1.8(vitest@4.1.8) + '@vitest/browser-playwright': 4.1.10(playwright@1.59.0)(vite@8.0.16(@types/node@24.10.1)(esbuild@0.28.1)(jiti@2.6.1)(less@4.4.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.10) + '@vitest/coverage-istanbul': 4.1.10(vitest@4.1.10) happy-dom: 20.10.1 jsdom: 26.1.0 transitivePeerDependencies: @@ -27633,7 +27808,7 @@ snapshots: browserslist: 4.28.1 chrome-trace-event: 1.0.4 enhanced-resolve: 5.20.0 - es-module-lexer: 2.0.0 + es-module-lexer: 2.3.0 eslint-scope: 5.1.1 events: 3.3.0 glob-to-regexp: 0.4.1 @@ -27661,7 +27836,7 @@ snapshots: optionalDependencies: webpack: 5.105.4(esbuild@0.28.1) - websocket-driver@0.7.4: + websocket-driver@0.7.5: dependencies: http-parser-js: 0.5.10 safe-buffer: 5.2.1 @@ -27868,6 +28043,16 @@ snapshots: y18n: 5.0.8 yargs-parser: 21.1.1 + yargs@17.7.3: + dependencies: + cliui: 8.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + yauzl@3.2.1: dependencies: buffer-crc32: 0.2.13 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index d72187af9..3a4b6c3d1 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -19,15 +19,15 @@ catalog: '@cucumber/messages': 32.3.1 '@cucumber/node': 0.4.0 '@cucumber/pretty-formatter': 1.0.1 - '@serenity-js/assertions': 3.43.0 - '@serenity-js/console-reporter': 3.43.0 - '@serenity-js/core': 3.43.0 - '@serenity-js/cucumber': 3.43.0 - '@serenity-js/serenity-bdd': 3.43.0 + '@serenity-js/assertions': 3.44.1 + '@serenity-js/console-reporter': 3.44.1 + '@serenity-js/core': 3.44.1 + '@serenity-js/cucumber': 3.44.1 + '@serenity-js/serenity-bdd': 3.44.1 '@types/node': ^22.19.5 - '@vitest/browser': 4.1.8 - '@vitest/browser-playwright': 4.1.8 - '@vitest/coverage-istanbul': 4.1.8 + '@vitest/browser': 4.1.10 + '@vitest/browser-playwright': 4.1.10 + '@vitest/coverage-istanbul': 4.1.10 antd: 6.3.5 archunit: ^2.1.63 esbuild: 0.28.1 @@ -35,8 +35,8 @@ catalog: jsdom: ^26.1.0 mongodb: 6.18.0 mongodb-memory-server: ^10.1.4 - mongoose: 8.17.0 - react-router-dom: 7.15.1 + mongoose: 8.24.1 + react-router-dom: 7.18.1 react: ^19.1.1 react-dom: ^19.1.1 '@ant-design/icons': ^6.0.2 @@ -52,7 +52,7 @@ catalog: typescript: 6.0.3 "@typescript/native-preview": 7.0.0-dev.20260428.1 vite: 8.0.16 - vitest: 4.1.8 + vitest: 4.1.10 vite-plugin-node-polyfills: ^0.28.0 auditConfig: @@ -63,6 +63,7 @@ auditConfig: - GHSA-wpg9-53fq-2r8h - GHSA-q7rr-3cgh-j5r3 - GHSA-869p-cjfg-cm3x # jws@4.0.0: Improperly Verifies HMAC Signature (transitive from azurite) + - GHSA-qwww-vcr4-c8h2 # React Router RSC-only advisory; this repository uses BrowserRouter/MemoryRouter and does not use RSC APIs. allowBuilds: '@apollo/protobufjs': true @@ -75,10 +76,10 @@ allowBuilds: snyk: true overrides: - '@vitest/browser': 4.1.8 - '@vitest/browser-playwright': 4.1.8 + '@vitest/browser': 4.1.10 + '@vitest/browser-playwright': 4.1.10 happy-dom: 20.10.1 - axios: 1.16.0 + axios: 1.18.1 body-parser: 2.3.0 esbuild: 'catalog:' follow-redirects: ^1.16.0 @@ -86,14 +87,16 @@ overrides: jiti: 2.6.1 rollup: ^4.59.0 '@ant-design/pro-layout>path-to-regexp': ^8.4.0 - brace-expansion: 5.0.7 + 'brace-expansion@1': 2.1.2 + 'brace-expansion@5': 5.0.8 'diff@4.0.2': 4.0.4 '@protobufjs/codegen': 2.0.5 '@protobufjs/utf8': 1.1.1 + 'protobufjs@7.5.4': 7.6.5 'serve-handler>minimatch': 3.1.5 'serialize-javascript@6.0.2': 7.0.5 'serialize-javascript@7.0.4': 7.0.5 - svgo: ^3.3.3 + svgo: ^3.3.4 'yaml@2.8.2': 2.8.3 'yauzl@3.2.0': 3.2.1 qs: 6.15.2 @@ -106,36 +109,43 @@ overrides: node-forge@<1.3.2: '>=1.3.2' picomatch: ^4.0.4 webpack: ^5.105.4 - webpack-dev-server: ^5.2.6 + webpack-dev-server: 5.2.6 express-rate-limit: 8.5.1 '@azure/ms-rest-js>uuid': '^3.4.0' 'azurite>uuid': '^3.4.0' 'ws@8.20.0': 8.21.0 playwright-core: 1.59.0 playwright: 1.59.0 - postcss: 8.5.10 + postcss: 8.5.23 protobufjs: 7.6.5 ip-address: ^10.1.1 - fast-uri: ^4.0.1 + fast-uri: ^4.1.1 + websocket-driver: 0.7.5 '@babel/plugin-transform-modules-systemjs': 7.29.4 '@babel/core': ^7.29.6 js-yaml: 4.3.0 'js-yaml@3.14.2': 3.15.0 + 'js-yaml@4.1.1': 4.3.0 + 'js-yaml@4.2.0': 4.3.0 + 'body-parser@1.20.5': 1.20.6 + 'body-parser@2.2.2': 2.3.0 'shell-quote@<1.8.4': 1.8.4 '@opentelemetry/exporter-prometheus@0.57.2': 0.217.0 '@opentelemetry/core@2.7.1': 2.8.0 + '@opentelemetry/propagator-jaeger': 2.9.0 + adm-zip: 0.6.0 ws: 8.21.0 shell-quote: 1.9.0 '@grpc/grpc-js': '>=1.14.4' form-data: ^4.0.6 'webpack-dev-server>http-proxy-middleware': 3.0.7 joi: ^17.13.4 - brace-expansion@2: 2.0.3 + brace-expansion@2: 2.1.2 dottie: 2.0.7 http-proxy-middleware: 3.0.7 - immutable: 3.8.3 + immutable: 5.1.9 launch-editor: ^2.14.1 - 'react-router-dom@7.15.0>react-router': 7.15.1 + morgan: 1.11.0 sequelize: 6.37.8 smol-toml: 1.6.1 '@azure/ms-rest-js>tough-cookie': 4.1.3 @@ -151,5 +161,4 @@ patchedDependencies: '@azure/functions@4.11.0': patches/@azure__functions@4.11.0.patch minimumReleaseAgeExclude: - - fast-uri@3.1.3 || 4.0.1 - body-parser@1.20.6 diff --git a/readme.md b/readme.md index 570439ab0..d15f9a91c 100644 --- a/readme.md +++ b/readme.md @@ -147,6 +147,8 @@ pnpm run build ``` + + Mock OIDC server The local mock OpenID Connect provider used for UI development is configured per-portal via JSON files placed in the UI app directories. @@ -215,6 +217,8 @@ First-time setup: configure TLS trust for portless local domains. See ADR 0028 ## Turborepo Optimization + + This monorepo uses [Turborepo](https://turbo.build/) for optimized builds and testing: - **Selective Builds**: Only affected packages are built/tested in CI