diff --git a/apps/ui-community/.storybook/vitest.setup.ts b/apps/ui-community/.storybook/vitest.setup.ts deleted file mode 100644 index 0fe94de5d..000000000 --- a/apps/ui-community/.storybook/vitest.setup.ts +++ /dev/null @@ -1,8 +0,0 @@ -import '@testing-library/jest-dom'; - -import * as a11yAddonAnnotations from '@storybook/addon-a11y/preview'; -import { setProjectAnnotations } from '@storybook/react-vite'; -import * as projectAnnotations from './preview.tsx'; - -// Apply project annotations so Storybook stories render under Vitest. -setProjectAnnotations([a11yAddonAnnotations, projectAnnotations]); diff --git a/apps/ui-community/package.json b/apps/ui-community/package.json index ef92d3a1c..279d601d9 100644 --- a/apps/ui-community/package.json +++ b/apps/ui-community/package.json @@ -45,7 +45,6 @@ "@storybook/addon-vitest": "catalog:", "@storybook/react": "10.4.2", "@storybook/react-vite": "catalog:", - "@testing-library/jest-dom": "^6.6.4", "@types/react": "^19.1.8", "@types/react-dom": "^19.1.6", "@vitejs/plugin-react": "^6.0.1", diff --git a/apps/ui-staff/src/App.tsx b/apps/ui-staff/src/App.tsx index e26ad3e83..0541f62e4 100644 --- a/apps/ui-staff/src/App.tsx +++ b/apps/ui-staff/src/App.tsx @@ -21,9 +21,17 @@ function StaffRoutes() { const auth = useContext(StaffAuthContext); const perms = auth?.permissions; const canManageCommunities = perms?.canManageCommunities === true; + const canManageStaffRolesAndPermissions = perms?.canManageStaffRolesAndPermissions === true; const canManageUsers = perms?.canManageUsers === true; + const canAssignStaffRoles = perms?.canAssignStaffRoles === true; + const canViewStaffUsers = perms?.canViewStaffUsers === true; const canManageFinance = perms?.canManageFinance === true; const canManageTechAdmin = perms?.canManageTechAdmin === true; + const canViewRoles = perms?.canViewRoles === true; + const canAddRole = perms?.canAddRole === true; + const canEditRole = perms?.canEditRole === true; + const canRemoveRole = perms?.canRemoveRole === true; + const canAccessUserManagement = canManageUsers || canAssignStaffRoles || canViewStaffUsers || canManageStaffRolesAndPermissions || canViewRoles || canAddRole || canEditRole || canRemoveRole || canManageTechAdmin; let defaultStaffRoute = '/unauthorized'; if (canManageTechAdmin) { @@ -32,7 +40,7 @@ function StaffRoutes() { defaultStaffRoute = '/staff/finance'; } else if (canManageCommunities) { defaultStaffRoute = '/staff/community-management'; - } else if (canManageUsers) { + } else if (canAccessUserManagement) { defaultStaffRoute = '/staff/user-management'; } @@ -53,7 +61,7 @@ function StaffRoutes() { element={} /> )} - {canManageUsers && ( + {(canAccessUserManagement || canManageFinance) && ( } @@ -134,7 +142,7 @@ export default function App() { } function StaffSection({ identity }: { identity: Parameters[0]['value'] }) { - const { permissions, user, loading } = useStaffPermissions(); + const { permissions, enterpriseAppRole, user, loading } = useStaffPermissions(); if (loading) { return ( @@ -145,7 +153,7 @@ function StaffSection({ identity }: { identity: Parameters + ); diff --git a/apps/ui-staff/src/components/ui/molecules/auth-landing/index.tsx b/apps/ui-staff/src/components/ui/molecules/auth-landing/index.tsx index 41fc0aa53..65bbd20fd 100644 --- a/apps/ui-staff/src/components/ui/molecules/auth-landing/index.tsx +++ b/apps/ui-staff/src/components/ui/molecules/auth-landing/index.tsx @@ -29,7 +29,16 @@ export const AuthLanding: React.FC = () => { targetRoute = '/staff/finance'; } else if (permissions?.canManageCommunities) { targetRoute = '/staff/community-management'; - } else if (permissions?.canManageUsers) { + } else if ( + permissions?.canManageUsers || + permissions?.canAssignStaffRoles || + permissions?.canViewStaffUsers || + permissions?.canManageStaffRolesAndPermissions || + permissions?.canViewRoles || + permissions?.canAddRole || + permissions?.canEditRole || + permissions?.canRemoveRole + ) { targetRoute = '/staff/user-management'; } diff --git a/apps/ui-staff/src/hooks/use-staff-permissions.ts b/apps/ui-staff/src/hooks/use-staff-permissions.ts index 0c5f4e3d6..3d42e9ed0 100644 --- a/apps/ui-staff/src/hooks/use-staff-permissions.ts +++ b/apps/ui-staff/src/hooks/use-staff-permissions.ts @@ -12,12 +12,22 @@ const CURRENT_STAFF_USER_QUERY = gql` role { id roleName + enterpriseAppRole permissions { communityPermissions { canManageCommunities + canManageStaffRolesAndPermissions } userPermissions { canManageUsers + canAssignStaffRoles + canViewStaffUsers + } + staffRolePermissions { + canViewRoles + canAddRole + canEditRole + canRemoveRole } financePermissions { canManageFinance @@ -33,9 +43,16 @@ const CURRENT_STAFF_USER_QUERY = gql` interface StaffPermissions { canManageCommunities: boolean; + canManageStaffRolesAndPermissions: boolean; canManageUsers: boolean; + canAssignStaffRoles: boolean; + canViewStaffUsers: boolean; canManageFinance: boolean; canManageTechAdmin: boolean; + canViewRoles: boolean; + canAddRole: boolean; + canEditRole: boolean; + canRemoveRole: boolean; } interface StaffUserQueryResult { @@ -49,9 +66,11 @@ interface StaffUserQueryResult { role?: { id: string; roleName: string; + enterpriseAppRole: string; permissions: { - communityPermissions: { canManageCommunities: boolean }; - userPermissions: { canManageUsers: boolean }; + communityPermissions: { canManageCommunities: boolean; canManageStaffRolesAndPermissions: boolean }; + userPermissions: { canManageUsers: boolean; canAssignStaffRoles: boolean; canViewStaffUsers: boolean }; + staffRolePermissions: { canViewRoles: boolean; canAddRole: boolean; canEditRole: boolean; canRemoveRole: boolean }; financePermissions: { canManageFinance: boolean }; techAdminPermissions: { canManageTechAdmin: boolean }; }; @@ -61,6 +80,7 @@ interface StaffUserQueryResult { export const useStaffPermissions = (): { permissions: StaffPermissions | undefined; + enterpriseAppRole: string | undefined; user: { id?: string; displayName?: string; firstName?: string; lastName?: string; email?: string } | undefined; loading: boolean; error: Error | undefined; @@ -78,14 +98,22 @@ export const useStaffPermissions = (): { const permissions: StaffPermissions | undefined = rolePermissions ? { canManageCommunities: rolePermissions.communityPermissions.canManageCommunities || isTechAdmin, + canManageStaffRolesAndPermissions: rolePermissions.communityPermissions.canManageStaffRolesAndPermissions || isTechAdmin, canManageUsers: rolePermissions.userPermissions.canManageUsers || isTechAdmin, + canAssignStaffRoles: rolePermissions.userPermissions.canAssignStaffRoles || isTechAdmin, + canViewStaffUsers: rolePermissions.userPermissions.canViewStaffUsers || rolePermissions.userPermissions.canManageUsers || isTechAdmin, canManageFinance: rolePermissions.financePermissions.canManageFinance || isTechAdmin, canManageTechAdmin: isTechAdmin, + canViewRoles: rolePermissions.staffRolePermissions.canViewRoles || rolePermissions.communityPermissions.canManageStaffRolesAndPermissions || isTechAdmin, + canAddRole: rolePermissions.staffRolePermissions.canAddRole || rolePermissions.communityPermissions.canManageStaffRolesAndPermissions || isTechAdmin, + canEditRole: rolePermissions.staffRolePermissions.canEditRole || rolePermissions.communityPermissions.canManageStaffRolesAndPermissions || isTechAdmin, + canRemoveRole: rolePermissions.staffRolePermissions.canRemoveRole || rolePermissions.communityPermissions.canManageStaffRolesAndPermissions || isTechAdmin, } : undefined; return { permissions, + enterpriseAppRole: data?.currentStaffUserAndCreateIfNotExists?.role?.enterpriseAppRole, user: currentUser ? { id: currentUser.id, diff --git a/codegen.yml b/codegen.yml index 95e9f2dc3..09958a8fe 100644 --- a/codegen.yml +++ b/codegen.yml @@ -155,6 +155,20 @@ generates: - typescript-operations - typed-document-node + './packages/ocom/ui-staff-route-user-management/src/generated.tsx': + documents: + - './packages/ocom/ui-staff-route-user-management/src/**/**.graphql' + config: + withHooks: true + withHOC: false + withComponent: false + useTypeImports: true + enumsAsTypes: true + plugins: + - typescript + - typescript-operations + - typed-document-node + # Cellix core base type defs (static array for rolldown bundling) './packages/cellix/graphql-core/src/schema/base-type-defs.generated.ts': plugins: diff --git a/packages/cellix/config-vitest/src/configs/storybook.config.ts b/packages/cellix/config-vitest/src/configs/storybook.config.ts index c0a6f81ec..f08bc1ef7 100644 --- a/packages/cellix/config-vitest/src/configs/storybook.config.ts +++ b/packages/cellix/config-vitest/src/configs/storybook.config.ts @@ -6,7 +6,6 @@ import { baseConfig, createDefaultTypecheckConfig, defaultTestIncludePatterns } export type StorybookVitestConfigOptions = { storybookDirRelativeToPackage?: string; // default: '.storybook' - setupFiles?: string[]; // default: ['.storybook/vitest.setup.ts'] browsers?: { browser: 'chromium' | 'firefox' | 'webkit' }[]; // default: [{ browser: 'chromium' }] additionalCoverageExclude?: string[]; }; @@ -21,7 +20,6 @@ function getBrowserApiPort(pkgDirname: string): number { export function createStorybookVitestConfig(pkgDirname: string, opts: StorybookVitestConfigOptions = {}): ViteUserConfig { const STORYBOOK_DIR = opts.storybookDirRelativeToPackage ?? '.storybook'; - const setupFiles = opts.setupFiles ?? ['.storybook/vitest.setup.ts']; const instances = opts.browsers ?? [{ browser: 'chromium' }]; const browserApiPort = getBrowserApiPort(pkgDirname); @@ -61,7 +59,6 @@ export function createStorybookVitestConfig(pkgDirname: string, opts: StorybookV provider: playwright(), instances, }, - setupFiles, }, }, ], diff --git a/packages/cellix/ui-core/.storybook/vitest.setup.ts b/packages/cellix/ui-core/.storybook/vitest.setup.ts deleted file mode 100644 index edd3e869f..000000000 --- a/packages/cellix/ui-core/.storybook/vitest.setup.ts +++ /dev/null @@ -1,5 +0,0 @@ -import * as a11yAddonAnnotations from '@storybook/addon-a11y/preview'; -import { setProjectAnnotations } from '@storybook/react-vite'; -import * as projectAnnotations from './preview.tsx'; - -setProjectAnnotations([a11yAddonAnnotations, projectAnnotations]); diff --git a/packages/cellix/ui-core/package.json b/packages/cellix/ui-core/package.json index 2a820431e..f6ecced89 100644 --- a/packages/cellix/ui-core/package.json +++ b/packages/cellix/ui-core/package.json @@ -45,11 +45,11 @@ "@storybook/react": "10.4.2", "@types/react": "^19.1.16", "@types/react-dom": "^19.1.6", + "@testing-library/react": "^16.2.0", "@vitest/browser": "catalog:", "@vitest/browser-playwright": "catalog:", "@vitest/coverage-istanbul": "catalog:", "jsdom": "catalog:", - "@testing-library/react": "^16.3.0", "react-oidc-context": "^3.3.0", "react-router-dom": "catalog:", "rimraf": "catalog:", 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 c05505539..89476a587 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 @@ -1,6 +1,7 @@ import { Given, Then, When } from '@cucumber/cucumber'; import { actors } from '@ocom-verification/verification-shared/test-data'; import { actorCalled, notes } from '@serenity-js/core'; +import { resolveActorName } from '../../../shared/support/domain-test-helpers.ts'; type StaffBusinessRole = 'finance' | 'tech admin' | 'service line owner' | 'case manager'; @@ -33,10 +34,19 @@ const roleForActor = (actorName: string): StaffBusinessRole => actorRoles.get(ac const resolveFinanceWorkspaceRoute = (role: StaffBusinessRole): string => (role === 'finance' || role === 'tech admin' ? '/staff/finance' : '/unauthorized'); +Given('{word} is an authenticated staff user', async (actorName: string) => { + lastActorName = actorName; + const actor = actorCalled(actorName); + actorRoles.set(actorName, 'case manager'); + await actor.attemptsTo(notes().set('targetRoute', '')); +}); + Given('{word} is an authenticated {string} staff user', async (actorName: string, roleName: string) => { lastActorName = actorName; - actorRoles.set(actorName, normalizeRole(roleName)); - await actorCalled(actorName).attemptsTo(notes().set('targetRoute', '')); + const role = normalizeRole(roleName); + const actor = actorCalled(actorName); + actorRoles.set(actorName, role); + await actor.attemptsTo(notes().set('targetRoute', '')); }); When('{word} enters the staff operations workspace', async (actorName: string) => { @@ -52,11 +62,10 @@ When('{word} attempts to work in the finance workspace', async (actorName: strin }); 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 actor = actorCalled(resolveActorName(actorName, lastActorName)); + const actualRoute = await actor.answer(notes().get('targetRoute')); - if (targetRoute !== expectedRoute) { - throw new Error(`Expected route to be "${expectedRoute}", but got "${targetRoute}"`); + if (actualRoute !== expectedRoute) { + throw new Error(`Expected route "${expectedRoute}", but got "${actualRoute}"`); } }); diff --git a/packages/ocom-verification/e2e-tests/src/shared/support/servers/test-staff-vite-server.ts b/packages/ocom-verification/e2e-tests/src/shared/support/servers/test-staff-vite-server.ts index 6f0b3e005..1ee0955ab 100644 --- a/packages/ocom-verification/e2e-tests/src/shared/support/servers/test-staff-vite-server.ts +++ b/packages/ocom-verification/e2e-tests/src/shared/support/servers/test-staff-vite-server.ts @@ -15,7 +15,6 @@ export class TestStaffViteServer extends PortlessServer { protected get serverName() { return 'TestStaffViteServer'; } - protected get spawnArgs() { return ['run', 'dev']; } diff --git a/packages/ocom-verification/verification-shared/src/settings/local-settings.ts b/packages/ocom-verification/verification-shared/src/settings/local-settings.ts index d09bacaf3..cfe0c330f 100644 --- a/packages/ocom-verification/verification-shared/src/settings/local-settings.ts +++ b/packages/ocom-verification/verification-shared/src/settings/local-settings.ts @@ -5,55 +5,55 @@ const workspaceRoot = findWorkspaceRoot(); const apiSettingsPath = resolveWorkspacePath(workspaceRoot, 'apps/api/local.settings.json'); const uiCommunityEnvPath = resolveWorkspacePath(workspaceRoot, 'apps/ui-community/.env'); const uiStaffEnvPath = resolveWorkspacePath(workspaceRoot, 'apps/ui-staff/.env'); - + const apiValues = readJsonSettings(apiSettingsPath); const uiCommunityValues = readDotEnv(uiCommunityEnvPath); const uiStaffValues = readDotEnv(uiStaffEnvPath); - + /** - * Defaults for E2E/acceptance test settings when local.settings.json is absent - * (e.g. CI pipelines). All values are non-secret mock/localhost references used - * exclusively by the test harness — no real credentials are involved. - */ +* Defaults for E2E/acceptance test settings when local.settings.json is absent +* (e.g. CI pipelines). All values are non-secret mock/localhost references used +* exclusively by the test harness — no real credentials are involved. +*/ const ciDefaults = { - COSMOSDB_CONNECTION_STRING: '', - COSMOSDB_DBNAME: 'owner-community', - COSMOSDB_PORT: '50000', - NODE_ENV: 'development', - ACCOUNT_PORTAL_OIDC_AUDIENCE: 'mock-client', - ACCOUNT_PORTAL_OIDC_ISSUER: 'https://mock-auth.ownercommunity.localhost:1355/community', - ACCOUNT_PORTAL_OIDC_ENDPOINT: 'https://mock-auth.ownercommunity.localhost:1355/community/.well-known/jwks.json', + COSMOSDB_CONNECTION_STRING: '', + COSMOSDB_DBNAME: 'owner-community', + COSMOSDB_PORT: '50000', + NODE_ENV: 'development', + ACCOUNT_PORTAL_OIDC_AUDIENCE: 'mock-client', + ACCOUNT_PORTAL_OIDC_ISSUER: 'https://mock-auth.ownercommunity.localhost:1355/community', + ACCOUNT_PORTAL_OIDC_ENDPOINT: 'https://mock-auth.ownercommunity.localhost:1355/community/.well-known/jwks.json', } as const; - + function setting(key: keyof typeof ciDefaults): string { - return readSetting(apiValues, key, ciDefaults[key]) ?? ciDefaults[key]; + return readSetting(apiValues, key, ciDefaults[key]) ?? ciDefaults[key]; } - + export const apiSettings = { - nodeEnv: setting('NODE_ENV'), - isDevelopment: setting('NODE_ENV') === 'development', - - cosmosDbConnectionString: setting('COSMOSDB_CONNECTION_STRING'), - cosmosDbName: setting('COSMOSDB_DBNAME'), - cosmosDbPort: Number(setting('COSMOSDB_PORT')), - - accountPortalOidcIssuer: setting('ACCOUNT_PORTAL_OIDC_ISSUER'), - accountPortalOidcEndpoint: setting('ACCOUNT_PORTAL_OIDC_ENDPOINT'), - accountPortalOidcAudience: setting('ACCOUNT_PORTAL_OIDC_AUDIENCE'), - - apiDir: path.dirname(apiSettingsPath), - oauth2MockDir: path.join(workspaceRoot, 'apps', 'server-oauth2-mock'), - uiCommunityDir: path.dirname(uiCommunityEnvPath), - uiStaffDir: path.dirname(uiStaffEnvPath), + nodeEnv: setting('NODE_ENV'), + isDevelopment: setting('NODE_ENV') === 'development', + + cosmosDbConnectionString: setting('COSMOSDB_CONNECTION_STRING'), + cosmosDbName: setting('COSMOSDB_DBNAME'), + cosmosDbPort: Number(setting('COSMOSDB_PORT')), + + accountPortalOidcIssuer: setting('ACCOUNT_PORTAL_OIDC_ISSUER'), + accountPortalOidcEndpoint: setting('ACCOUNT_PORTAL_OIDC_ENDPOINT'), + accountPortalOidcAudience: setting('ACCOUNT_PORTAL_OIDC_AUDIENCE'), + + apiDir: path.dirname(apiSettingsPath), + oauth2MockDir: path.join(workspaceRoot, 'apps', 'server-oauth2-mock'), + uiCommunityDir: path.dirname(uiCommunityEnvPath), + uiStaffDir: path.dirname(uiStaffEnvPath), } as const; export const uiCommunitySettings = { - baseUrl: requireSetting(uiCommunityValues, 'VITE_APP_UI_COMMUNITY_BASE_URL', 'VITE_APP_UI_COMMUNITY_BASE_URL is required in apps/ui-community/.env'), - - graphqlEndpoint: requireSetting(uiCommunityValues, 'VITE_COMMON_API_ENDPOINT', 'VITE_COMMON_API_ENDPOINT is required in apps/ui-community/.env'), + baseUrl: requireSetting(uiCommunityValues, 'VITE_APP_UI_COMMUNITY_BASE_URL', 'VITE_APP_UI_COMMUNITY_BASE_URL is required in apps/ui-community/.env'), + + graphqlEndpoint: requireSetting(uiCommunityValues, 'VITE_COMMON_API_ENDPOINT', 'VITE_COMMON_API_ENDPOINT is required in apps/ui-community/.env'), } as const; - + export const uiStaffSettings = { - baseUrl: readSetting(uiStaffValues, 'VITE_APP_UI_STAFF_BASE_URL', 'https://staff.ownercommunity.localhost:1355') ?? 'https://staff.ownercommunity.localhost:1355', - graphqlEndpoint: requireSetting(uiStaffValues, 'VITE_COMMON_API_ENDPOINT', 'VITE_COMMON_API_ENDPOINT is required in apps/ui-staff/.env'), -} as const; + baseUrl: readSetting(uiStaffValues, 'VITE_BASE_URL', 'https://staff.ownercommunity.localhost:1355') ?? 'https://staff.ownercommunity.localhost:1355', + graphqlEndpoint: requireSetting(uiStaffValues, 'VITE_COMMON_API_ENDPOINT', 'VITE_COMMON_API_ENDPOINT is required in apps/ui-staff/.env'), +} as const; \ No newline at end of file diff --git a/packages/ocom-verification/verification-shared/src/settings/timeout-settings.ts b/packages/ocom-verification/verification-shared/src/settings/timeout-settings.ts index 760283794..58fa6a99f 100644 --- a/packages/ocom-verification/verification-shared/src/settings/timeout-settings.ts +++ b/packages/ocom-verification/verification-shared/src/settings/timeout-settings.ts @@ -23,7 +23,7 @@ export const timeouts = { healthProbeInterval: 500, /** UI initialization timeout (30 seconds) */ - uiInit: 30_000, + uiInit: 60_000, /** UI cleanup timeout (10 seconds) */ uiCleanup: 10_000, diff --git a/packages/ocom/application-services/src/contexts/user/staff-role/apply-permissions.ts b/packages/ocom/application-services/src/contexts/user/staff-role/apply-permissions.ts new file mode 100644 index 000000000..7254065ee --- /dev/null +++ b/packages/ocom/application-services/src/contexts/user/staff-role/apply-permissions.ts @@ -0,0 +1,108 @@ +import type { Domain } from '@ocom/domain'; + +export interface StaffRoleCommandCommunityPermissions { + canManageCommunities?: boolean; + canManageStaffRolesAndPermissions?: boolean; + canManageAllCommunities?: boolean; + canDeleteCommunities?: boolean; + canChangeCommunityOwner?: boolean; + canReIndexSearchCollections?: boolean; +} + +export interface StaffRoleCommandUserPermissions { + canManageUsers?: boolean; + canAssignStaffRoles?: boolean; + canViewStaffUsers?: boolean; +} + +export interface StaffRoleCommandRolePermissions { + canViewRoles?: boolean; + canAddRole?: boolean; + canEditRole?: boolean; + canRemoveRole?: boolean; +} + +export interface StaffRoleCommandFinancePermissions { + canManageFinance?: boolean; + canViewGLBatchSummaries?: boolean; + canViewFinanceConfigs?: boolean; + canCreateFinanceConfigs?: boolean; +} + +export interface StaffRoleCommandTechAdminPermissions { + canManageTechAdmin?: boolean; + canViewDatabaseExplorer?: boolean; + canViewBlobExplorer?: boolean; + canViewQueueDashboard?: boolean; + canSendQueueMessages?: boolean; +} + +export interface StaffRoleCommandPermissions { + community?: StaffRoleCommandCommunityPermissions; + user?: StaffRoleCommandUserPermissions; + staffRole?: StaffRoleCommandRolePermissions; + finance?: StaffRoleCommandFinancePermissions; + techAdmin?: StaffRoleCommandTechAdminPermissions; +} + +export const applyCommunityPermissions = ( + staffRole: Domain.Contexts.User.StaffRole.StaffRole, + permissions?: StaffRoleCommandCommunityPermissions, +) => { + if (!permissions) return; + const { communityPermissions } = staffRole.permissions; + if (permissions.canManageCommunities !== undefined) { communityPermissions.canManageCommunities = permissions.canManageCommunities; } + if (permissions.canManageStaffRolesAndPermissions !== undefined) { communityPermissions.canManageStaffRolesAndPermissions = permissions.canManageStaffRolesAndPermissions; } + if (permissions.canManageAllCommunities !== undefined) { communityPermissions.canManageAllCommunities = permissions.canManageAllCommunities; } + if (permissions.canDeleteCommunities !== undefined) { communityPermissions.canDeleteCommunities = permissions.canDeleteCommunities; } + if (permissions.canChangeCommunityOwner !== undefined) { communityPermissions.canChangeCommunityOwner = permissions.canChangeCommunityOwner; } + if (permissions.canReIndexSearchCollections !== undefined) { communityPermissions.canReIndexSearchCollections = permissions.canReIndexSearchCollections; } +}; + +export const applyUserPermissions = ( + staffRole: Domain.Contexts.User.StaffRole.StaffRole, + permissions?: StaffRoleCommandUserPermissions, +) => { + if (!permissions) return; + const { userPermissions } = staffRole.permissions; + if (permissions.canManageUsers !== undefined) { userPermissions.canManageUsers = permissions.canManageUsers; } + if (permissions.canAssignStaffRoles !== undefined) { userPermissions.canAssignStaffRoles = permissions.canAssignStaffRoles; } + if (permissions.canViewStaffUsers !== undefined) { userPermissions.canViewStaffUsers = permissions.canViewStaffUsers; } +}; + +export const applyRolePermissions = ( + staffRole: Domain.Contexts.User.StaffRole.StaffRole, + permissions?: StaffRoleCommandRolePermissions, +) => { + if (!permissions) return; + const { staffRolePermissions } = staffRole.permissions; + if (permissions.canViewRoles !== undefined) { staffRolePermissions.canViewRoles = permissions.canViewRoles; } + if (permissions.canAddRole !== undefined) { staffRolePermissions.canAddRole = permissions.canAddRole; } + if (permissions.canEditRole !== undefined) { staffRolePermissions.canEditRole = permissions.canEditRole; } + if (permissions.canRemoveRole !== undefined) { staffRolePermissions.canRemoveRole = permissions.canRemoveRole; } +}; + +export const applyFinancePermissions = ( + staffRole: Domain.Contexts.User.StaffRole.StaffRole, + permissions?: StaffRoleCommandFinancePermissions, +) => { + if (!permissions) return; + const { financePermissions } = staffRole.permissions; + if (permissions.canManageFinance !== undefined) { financePermissions.canManageFinance = permissions.canManageFinance; } + if (permissions.canViewGLBatchSummaries !== undefined) { financePermissions.canViewGLBatchSummaries = permissions.canViewGLBatchSummaries; } + if (permissions.canViewFinanceConfigs !== undefined) { financePermissions.canViewFinanceConfigs = permissions.canViewFinanceConfigs; } + if (permissions.canCreateFinanceConfigs !== undefined) { financePermissions.canCreateFinanceConfigs = permissions.canCreateFinanceConfigs; } +}; + +export const applyTechAdminPermissions = ( + staffRole: Domain.Contexts.User.StaffRole.StaffRole, + permissions?: StaffRoleCommandTechAdminPermissions, +) => { + if (!permissions) return; + const { techAdminPermissions } = staffRole.permissions; + if (permissions.canManageTechAdmin !== undefined) { techAdminPermissions.canManageTechAdmin = permissions.canManageTechAdmin; } + if (permissions.canViewDatabaseExplorer !== undefined) { techAdminPermissions.canViewDatabaseExplorer = permissions.canViewDatabaseExplorer; } + if (permissions.canViewBlobExplorer !== undefined) { techAdminPermissions.canViewBlobExplorer = permissions.canViewBlobExplorer; } + if (permissions.canViewQueueDashboard !== undefined) { techAdminPermissions.canViewQueueDashboard = permissions.canViewQueueDashboard; } + if (permissions.canSendQueueMessages !== undefined) { techAdminPermissions.canSendQueueMessages = permissions.canSendQueueMessages; } +}; diff --git a/packages/ocom/application-services/src/contexts/user/staff-role/create.test.ts b/packages/ocom/application-services/src/contexts/user/staff-role/create.test.ts index b1d016f7b..6762a6797 100644 --- a/packages/ocom/application-services/src/contexts/user/staff-role/create.test.ts +++ b/packages/ocom/application-services/src/contexts/user/staff-role/create.test.ts @@ -4,188 +4,610 @@ import { describeFeature, loadFeature } from '@amiceli/vitest-cucumber'; import type { Domain } from '@ocom/domain'; import type { DataSources } from '@ocom/persistence'; import { expect, vi } from 'vitest'; -import { create, type StaffRoleCreateCommandPermissions } from './create.ts'; +import { create, type StaffRoleCreateCommand, type StaffRoleCreateCommandPermissions } from './create.ts'; const test = { for: describeFeature }; const __dirname = path.dirname(fileURLToPath(import.meta.url)); const feature = await loadFeature(path.resolve(__dirname, 'features/create.feature')); -function makeMockStaffRole(overrides: Partial = {}) { +// ─── Helpers ───────────────────────────────────────────────────────────────── + +type MockPermissions = { + communityPermissions: Record; + userPermissions: Record; + staffRolePermissions?: Record; + financePermissions?: Record; + techAdminPermissions?: Record; + propertyPermissions?: Record; + servicePermissions?: Record; + serviceTicketPermissions?: Record; + violationTicketPermissions?: Record; +}; + +interface MockStaffRoleInstance { + id: string; + roleName: string; + enterpriseAppRole: string; + isDefault: boolean; + roleType: null; + permissions: MockPermissions; + createdAt: Date; + updatedAt: Date; + schemaVersion: string; +} + +function makeMockStaffRoleInstance(roleName: string): MockStaffRoleInstance { + const communityPermissions: Record = { + canManageCommunities: false, + canManageStaffRolesAndPermissions: false, + canManageAllCommunities: false, + canDeleteCommunities: false, + canChangeCommunityOwner: false, + canReIndexSearchCollections: false, + }; + const userPermissions: Record = { + canManageUsers: false, + canAssignStaffRoles: false, + canViewStaffUsers: false, + }; + const staffRolePermissions: Record = { + canViewRoles: false, + canAddRole: false, + canEditRole: false, + canRemoveRole: false, + }; + const financePermissions: Record = { + canManageFinance: false, + canViewGLBatchSummaries: false, + canViewFinanceConfigs: false, + canCreateFinanceConfigs: false, + }; + const techAdminPermissions: Record = { + canManageTechAdmin: false, + canViewDatabaseExplorer: false, + canViewBlobExplorer: false, + canViewQueueDashboard: false, + canSendQueueMessages: false, + }; + const propertyPermissions: Record = { + canManageProperties: false, + canEditOwnProperty: false, + }; + const servicePermissions: Record = { + canManageServices: false, + }; + const serviceTicketPermissions: Record = { + canCreateTickets: false, + canManageTickets: false, + canAssignTickets: false, + canWorkOnTickets: false, + }; + const violationTicketPermissions: Record = { + canCreateTickets: false, + canManageTickets: false, + canAssignTickets: false, + canWorkOnTickets: false, + }; + return { - id: '507f1f77bcf86cd799439011', - roleName: 'Test Role', + id: `id-${roleName}`, + roleName, + enterpriseAppRole: '', isDefault: false, + roleType: null, permissions: { - communityPermissions: { - canManageStaffRolesAndPermissions: false, - canManageAllCommunities: false, - canDeleteCommunities: false, - canChangeCommunityOwner: false, - canReIndexSearchCollections: false, - }, + communityPermissions, + userPermissions, + staffRolePermissions, + financePermissions, + techAdminPermissions, + propertyPermissions, + servicePermissions, + serviceTicketPermissions, + violationTicketPermissions, }, - roleType: null, createdAt: new Date(), updatedAt: new Date(), schemaVersion: '1.0', - ...overrides, - } as Domain.Contexts.User.StaffRole.StaffRoleEntityReference; + } as unknown as MockStaffRoleInstance; } -function makeMockRepo(overrides: Partial> = {}) { - return { - getByRoleName: vi.fn(), - getNewInstance: vi.fn(), - save: vi.fn(), - ...overrides, - } as unknown as Domain.Contexts.User.StaffRole.StaffRoleRepository; -} +function makeDataSources(overrides: { + existingRole?: Domain.Contexts.User.StaffRole.StaffRoleEntityReference | null; + unexpectedError?: Error; + newRoleInstance?: MockStaffRoleInstance; + explicitUndefinedSave?: boolean; +}): DataSources & { _repo: unknown } { + const { existingRole, unexpectedError, newRoleInstance, explicitUndefinedSave } = overrides; + const instance = newRoleInstance ?? makeMockStaffRoleInstance('Test Role'); + const savedRole = explicitUndefinedSave ? undefined : (instance as unknown as Domain.Contexts.User.StaffRole.StaffRoleEntityReference); -test.for(feature, ({ Scenario, BeforeEachScenario }) => { - let dataSources: DataSources; - let createStaffRole: (command: { roleName: string; isDefault?: boolean; permissions?: StaffRoleCreateCommandPermissions }) => Promise; + const repo = { + getByRoleName: unexpectedError ? vi.fn().mockRejectedValue(unexpectedError) : existingRole ? vi.fn().mockResolvedValue(existingRole) : vi.fn().mockRejectedValue(new Error('not found')), + getNewInstance: vi.fn().mockResolvedValue(instance), + save: vi.fn().mockResolvedValue(savedRole), + } as unknown as Domain.Contexts.User.StaffRole.StaffRoleRepository; - BeforeEachScenario(() => { - dataSources = { - domainDataSource: { - User: { - StaffRole: { - StaffRoleUnitOfWork: { - withScopedTransaction: vi.fn(), - }, + return { + domainDataSource: { + User: { + StaffRole: { + StaffRoleUnitOfWork: { + withScopedTransaction: vi.fn().mockImplementation(async (cb: (r: typeof repo) => Promise) => { + await cb(repo); + }), }, }, }, - } as unknown as DataSources; + }, + _repo: repo, + } as unknown as DataSources & { _repo: unknown }; +} + +// ─── Tests ──────────────────────────────────────────────────────────────────── - createStaffRole = create(dataSources); +test.for(feature, ({ Scenario, BeforeEachScenario }) => { + let dataSources: DataSources & { _repo?: unknown }; + let command: StaffRoleCreateCommand; + let result: Domain.Contexts.User.StaffRole.StaffRoleEntityReference | undefined; + let thrownError: unknown; + let roleInstance: MockStaffRoleInstance; + + BeforeEachScenario(() => { + result = undefined; + thrownError = undefined; + roleInstance = makeMockStaffRoleInstance('Test Role'); + command = { roleName: 'Test Role' }; }); - Scenario('Creating a staff role successfully', ({ Given, When, Then }) => { - let result: Domain.Contexts.User.StaffRole.StaffRoleEntityReference; + // ─── Create with no permissions ─────────────────────────────────────────── - Given('a staff role with name "Test Role" does not exist', () => { - // Mock will be set up in When step + Scenario('Successfully creates a staff role with no permissions', ({ Given, When, Then, And }) => { + Given('a staff role with name "Test Role" does not exist in the repository', () => { + roleInstance = makeMockStaffRoleInstance('Test Role'); + dataSources = makeDataSources({ newRoleInstance: roleInstance }); + command = { roleName: 'Test Role' }; }); - When('I create a staff role with name "Test Role", isDefault false, and no permissions', async () => { - const mockRepo = makeMockRepo({ - getByRoleName: vi.fn().mockRejectedValue(new Error('Not found')), - getNewInstance: vi.fn().mockResolvedValue(makeMockStaffRole({ roleName: 'Test Role', isDefault: false })), - save: vi.fn().mockResolvedValue(makeMockStaffRole({ roleName: 'Test Role', isDefault: false })), - }); - - vi.mocked(dataSources.domainDataSource.User.StaffRole.StaffRoleUnitOfWork.withScopedTransaction).mockImplementation(async (callback) => { - await callback(mockRepo); - }); + When('I call create with roleName "Test Role" and no permissions', async () => { + try { + result = await create(dataSources)(command); + } catch (e) { + thrownError = e; + } + }); - result = await createStaffRole({ roleName: 'Test Role', isDefault: false }); + Then('the new staff role should be saved', () => { + const repo = dataSources._repo as { save: ReturnType }; + expect(repo.save).toHaveBeenCalled(); }); - Then('it should return a staff role entity reference with name "Test Role" and isDefault false', () => { + And('the result should have roleName "Test Role"', () => { + expect(thrownError).toBeUndefined(); expect(result).toBeDefined(); - expect(result.roleName).toBe('Test Role'); - expect(result.isDefault).toBe(false); + expect(result?.roleName).toBe('Test Role'); }); }); - Scenario('Creating a staff role with permissions', ({ Given, When, Then }) => { - let result: Domain.Contexts.User.StaffRole.StaffRoleEntityReference; + // ─── Create with enterpriseAppRole ──────────────────────────────────────── + + Scenario('Successfully creates a staff role with an enterpriseAppRole', ({ Given, When, Then }) => { + Given('a staff role with name "Test Role" does not exist in the repository', () => { + roleInstance = makeMockStaffRoleInstance('Test Role'); + dataSources = makeDataSources({ newRoleInstance: roleInstance }); + command = { roleName: 'Test Role', enterpriseAppRole: 'Staff.TestRole' }; + }); - Given('a staff role with name "Admin Role" does not exist', () => { - // Mock will be set up in When step + When('I call create with roleName "Test Role" and enterpriseAppRole "Staff.TestRole"', async () => { + try { + result = await create(dataSources)(command); + } catch (e) { + thrownError = e; + } }); - When('I create a staff role with name "Admin Role", isDefault true, and permissions', async () => { - const mockRepo = makeMockRepo({ - getByRoleName: vi.fn().mockRejectedValue(new Error('Not found')), - getNewInstance: vi.fn().mockResolvedValue(makeMockStaffRole({ roleName: 'Admin Role', isDefault: true })), - save: vi.fn().mockResolvedValue(makeMockStaffRole({ roleName: 'Admin Role', isDefault: true })), - }); + Then('the new staff role should be saved with enterpriseAppRole "Staff.TestRole"', () => { + expect(thrownError).toBeUndefined(); + expect(roleInstance.enterpriseAppRole).toBe('Staff.TestRole'); + }); + }); - vi.mocked(dataSources.domainDataSource.User.StaffRole.StaffRoleUnitOfWork.withScopedTransaction).mockImplementation(async (callback) => { - await callback(mockRepo); - }); + // ─── Create with community permissions ─────────────────────────────────── - result = await createStaffRole({ + Scenario('Successfully creates a staff role with community permissions', ({ Given, When, Then, And }) => { + Given('a staff role with name "Admin Role" does not exist in the repository', () => { + roleInstance = makeMockStaffRoleInstance('Admin Role'); + dataSources = makeDataSources({ newRoleInstance: roleInstance }); + command = { roleName: 'Admin Role', - isDefault: true, + permissions: { community: { canManageCommunities: true } } satisfies StaffRoleCreateCommandPermissions, + }; + }); + + When('I call create with roleName "Admin Role" and community permissions canManageCommunities true', async () => { + try { + result = await create(dataSources)(command); + } catch (e) { + thrownError = e; + } + }); + + Then('the new staff role should be saved', () => { + const repo = dataSources._repo as { save: ReturnType }; + expect(repo.save).toHaveBeenCalled(); + }); + + And('the community permission canManageCommunities should be true', () => { + expect(thrownError).toBeUndefined(); + expect(roleInstance.permissions.communityPermissions.canManageCommunities).toBe(true); + }); + }); + + // ─── Create with user permissions ──────────────────────────────────────── + + Scenario('Successfully creates a staff role with user permissions', ({ Given, When, Then, And }) => { + Given('a staff role with name "Manager Role" does not exist in the repository', () => { + roleInstance = makeMockStaffRoleInstance('Manager Role'); + dataSources = makeDataSources({ newRoleInstance: roleInstance }); + command = { + roleName: 'Manager Role', + permissions: { user: { canManageUsers: true } } satisfies StaffRoleCreateCommandPermissions, + }; + }); + + When('I call create with roleName "Manager Role" and user permissions canManageUsers true', async () => { + try { + result = await create(dataSources)(command); + } catch (e) { + thrownError = e; + } + }); + + Then('the new staff role should be saved', () => { + const repo = dataSources._repo as { save: ReturnType }; + expect(repo.save).toHaveBeenCalled(); + }); + + And('the user permission canManageUsers should be true', () => { + expect(thrownError).toBeUndefined(); + expect(roleInstance.permissions.userPermissions.canManageUsers).toBe(true); + }); + }); + + // ─── Duplicate name ─────────────────────────────────────────────────────── + + Scenario('Throws when a staff role with the same name already exists', ({ Given, When, Then }) => { + Given('a staff role with name "Duplicate Role" already exists in the repository', () => { + const existing = makeMockStaffRoleInstance('Duplicate Role') as unknown as Domain.Contexts.User.StaffRole.StaffRoleEntityReference; + dataSources = makeDataSources({ existingRole: existing }); + command = { roleName: 'Duplicate Role' }; + }); + + When('I call create with roleName "Duplicate Role"', async () => { + try { + result = await create(dataSources)(command); + } catch (e) { + thrownError = e; + } + }); + + Then('it should throw an error with message containing "Duplicate Role"', () => { + expect(thrownError).toBeDefined(); + expect((thrownError as Error).message).toContain('Duplicate Role'); + }); + }); + + // ─── Unexpected repository error propagation ────────────────────────────── + + Scenario('Propagates unexpected repository errors from getByRoleName', ({ Given, When, Then }) => { + Given('the repository throws an unexpected error when checking for "Error Role"', () => { + const unexpectedError = new Error('Database connection lost'); + dataSources = makeDataSources({ unexpectedError }); + command = { roleName: 'Error Role' }; + }); + + When('I call create with roleName "Error Role"', async () => { + try { + result = await create(dataSources)(command); + } catch (e) { + thrownError = e; + } + }); + + Then('it should throw the unexpected error', () => { + expect(thrownError).toBeDefined(); + expect((thrownError as Error).message).toBe('Database connection lost'); + }); + }); + + // ─── Save fails ─────────────────────────────────────────────────────────── + + Scenario('Throws when repository fails to save the new role', ({ Given, When, Then, And }) => { + Given('a staff role with name "Test Role" does not exist in the repository', () => { + roleInstance = makeMockStaffRoleInstance('Test Role'); + }); + + And('saving the staff role returns undefined', () => { + dataSources = makeDataSources({ newRoleInstance: roleInstance, explicitUndefinedSave: true }); + command = { roleName: 'Test Role' }; + }); + + When('I call create with roleName "Test Role" and no permissions', async () => { + try { + result = await create(dataSources)(command); + } catch (e) { + thrownError = e; + } + }); + + Then('it should throw an error with message "Unable to create staff role"', () => { + expect(thrownError).toBeDefined(); + expect((thrownError as Error).message).toBe('Unable to create staff role'); + }); + }); + + // ─── enterpriseAppRole default ──────────────────────────────────────────── + + Scenario('enterpriseAppRole is not set when not provided in the command', ({ Given, When, Then }) => { + Given('a staff role with name "Test Role" does not exist in the repository', () => { + roleInstance = makeMockStaffRoleInstance('Test Role'); + dataSources = makeDataSources({ newRoleInstance: roleInstance }); + command = { roleName: 'Test Role' }; + }); + When('I call create with roleName "Test Role" and no permissions', async () => { + try { + result = await create(dataSources)(command); + } catch (e) { + thrownError = e; + } + }); + Then('the enterpriseAppRole on the saved instance should remain empty', () => { + expect(thrownError).toBeUndefined(); + expect(roleInstance.enterpriseAppRole).toBe(''); + }); + }); + + // ─── NotFoundError by name ──────────────────────────────────────────────── + + Scenario('Not-found detected via error name NotFoundError allows creation to proceed', ({ Given, When, Then }) => { + Given('the repository raises a NotFoundError by name when checking for "New Role"', () => { + roleInstance = makeMockStaffRoleInstance('New Role'); + const notFoundByName = Object.assign(new Error('some message'), { name: 'NotFoundError' }); + const repo = { + getByRoleName: vi.fn().mockRejectedValue(notFoundByName), + getNewInstance: vi.fn().mockResolvedValue(roleInstance), + save: vi.fn().mockResolvedValue(roleInstance as unknown as Domain.Contexts.User.StaffRole.StaffRoleEntityReference), + }; + dataSources = { + domainDataSource: { + User: { + StaffRole: { + StaffRoleUnitOfWork: { + withScopedTransaction: vi.fn().mockImplementation(async (cb: (r: typeof repo) => Promise) => { + await cb(repo); + }), + }, + }, + }, + }, + _repo: repo, + } as unknown as DataSources & { _repo: unknown }; + command = { roleName: 'New Role' }; + }); + When('I call create with roleName "New Role" and no permissions', async () => { + try { + result = await create(dataSources)(command); + } catch (e) { + thrownError = e; + } + }); + Then('the new staff role should be saved', () => { + expect(thrownError).toBeUndefined(); + expect(result).toBeDefined(); + }); + }); + + // ─── All community permissions ──────────────────────────────────────────── + + Scenario('Successfully creates a staff role with all community permissions set', ({ Given, When, Then }) => { + Given('a staff role with name "Full Community Role" does not exist in the repository', () => { + roleInstance = makeMockStaffRoleInstance('Full Community Role'); + dataSources = makeDataSources({ newRoleInstance: roleInstance }); + command = { + roleName: 'Full Community Role', permissions: { community: { + canManageCommunities: true, canManageStaffRolesAndPermissions: true, canManageAllCommunities: true, - canDeleteCommunities: false, - canChangeCommunityOwner: false, + canDeleteCommunities: true, + canChangeCommunityOwner: true, canReIndexSearchCollections: true, }, }, - }); + }; }); - - Then('it should return a staff role entity reference with name "Admin Role" and isDefault true', () => { - expect(result).toBeDefined(); - expect(result.roleName).toBe('Admin Role'); - expect(result.isDefault).toBe(true); + When('I call create with roleName "Full Community Role" and all community permissions true', async () => { + try { + result = await create(dataSources)(command); + } catch (e) { + thrownError = e; + } + }); + Then('all community permissions should be true on the saved instance', () => { + expect(thrownError).toBeUndefined(); + const cp = roleInstance.permissions.communityPermissions; + expect(cp.canManageCommunities).toBe(true); + expect(cp.canManageStaffRolesAndPermissions).toBe(true); + expect(cp.canManageAllCommunities).toBe(true); + expect(cp.canDeleteCommunities).toBe(true); + expect(cp.canChangeCommunityOwner).toBe(true); + expect(cp.canReIndexSearchCollections).toBe(true); }); }); - Scenario('Creating a staff role with duplicate name', ({ Given, When, Then }) => { - let error: Error; + // ─── No-op when sub-objects absent ─────────────────────────────────────── - Given('a staff role with name "Test Role" already exists', () => { - // Mock will be set up in When step + Scenario('Omitting community permissions sub-object leaves community permissions unchanged', ({ Given, When, Then }) => { + Given('a staff role with name "Test Role" does not exist in the repository', () => { + roleInstance = makeMockStaffRoleInstance('Test Role'); + dataSources = makeDataSources({ newRoleInstance: roleInstance }); + command = { + roleName: 'Test Role', + permissions: { user: { canManageUsers: true } }, + }; + }); + When('I call create with roleName "Test Role" and only user permissions', async () => { + try { + result = await create(dataSources)(command); + } catch (e) { + thrownError = e; + } }); + Then('all community permissions should remain false', () => { + expect(thrownError).toBeUndefined(); + const cp = roleInstance.permissions.communityPermissions; + for (const key of Object.keys(cp)) { + expect(cp[key], key).toBe(false); + } + }); + }); - When('I create a staff role with name "Test Role", isDefault false, and no permissions', async () => { - const mockRepo = makeMockRepo({ - getByRoleName: vi.fn().mockResolvedValue(makeMockStaffRole({ roleName: 'Test Role' })), - }); + Scenario('Omitting user permissions sub-object leaves user permissions unchanged', ({ Given, When, Then }) => { + Given('a staff role with name "Test Role" does not exist in the repository', () => { + roleInstance = makeMockStaffRoleInstance('Test Role'); + dataSources = makeDataSources({ newRoleInstance: roleInstance }); + command = { + roleName: 'Test Role', + permissions: { community: { canManageCommunities: true } }, + }; + }); + When('I call create with roleName "Test Role" and only community permissions', async () => { + try { + result = await create(dataSources)(command); + } catch (e) { + thrownError = e; + } + }); + Then('all user permissions should remain false', () => { + expect(thrownError).toBeUndefined(); + const up = roleInstance.permissions.userPermissions; + for (const key of Object.keys(up)) { + expect(up[key], key).toBe(false); + } + }); + }); - vi.mocked(dataSources.domainDataSource.User.StaffRole.StaffRoleUnitOfWork.withScopedTransaction).mockImplementation(async (callback) => { - await callback(mockRepo); - }); + // ─── getNewInstance called with roleName ────────────────────────────────── + Scenario('getNewInstance is called with the provided role name', ({ Given, When, Then }) => { + Given('a staff role with name "Named Role" does not exist in the repository', () => { + roleInstance = makeMockStaffRoleInstance('Named Role'); + dataSources = makeDataSources({ newRoleInstance: roleInstance }); + command = { roleName: 'Named Role' }; + }); + When('I call create with roleName "Named Role" and no permissions', async () => { try { - await createStaffRole({ roleName: 'Test Role', isDefault: false }); - } catch (err) { - error = err as Error; + result = await create(dataSources)(command); + } catch (e) { + thrownError = e; } }); - - Then('it should throw an error "Staff role with name Test Role already exists"', () => { - expect(error).toBeDefined(); - expect(error.message).toBe('Staff role with name Test Role already exists'); + Then('getNewInstance should have been called with "Named Role"', () => { + expect(thrownError).toBeUndefined(); + const repo = dataSources._repo as { getNewInstance: ReturnType }; + expect(repo.getNewInstance).toHaveBeenCalledWith('Named Role'); }); }); - Scenario('Creating a staff role when save fails', ({ Given, When, Then }) => { - let error: Error; + // ─── Additional permission scenarios added ─────────────────────────────── - Given('a staff role with name "Test Role" does not exist', () => { - // Mock will be set up in When step + Scenario('Successfully creates a staff role with staff-role permissions', ({ Given, When, Then }) => { + Given('a staff role with name "Role Manager" does not exist in the repository', () => { + roleInstance = makeMockStaffRoleInstance('Role Manager'); + dataSources = makeDataSources({ newRoleInstance: roleInstance }); + command = { + roleName: 'Role Manager', + permissions: { staffRole: { canViewRoles: true, canAddRole: true, canEditRole: true, canRemoveRole: true } }, + }; }); + When('I call create with roleName "Role Manager" and staffRole permissions canViewRoles true, canAddRole true, canEditRole true, canRemoveRole true', async () => { + try { + result = await create(dataSources)(command); + } catch (e) { + thrownError = e; + } + }); + Then('the staffRole permissions should be set on the saved instance', () => { + expect(thrownError).toBeUndefined(); + const sp = roleInstance.permissions.staffRolePermissions; + expect(sp).toBeDefined(); + // The create pipeline applies into staffRolePermissions adapter; check known keys + expect(sp?.canViewRoles).toBe(true); + expect(sp?.canAddRole).toBe(true); + expect(sp?.canEditRole).toBe(true); + expect(sp?.canRemoveRole).toBe(true); + }); + }); - When('I create a staff role but save fails', async () => { - const mockRepo = makeMockRepo({ - getByRoleName: vi.fn().mockRejectedValue(new Error('Not found')), - getNewInstance: vi.fn().mockResolvedValue(makeMockStaffRole({ roleName: 'Test Role', isDefault: false })), - save: vi.fn().mockResolvedValue(undefined), // Simulate save failure - }); - - vi.mocked(dataSources.domainDataSource.User.StaffRole.StaffRoleUnitOfWork.withScopedTransaction).mockImplementation(async (callback) => { - await callback(mockRepo); - }); + Scenario('Successfully creates a staff role with finance permissions', ({ Given, When, Then }) => { + Given('a staff role with name "Finance Role" does not exist in the repository', () => { + roleInstance = makeMockStaffRoleInstance('Finance Role'); + dataSources = makeDataSources({ newRoleInstance: roleInstance }); + command = { roleName: 'Finance Role', permissions: { finance: { canManageFinance: true } } }; + }); + When('I call create with roleName "Finance Role" and finance permissions canManageFinance true', async () => { + try { + result = await create(dataSources)(command); + } catch (e) { + thrownError = e; + } + }); + Then('the finance permission canManageFinance should be true on the saved instance', () => { + expect(thrownError).toBeUndefined(); + const fp = roleInstance.permissions.financePermissions; + expect(fp).toBeDefined(); + expect(fp?.canManageFinance).toBe(true); + }); + }); + Scenario('Successfully creates a staff role with tech-admin permissions', ({ Given, When, Then }) => { + Given('a staff role with name "Tech Role" does not exist in the repository', () => { + roleInstance = makeMockStaffRoleInstance('Tech Role'); + dataSources = makeDataSources({ newRoleInstance: roleInstance }); + command = { roleName: 'Tech Role', permissions: { techAdmin: { canManageTechAdmin: true } } }; + }); + When('I call create with roleName "Tech Role" and techAdmin permissions canManageTechAdmin true', async () => { try { - await createStaffRole({ roleName: 'Test Role', isDefault: false }); - } catch (err) { - error = err as Error; + result = await create(dataSources)(command); + } catch (e) { + thrownError = e; } }); + Then('the techAdmin permission canManageTechAdmin should be true on the saved instance', () => { + expect(thrownError).toBeUndefined(); + const tp = roleInstance.permissions.techAdminPermissions; + expect(tp).toBeDefined(); + expect(tp?.canManageTechAdmin).toBe(true); + }); + }); - Then('it should throw an error "Unable to create staff role"', () => { - expect(error).toBeDefined(); - expect(error.message).toBe('Unable to create staff role'); + Scenario('Creating role with canAssignStaffRoles true updates both assign flags', ({ Given, When, Then }) => { + Given('a staff role with name "AssignBoth Role" does not exist in the repository', () => { + roleInstance = makeMockStaffRoleInstance('AssignBoth Role'); + dataSources = makeDataSources({ newRoleInstance: roleInstance }); + command = { roleName: 'AssignBoth Role', permissions: { user: { canAssignStaffRoles: true } } }; + }); + When('I call create with roleName "AssignBoth Role" and user permissions canAssignStaffRoles true', async () => { + try { + result = await create(dataSources)(command); + } catch (e) { + thrownError = e; + } + }); + Then('both user permission flags for assigning staff roles should be true', () => { + expect(thrownError).toBeUndefined(); + expect(roleInstance.permissions.userPermissions.canAssignStaffRoles).toBe(true); }); }); }); diff --git a/packages/ocom/application-services/src/contexts/user/staff-role/create.ts b/packages/ocom/application-services/src/contexts/user/staff-role/create.ts index f261c1ed3..d0286d986 100644 --- a/packages/ocom/application-services/src/contexts/user/staff-role/create.ts +++ b/packages/ocom/application-services/src/contexts/user/staff-role/create.ts @@ -1,61 +1,24 @@ import type { Domain } from '@ocom/domain'; import type { DataSources } from '@ocom/persistence'; - -interface StaffRoleCreateCommandCommunityPermissions { - canManageStaffRolesAndPermissions?: boolean; - canManageAllCommunities?: boolean; - canDeleteCommunities?: boolean; - canChangeCommunityOwner?: boolean; - canReIndexSearchCollections?: boolean; -} - -export interface StaffRoleCreateCommandPermissions { - community?: StaffRoleCreateCommandCommunityPermissions; -} +import { applyCommunityPermissions, applyUserPermissions, applyRolePermissions, applyFinancePermissions, applyTechAdminPermissions } from './apply-permissions.ts'; +import type { StaffRoleCommandPermissions } from './apply-permissions.ts'; export interface StaffRoleCreateCommand { roleName: string; + enterpriseAppRole?: string; isDefault?: boolean; - permissions?: StaffRoleCreateCommandPermissions; + permissions?: StaffRoleCommandPermissions; } -const isNotFoundError = (error: unknown): boolean => { - return error instanceof Error && (error.name === 'NotFoundError' || error.message.toLowerCase().includes('not found')); -}; - const ensureRoleDoesNotExist = async (repository: Domain.Contexts.User.StaffRole.StaffRoleRepository, roleName: string): Promise => { try { await repository.getByRoleName(roleName); throw new Error(`Staff role with name ${roleName} already exists`); - } catch (error) { - if (isNotFoundError(error)) { - return; - } - throw error; - } -}; - -const applyCommunityPermissions = (staffRole: Domain.Contexts.User.StaffRole.StaffRole, permissions?: StaffRoleCreateCommandCommunityPermissions) => { - if (!permissions) { - return; - } - - const { communityPermissions } = staffRole.permissions; - - if (permissions.canManageStaffRolesAndPermissions !== undefined) { - communityPermissions.canManageStaffRolesAndPermissions = permissions.canManageStaffRolesAndPermissions; - } - if (permissions.canManageAllCommunities !== undefined) { - communityPermissions.canManageAllCommunities = permissions.canManageAllCommunities; - } - if (permissions.canDeleteCommunities !== undefined) { - communityPermissions.canDeleteCommunities = permissions.canDeleteCommunities; - } - if (permissions.canChangeCommunityOwner !== undefined) { - communityPermissions.canChangeCommunityOwner = permissions.canChangeCommunityOwner; - } - if (permissions.canReIndexSearchCollections !== undefined) { - communityPermissions.canReIndexSearchCollections = permissions.canReIndexSearchCollections; + } catch (e) { + const error = e as Error; + if(error.name !== 'NotFoundError') { + throw error; + } } }; @@ -67,8 +30,14 @@ export const create = (dataSources: DataSources) => { await ensureRoleDoesNotExist(repository, command.roleName); const staffRole = await repository.getNewInstance(command.roleName); - staffRole.isDefault = command.isDefault ?? false; + if (command.enterpriseAppRole) { + staffRole.enterpriseAppRole = command.enterpriseAppRole; + } applyCommunityPermissions(staffRole, command.permissions?.community); + applyUserPermissions(staffRole, command.permissions?.user); + applyRolePermissions(staffRole, command.permissions?.staffRole); + applyFinancePermissions(staffRole, command.permissions?.finance); + applyTechAdminPermissions(staffRole, command.permissions?.techAdmin); createdRole = await repository.save(staffRole); }); diff --git a/packages/ocom/application-services/src/contexts/user/staff-role/features/create.feature b/packages/ocom/application-services/src/contexts/user/staff-role/features/create.feature index 0314a1705..76ee7dc3f 100644 --- a/packages/ocom/application-services/src/contexts/user/staff-role/features/create.feature +++ b/packages/ocom/application-services/src/contexts/user/staff-role/features/create.feature @@ -1,21 +1,90 @@ -Feature: Creating a staff role - - Scenario: Creating a staff role successfully - Given a staff role with name "Test Role" does not exist - When I create a staff role with name "Test Role", isDefault false, and no permissions - Then it should return a staff role entity reference with name "Test Role" and isDefault false - - Scenario: Creating a staff role with permissions - Given a staff role with name "Admin Role" does not exist - When I create a staff role with name "Admin Role", isDefault true, and permissions - Then it should return a staff role entity reference with name "Admin Role" and isDefault true - - Scenario: Creating a staff role with duplicate name - Given a staff role with name "Test Role" already exists - When I create a staff role with name "Test Role", isDefault false, and no permissions - Then it should throw an error "Staff role with name Test Role already exists" - - Scenario: Creating a staff role when save fails - Given a staff role with name "Test Role" does not exist - When I create a staff role but save fails - Then it should throw an error "Unable to create staff role" \ No newline at end of file +Feature: Create staff role + + Scenario: Successfully creates a staff role with no permissions + Given a staff role with name "Test Role" does not exist in the repository + When I call create with roleName "Test Role" and no permissions + Then the new staff role should be saved + And the result should have roleName "Test Role" + + Scenario: Successfully creates a staff role with an enterpriseAppRole + Given a staff role with name "Test Role" does not exist in the repository + When I call create with roleName "Test Role" and enterpriseAppRole "Staff.TestRole" + Then the new staff role should be saved with enterpriseAppRole "Staff.TestRole" + + Scenario: Successfully creates a staff role with community permissions + Given a staff role with name "Admin Role" does not exist in the repository + When I call create with roleName "Admin Role" and community permissions canManageCommunities true + Then the new staff role should be saved + And the community permission canManageCommunities should be true + + Scenario: Successfully creates a staff role with user permissions + Given a staff role with name "Manager Role" does not exist in the repository + When I call create with roleName "Manager Role" and user permissions canManageUsers true + Then the new staff role should be saved + And the user permission canManageUsers should be true + + Scenario: Throws when a staff role with the same name already exists + Given a staff role with name "Duplicate Role" already exists in the repository + When I call create with roleName "Duplicate Role" + Then it should throw an error with message containing "Duplicate Role" + + Scenario: Propagates unexpected repository errors from getByRoleName + Given the repository throws an unexpected error when checking for "Error Role" + When I call create with roleName "Error Role" + Then it should throw the unexpected error + + Scenario: Throws when repository fails to save the new role + Given a staff role with name "Test Role" does not exist in the repository + And saving the staff role returns undefined + When I call create with roleName "Test Role" and no permissions + Then it should throw an error with message "Unable to create staff role" + + Scenario: enterpriseAppRole is not set when not provided in the command + Given a staff role with name "Test Role" does not exist in the repository + When I call create with roleName "Test Role" and no permissions + Then the enterpriseAppRole on the saved instance should remain empty + + Scenario: Not-found detected via error name NotFoundError allows creation to proceed + Given the repository raises a NotFoundError by name when checking for "New Role" + When I call create with roleName "New Role" and no permissions + Then the new staff role should be saved + + Scenario: Successfully creates a staff role with all community permissions set + Given a staff role with name "Full Community Role" does not exist in the repository + When I call create with roleName "Full Community Role" and all community permissions true + Then all community permissions should be true on the saved instance + + Scenario: Omitting community permissions sub-object leaves community permissions unchanged + Given a staff role with name "Test Role" does not exist in the repository + When I call create with roleName "Test Role" and only user permissions + Then all community permissions should remain false + + Scenario: Omitting user permissions sub-object leaves user permissions unchanged + Given a staff role with name "Test Role" does not exist in the repository + When I call create with roleName "Test Role" and only community permissions + Then all user permissions should remain false + + Scenario: getNewInstance is called with the provided role name + Given a staff role with name "Named Role" does not exist in the repository + When I call create with roleName "Named Role" and no permissions + Then getNewInstance should have been called with "Named Role" + + Scenario: Successfully creates a staff role with staff-role permissions + Given a staff role with name "Role Manager" does not exist in the repository + When I call create with roleName "Role Manager" and staffRole permissions canViewRoles true, canAddRole true, canEditRole true, canRemoveRole true + Then the staffRole permissions should be set on the saved instance + + Scenario: Successfully creates a staff role with finance permissions + Given a staff role with name "Finance Role" does not exist in the repository + When I call create with roleName "Finance Role" and finance permissions canManageFinance true + Then the finance permission canManageFinance should be true on the saved instance + + Scenario: Successfully creates a staff role with tech-admin permissions + Given a staff role with name "Tech Role" does not exist in the repository + When I call create with roleName "Tech Role" and techAdmin permissions canManageTechAdmin true + Then the techAdmin permission canManageTechAdmin should be true on the saved instance + + Scenario: Creating role with canAssignStaffRoles true updates both assign flags + Given a staff role with name "AssignBoth Role" does not exist in the repository + When I call create with roleName "AssignBoth Role" and user permissions canAssignStaffRoles true + Then both user permission flags for assigning staff roles should be true diff --git a/packages/ocom/application-services/src/contexts/user/staff-role/features/list.feature b/packages/ocom/application-services/src/contexts/user/staff-role/features/list.feature new file mode 100644 index 000000000..b96d7d589 --- /dev/null +++ b/packages/ocom/application-services/src/contexts/user/staff-role/features/list.feature @@ -0,0 +1,11 @@ +Feature: List staff roles + + Scenario: Returns all staff roles when roles exist + Given the repository contains two staff roles + When I call list + Then it should return all staff roles + + Scenario: Returns an empty list when no staff roles exist + Given the repository contains no staff roles + When I call list + Then it should return an empty list diff --git a/packages/ocom/application-services/src/contexts/user/staff-role/features/update.feature b/packages/ocom/application-services/src/contexts/user/staff-role/features/update.feature new file mode 100644 index 000000000..175bb89ef --- /dev/null +++ b/packages/ocom/application-services/src/contexts/user/staff-role/features/update.feature @@ -0,0 +1,55 @@ +Feature: Update staff role + + Scenario: Successfully updates a staff role name + Given a staff role with id "role-001" exists in the repository + When I call update with roleId "role-001" and roleName "Updated Role" + Then the staff role should be saved + And the result should have roleName "Updated Role" + + Scenario: Successfully updates a staff role with an enterpriseAppRole + Given a staff role with id "role-002" exists in the repository + When I call update with roleId "role-002" and enterpriseAppRole "Staff.UpdatedRole" + Then the staff role should be saved with enterpriseAppRole "Staff.UpdatedRole" + + Scenario: Successfully updates a staff role with community permissions + Given a staff role with id "role-003" exists in the repository + When I call update with roleId "role-003" and community permissions canManageCommunities true + Then the staff role should be saved + And the community permission canManageCommunities should be true + + Scenario: Successfully updates a staff role with user permissions + Given a staff role with id "role-004" exists in the repository + When I call update with roleId "role-004" and user permissions canManageUsers true + Then the staff role should be saved + And the user permission canManageUsers should be true + + Scenario: Does not apply enterpriseAppRole when it is not provided + Given a staff role with id "role-005" exists in the repository + When I call update with roleId "role-005" and no enterpriseAppRole + Then the staff role enterpriseAppRole should remain unchanged + + Scenario: Throws when repository fails to save the updated role + Given a staff role with id "role-err" exists in the repository + And saving the staff role returns undefined + When I call update with roleId "role-err" and roleName "Any Role" + Then it should throw an error with message "Unable to update staff role" + + Scenario: Successfully updates a staff role with all community permissions set + Given a staff role with id "role-all-comm" exists in the repository + When I call update with all community permissions true + Then all community permissions should be true on the updated instance + + Scenario: Omitting community permissions sub-object leaves community permissions unchanged + Given a staff role with id "role-noc" exists in the repository + When I call update with only user permissions + Then all community permissions should remain false + + Scenario: Omitting user permissions sub-object leaves user permissions unchanged + Given a staff role with id "role-nou" exists in the repository + When I call update with only community permissions + Then all user permissions should remain false + + Scenario: getById is called with the provided role id + Given a staff role with id "role-lookup" exists in the repository + When I call update with roleId "role-lookup" and roleName "Any Role" + Then getById should have been called with "role-lookup" diff --git a/packages/ocom/application-services/src/contexts/user/staff-role/index.ts b/packages/ocom/application-services/src/contexts/user/staff-role/index.ts index e032256e8..916d44345 100644 --- a/packages/ocom/application-services/src/contexts/user/staff-role/index.ts +++ b/packages/ocom/application-services/src/contexts/user/staff-role/index.ts @@ -3,15 +3,19 @@ import type { DataSources } from '@ocom/persistence'; import { create, type StaffRoleCreateCommand } from './create.ts'; import { createDefaultRoles } from './create-default-roles.ts'; import { deleteAndReassign, type StaffRoleDeleteAndReassignCommand } from './delete-and-reassign.ts'; +import { list } from './list.ts'; import { queryById, type StaffRoleQueryByIdCommand } from './query-by-id.ts'; import { queryByRoleName, type StaffRoleQueryByRoleNameCommand } from './query-by-role-name.ts'; +import { update, type StaffRoleUpdateCommand } from './update.ts'; export interface StaffRoleApplicationService { create: (command: StaffRoleCreateCommand) => Promise; createDefaultRoles: () => Promise; deleteAndReassign: (command: StaffRoleDeleteAndReassignCommand) => Promise; + list: () => Promise; queryById: (command: StaffRoleQueryByIdCommand) => Promise; queryByRoleName: (command: StaffRoleQueryByRoleNameCommand) => Promise; + update: (command: StaffRoleUpdateCommand) => Promise; } export const StaffRole = (dataSources: DataSources): StaffRoleApplicationService => { @@ -19,7 +23,9 @@ export const StaffRole = (dataSources: DataSources): StaffRoleApplicationService create: create(dataSources), createDefaultRoles: createDefaultRoles(dataSources), deleteAndReassign: deleteAndReassign(dataSources), + list: list(dataSources), queryById: queryById(dataSources), queryByRoleName: queryByRoleName(dataSources), + update: update(dataSources), }; }; diff --git a/packages/ocom/application-services/src/contexts/user/staff-role/list.test.ts b/packages/ocom/application-services/src/contexts/user/staff-role/list.test.ts new file mode 100644 index 000000000..fa46c18e5 --- /dev/null +++ b/packages/ocom/application-services/src/contexts/user/staff-role/list.test.ts @@ -0,0 +1,113 @@ +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { describeFeature, loadFeature } from '@amiceli/vitest-cucumber'; +import type { Domain } from '@ocom/domain'; +import type { DataSources } from '@ocom/persistence'; +import { expect, vi } from 'vitest'; +import { list } from './list.ts'; + +const test = { for: describeFeature }; +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const feature = await loadFeature(path.resolve(__dirname, 'features/list.feature')); + +// ─── Helpers ───────────────────────────────────────────────────────────────── + +function makeMockStaffRoleRef(id: string, roleName: string): Domain.Contexts.User.StaffRole.StaffRoleEntityReference { + return { + id, + roleName, + enterpriseAppRole: '', + isDefault: false, + roleType: null, + permissions: { + communityPermissions: { + canManageCommunities: false, + canManageStaffRolesAndPermissions: false, + canManageAllCommunities: false, + canDeleteCommunities: false, + canChangeCommunityOwner: false, + canReIndexSearchCollections: false, + }, + userPermissions: { + canManageUsers: false, + }, + }, + createdAt: new Date(), + updatedAt: new Date(), + schemaVersion: '1.0', + } as unknown as Domain.Contexts.User.StaffRole.StaffRoleEntityReference; +} + +function makeDataSources(roles: Domain.Contexts.User.StaffRole.StaffRoleEntityReference[]): DataSources { + return { + readonlyDataSource: { + User: { + StaffRole: { + StaffRoleReadRepo: { + getAll: vi.fn().mockResolvedValue(roles), + }, + }, + }, + }, + } as unknown as DataSources; +} + +// ─── Tests ──────────────────────────────────────────────────────────────────── + +test.for(feature, ({ Scenario, BeforeEachScenario }) => { + let dataSources: DataSources; + let result: Domain.Contexts.User.StaffRole.StaffRoleEntityReference[] | undefined; + let thrownError: unknown; + + BeforeEachScenario(() => { + result = undefined; + thrownError = undefined; + }); + + // ─── Roles exist ────────────────────────────────────────────────────────── + + Scenario('Returns all staff roles when roles exist', ({ Given, When, Then }) => { + Given('the repository contains two staff roles', () => { + const roles = [makeMockStaffRoleRef('role-001', 'Admin'), makeMockStaffRoleRef('role-002', 'Manager')]; + dataSources = makeDataSources(roles); + }); + + When('I call list', async () => { + try { + result = await list(dataSources)(); + } catch (e) { + thrownError = e; + } + }); + + Then('it should return all staff roles', () => { + expect(thrownError).toBeUndefined(); + expect(result).toHaveLength(2); + const roles = result as Domain.Contexts.User.StaffRole.StaffRoleEntityReference[]; + const [first, second] = roles; + expect(first?.id).toBe('role-001'); + expect(second?.id).toBe('role-002'); + }); + }); + + // ─── No roles ───────────────────────────────────────────────────────────── + + Scenario('Returns an empty list when no staff roles exist', ({ Given, When, Then }) => { + Given('the repository contains no staff roles', () => { + dataSources = makeDataSources([]); + }); + + When('I call list', async () => { + try { + result = await list(dataSources)(); + } catch (e) { + thrownError = e; + } + }); + + Then('it should return an empty list', () => { + expect(thrownError).toBeUndefined(); + expect(result).toHaveLength(0); + }); + }); +}); diff --git a/packages/ocom/application-services/src/contexts/user/staff-role/list.ts b/packages/ocom/application-services/src/contexts/user/staff-role/list.ts new file mode 100644 index 000000000..a7a8eb3d3 --- /dev/null +++ b/packages/ocom/application-services/src/contexts/user/staff-role/list.ts @@ -0,0 +1,8 @@ +import type { Domain } from '@ocom/domain'; +import type { DataSources } from '@ocom/persistence'; + +export const list = (dataSources: DataSources) => { + return async (): Promise => { + return await dataSources.readonlyDataSource.User.StaffRole.StaffRoleReadRepo.getAll(); + }; +}; diff --git a/packages/ocom/application-services/src/contexts/user/staff-role/update.test.ts b/packages/ocom/application-services/src/contexts/user/staff-role/update.test.ts new file mode 100644 index 000000000..7b40ca757 --- /dev/null +++ b/packages/ocom/application-services/src/contexts/user/staff-role/update.test.ts @@ -0,0 +1,380 @@ +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { describeFeature, loadFeature } from '@amiceli/vitest-cucumber'; +import type { Domain } from '@ocom/domain'; +import type { DataSources } from '@ocom/persistence'; +import { expect, vi } from 'vitest'; +import { type StaffRoleUpdateCommand, update } from './update.ts'; + +const test = { for: describeFeature }; +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const feature = await loadFeature(path.resolve(__dirname, 'features/update.feature')); + +// ─── Helpers ───────────────────────────────────────────────────────────────── + +type MockPermissions = { + communityPermissions: Record; + userPermissions: Record; +}; + +interface MockStaffRoleInstance { + id: string; + roleName: string; + enterpriseAppRole: string; + isDefault: boolean; + roleType: null; + permissions: MockPermissions; + createdAt: Date; + updatedAt: Date; + schemaVersion: string; +} + +function makeMockStaffRoleInstance(id: string, roleName = 'Original Role'): MockStaffRoleInstance { + const communityPermissions: Record = { + canManageCommunities: false, + canManageStaffRolesAndPermissions: false, + canManageAllCommunities: false, + canDeleteCommunities: false, + canChangeCommunityOwner: false, + canReIndexSearchCollections: false, + }; + const userPermissions: Record = { + canManageUsers: false, + }; + return { + id, + roleName, + enterpriseAppRole: 'Original.AppRole', + isDefault: false, + roleType: null, + permissions: { communityPermissions, userPermissions }, + createdAt: new Date(), + updatedAt: new Date(), + schemaVersion: '1.0', + }; +} + +function makeDataSources(overrides: { roleInstance?: MockStaffRoleInstance; explicitUndefinedSave?: boolean }): DataSources & { _repo: unknown } { + const { roleInstance, explicitUndefinedSave } = overrides; + const instance = roleInstance ?? makeMockStaffRoleInstance('role-001'); + const savedRole = explicitUndefinedSave ? undefined : (instance as unknown as Domain.Contexts.User.StaffRole.StaffRoleEntityReference); + + const repo = { + getById: vi.fn().mockResolvedValue(instance), + save: vi.fn().mockResolvedValue(savedRole), + } as unknown as Domain.Contexts.User.StaffRole.StaffRoleRepository; + + return { + domainDataSource: { + User: { + StaffRole: { + StaffRoleUnitOfWork: { + withScopedTransaction: vi.fn().mockImplementation(async (cb: (r: typeof repo) => Promise) => { + await cb(repo); + }), + }, + }, + }, + }, + _repo: repo, + } as unknown as DataSources & { _repo: unknown }; +} + +// ─── Tests ──────────────────────────────────────────────────────────────────── + +test.for(feature, ({ Scenario, BeforeEachScenario }) => { + let dataSources: DataSources & { _repo?: unknown }; + let command: StaffRoleUpdateCommand; + let result: Domain.Contexts.User.StaffRole.StaffRoleEntityReference | undefined; + let thrownError: unknown; + let roleInstance: MockStaffRoleInstance; + + BeforeEachScenario(() => { + result = undefined; + thrownError = undefined; + roleInstance = makeMockStaffRoleInstance('role-001'); + command = { roleId: 'role-001', roleName: 'Updated Role' }; + }); + + // ─── Update roleName ────────────────────────────────────────────────────── + + Scenario('Successfully updates a staff role name', ({ Given, When, Then, And }) => { + Given('a staff role with id "role-001" exists in the repository', () => { + roleInstance = makeMockStaffRoleInstance('role-001'); + dataSources = makeDataSources({ roleInstance }); + command = { roleId: 'role-001', roleName: 'Updated Role' }; + }); + + When('I call update with roleId "role-001" and roleName "Updated Role"', async () => { + try { + result = await update(dataSources)(command); + } catch (e) { + thrownError = e; + } + }); + + Then('the staff role should be saved', () => { + const repo = dataSources._repo as { save: ReturnType }; + expect(repo.save).toHaveBeenCalled(); + }); + + And('the result should have roleName "Updated Role"', () => { + expect(thrownError).toBeUndefined(); + expect(result).toBeDefined(); + expect(roleInstance.roleName).toBe('Updated Role'); + }); + }); + + // ─── Update enterpriseAppRole ───────────────────────────────────────────── + + Scenario('Successfully updates a staff role with an enterpriseAppRole', ({ Given, When, Then }) => { + Given('a staff role with id "role-002" exists in the repository', () => { + roleInstance = makeMockStaffRoleInstance('role-002'); + dataSources = makeDataSources({ roleInstance }); + command = { roleId: 'role-002', roleName: 'Updated Role', enterpriseAppRole: 'Staff.UpdatedRole' }; + }); + + When('I call update with roleId "role-002" and enterpriseAppRole "Staff.UpdatedRole"', async () => { + try { + result = await update(dataSources)(command); + } catch (e) { + thrownError = e; + } + }); + + Then('the staff role should be saved with enterpriseAppRole "Staff.UpdatedRole"', () => { + expect(thrownError).toBeUndefined(); + expect(roleInstance.enterpriseAppRole).toBe('Staff.UpdatedRole'); + }); + }); + + // ─── Update community permissions ───────────────────────────────────────── + + Scenario('Successfully updates a staff role with community permissions', ({ Given, When, Then, And }) => { + Given('a staff role with id "role-003" exists in the repository', () => { + roleInstance = makeMockStaffRoleInstance('role-003'); + dataSources = makeDataSources({ roleInstance }); + command = { + roleId: 'role-003', + roleName: 'Admin Role', + permissions: { community: { canManageCommunities: true } }, + }; + }); + + When('I call update with roleId "role-003" and community permissions canManageCommunities true', async () => { + try { + result = await update(dataSources)(command); + } catch (e) { + thrownError = e; + } + }); + + Then('the staff role should be saved', () => { + const repo = dataSources._repo as { save: ReturnType }; + expect(repo.save).toHaveBeenCalled(); + }); + + And('the community permission canManageCommunities should be true', () => { + expect(thrownError).toBeUndefined(); + expect(roleInstance.permissions.communityPermissions.canManageCommunities).toBe(true); + }); + }); + + // ─── Update user permissions ────────────────────────────────────────────── + + Scenario('Successfully updates a staff role with user permissions', ({ Given, When, Then, And }) => { + Given('a staff role with id "role-004" exists in the repository', () => { + roleInstance = makeMockStaffRoleInstance('role-004'); + dataSources = makeDataSources({ roleInstance }); + command = { + roleId: 'role-004', + roleName: 'Manager Role', + permissions: { user: { canManageUsers: true } }, + }; + }); + + When('I call update with roleId "role-004" and user permissions canManageUsers true', async () => { + try { + result = await update(dataSources)(command); + } catch (e) { + thrownError = e; + } + }); + + Then('the staff role should be saved', () => { + const repo = dataSources._repo as { save: ReturnType }; + expect(repo.save).toHaveBeenCalled(); + }); + + And('the user permission canManageUsers should be true', () => { + expect(thrownError).toBeUndefined(); + expect(roleInstance.permissions.userPermissions.canManageUsers).toBe(true); + }); + }); + + // ─── enterpriseAppRole not applied when absent ──────────────────────────── + + Scenario('Does not apply enterpriseAppRole when it is not provided', ({ Given, When, Then }) => { + Given('a staff role with id "role-005" exists in the repository', () => { + roleInstance = makeMockStaffRoleInstance('role-005'); + roleInstance.enterpriseAppRole = 'Original.AppRole'; + dataSources = makeDataSources({ roleInstance }); + command = { roleId: 'role-005', roleName: 'Some Role' }; + }); + + When('I call update with roleId "role-005" and no enterpriseAppRole', async () => { + try { + result = await update(dataSources)(command); + } catch (e) { + thrownError = e; + } + }); + + Then('the staff role enterpriseAppRole should remain unchanged', () => { + expect(thrownError).toBeUndefined(); + expect(roleInstance.enterpriseAppRole).toBe('Original.AppRole'); + }); + }); + + // ─── Save fails ─────────────────────────────────────────────────────────── + + Scenario('Throws when repository fails to save the updated role', ({ Given, When, Then, And }) => { + Given('a staff role with id "role-err" exists in the repository', () => { + roleInstance = makeMockStaffRoleInstance('role-err'); + }); + + And('saving the staff role returns undefined', () => { + dataSources = makeDataSources({ roleInstance, explicitUndefinedSave: true }); + command = { roleId: 'role-err', roleName: 'Any Role' }; + }); + + When('I call update with roleId "role-err" and roleName "Any Role"', async () => { + try { + result = await update(dataSources)(command); + } catch (e) { + thrownError = e; + } + }); + + Then('it should throw an error with message "Unable to update staff role"', () => { + expect(thrownError).toBeDefined(); + expect((thrownError as Error).message).toBe('Unable to update staff role'); + }); + }); + + // ─── All community permissions ──────────────────────────────────────────── + + Scenario('Successfully updates a staff role with all community permissions set', ({ Given, When, Then }) => { + Given('a staff role with id "role-all-comm" exists in the repository', () => { + roleInstance = makeMockStaffRoleInstance('role-all-comm'); + dataSources = makeDataSources({ roleInstance }); + command = { + roleId: 'role-all-comm', + roleName: 'Full Community Role', + permissions: { + community: { + canManageCommunities: true, + canManageStaffRolesAndPermissions: true, + canManageAllCommunities: true, + canDeleteCommunities: true, + canChangeCommunityOwner: true, + canReIndexSearchCollections: true, + }, + }, + }; + }); + When('I call update with all community permissions true', async () => { + try { + result = await update(dataSources)(command); + } catch (e) { + thrownError = e; + } + }); + Then('all community permissions should be true on the updated instance', () => { + expect(thrownError).toBeUndefined(); + const cp = roleInstance.permissions.communityPermissions; + expect(cp.canManageCommunities).toBe(true); + expect(cp.canManageStaffRolesAndPermissions).toBe(true); + expect(cp.canManageAllCommunities).toBe(true); + expect(cp.canDeleteCommunities).toBe(true); + expect(cp.canChangeCommunityOwner).toBe(true); + expect(cp.canReIndexSearchCollections).toBe(true); + }); + }); + + // ─── No-op when sub-objects absent ─────────────────────────────────────── + + Scenario('Omitting community permissions sub-object leaves community permissions unchanged', ({ Given, When, Then }) => { + Given('a staff role with id "role-noc" exists in the repository', () => { + roleInstance = makeMockStaffRoleInstance('role-noc'); + dataSources = makeDataSources({ roleInstance }); + command = { + roleId: 'role-noc', + roleName: 'Some Role', + permissions: { user: { canManageUsers: true } }, + }; + }); + When('I call update with only user permissions', async () => { + try { + result = await update(dataSources)(command); + } catch (e) { + thrownError = e; + } + }); + Then('all community permissions should remain false', () => { + expect(thrownError).toBeUndefined(); + const cp = roleInstance.permissions.communityPermissions; + for (const key of Object.keys(cp)) { + expect(cp[key], key).toBe(false); + } + }); + }); + + Scenario('Omitting user permissions sub-object leaves user permissions unchanged', ({ Given, When, Then }) => { + Given('a staff role with id "role-nou" exists in the repository', () => { + roleInstance = makeMockStaffRoleInstance('role-nou'); + dataSources = makeDataSources({ roleInstance }); + command = { + roleId: 'role-nou', + roleName: 'Some Role', + permissions: { community: { canManageCommunities: true } }, + }; + }); + When('I call update with only community permissions', async () => { + try { + result = await update(dataSources)(command); + } catch (e) { + thrownError = e; + } + }); + Then('all user permissions should remain false', () => { + expect(thrownError).toBeUndefined(); + const up = roleInstance.permissions.userPermissions; + for (const key of Object.keys(up)) { + expect(up[key], key).toBe(false); + } + }); + }); + + // ─── getById called with roleId ─────────────────────────────────────────── + + Scenario('getById is called with the provided role id', ({ Given, When, Then }) => { + Given('a staff role with id "role-lookup" exists in the repository', () => { + roleInstance = makeMockStaffRoleInstance('role-lookup'); + dataSources = makeDataSources({ roleInstance }); + command = { roleId: 'role-lookup', roleName: 'Any Role' }; + }); + When('I call update with roleId "role-lookup" and roleName "Any Role"', async () => { + try { + result = await update(dataSources)(command); + } catch (e) { + thrownError = e; + } + }); + Then('getById should have been called with "role-lookup"', () => { + expect(thrownError).toBeUndefined(); + const repo = dataSources._repo as { getById: ReturnType }; + expect(repo.getById).toHaveBeenCalledWith('role-lookup'); + }); + }); +}); diff --git a/packages/ocom/application-services/src/contexts/user/staff-role/update.ts b/packages/ocom/application-services/src/contexts/user/staff-role/update.ts new file mode 100644 index 000000000..67ebf19c7 --- /dev/null +++ b/packages/ocom/application-services/src/contexts/user/staff-role/update.ts @@ -0,0 +1,39 @@ +import type { Domain } from '@ocom/domain'; +import type { DataSources } from '@ocom/persistence'; +import { applyCommunityPermissions, applyUserPermissions, applyRolePermissions, applyFinancePermissions, applyTechAdminPermissions } from './apply-permissions.ts'; +import type { StaffRoleCommandPermissions } from './apply-permissions.ts'; + +export interface StaffRoleUpdateCommand { + roleId: string; + roleName: string | undefined; + enterpriseAppRole?: string; + permissions?: StaffRoleCommandPermissions; +} + +export const update = (dataSources: DataSources) => { + return async (command: StaffRoleUpdateCommand): Promise => { + let updatedRole: Domain.Contexts.User.StaffRole.StaffRoleEntityReference | undefined; + + await dataSources.domainDataSource.User.StaffRole.StaffRoleUnitOfWork.withScopedTransaction(async (repository) => { + const staffRole = await repository.getById(command.roleId); + if(command.roleName !== undefined) { + staffRole.roleName = command.roleName; + } + if (command.enterpriseAppRole) { + staffRole.enterpriseAppRole = command.enterpriseAppRole; + } + applyCommunityPermissions(staffRole, command.permissions?.community); + applyUserPermissions(staffRole, command.permissions?.user); + applyRolePermissions(staffRole, command.permissions?.staffRole); + applyFinancePermissions(staffRole, command.permissions?.finance); + applyTechAdminPermissions(staffRole, command.permissions?.techAdmin); + updatedRole = await repository.save(staffRole); + }); + + if (!updatedRole) { + throw new Error('Unable to update staff role'); + } + + return updatedRole; + }; +}; diff --git a/packages/ocom/application-services/src/contexts/user/staff-user/assign-role.test.ts b/packages/ocom/application-services/src/contexts/user/staff-user/assign-role.test.ts new file mode 100644 index 000000000..a9b6cf436 --- /dev/null +++ b/packages/ocom/application-services/src/contexts/user/staff-user/assign-role.test.ts @@ -0,0 +1,215 @@ +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { describeFeature, loadFeature } from '@amiceli/vitest-cucumber'; +import type { Domain } from '@ocom/domain'; +import type { DataSources } from '@ocom/persistence'; +import { expect, vi } from 'vitest'; +import { assignRole, type StaffUserAssignRoleCommand } from './assign-role.ts'; + +const test = { for: describeFeature }; +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const feature = await loadFeature(path.resolve(__dirname, 'features/assign-role.feature')); + +// ─── Helpers ───────────────────────────────────────────────────────────────── + +interface MockStaffUserInstance extends Domain.Contexts.User.StaffUser.StaffUserEntityReference { + role: Domain.Contexts.User.StaffRole.StaffRoleEntityReference | undefined; +} + +function makeMockStaffRoleRef(id: string): Domain.Contexts.User.StaffRole.StaffRoleEntityReference { + return { + id, + roleName: `role-${id}`, + enterpriseAppRole: `role-${id}`, + isDefault: false, + roleType: null, + permissions: { + communityPermissions: { canManageCommunities: false }, + financePermissions: { canManageFinance: false }, + techAdminPermissions: { canManageTechAdmin: false }, + userPermissions: { canManageUsers: false }, + }, + createdAt: new Date(), + updatedAt: new Date(), + schemaVersion: '1.0', + } as unknown as Domain.Contexts.User.StaffRole.StaffRoleEntityReference; +} + +function makeMockStaffUserInstance(id: string): MockStaffUserInstance { + let _role: Domain.Contexts.User.StaffRole.StaffRoleEntityReference | undefined; + return { + id, + externalId: `ext-${id}`, + firstName: 'Test', + lastName: 'User', + email: 'test@example.com', + displayName: 'Test User', + accessBlocked: false, + tags: [], + userType: 'staff', + get role() { + return _role; + }, + set role(r: Domain.Contexts.User.StaffRole.StaffRoleEntityReference | undefined) { + _role = r; + }, + requestRoleAssignment: vi.fn().mockImplementation((r: Domain.Contexts.User.StaffRole.StaffRoleEntityReference) => { + _role = r; + }), + createdAt: new Date(), + updatedAt: new Date(), + schemaVersion: '1.0', + } as unknown as MockStaffUserInstance; +} + +function makeDataSources(overrides: { + staffUser?: MockStaffUserInstance; + staffRole?: Domain.Contexts.User.StaffRole.StaffRoleEntityReference | null; + savedUser?: Domain.Contexts.User.StaffUser.StaffUserEntityReference; + explicitUndefinedSave?: boolean; +}): DataSources & { _staffUserRepo: unknown; _staffRoleRepo: unknown } { + const staffUser = overrides.staffUser ?? makeMockStaffUserInstance('user-123'); + const { staffRole } = overrides; + const savedUser = overrides.explicitUndefinedSave ? undefined : (overrides.savedUser ?? staffUser); + + const staffUserRepo = { + get: vi.fn().mockResolvedValue(staffUser), + save: vi.fn().mockResolvedValue(savedUser), + } as unknown as Domain.Contexts.User.StaffUser.StaffUserRepository; + + const staffRoleRepo = { + getById: staffRole === null ? vi.fn().mockResolvedValue(null) : vi.fn().mockResolvedValue(staffRole), + } as unknown as Domain.Contexts.User.StaffRole.StaffRoleRepository; + + return { + domainDataSource: { + User: { + StaffUser: { + StaffUserUnitOfWork: { + withScopedTransaction: vi.fn().mockImplementation(async (cb: (repo: typeof staffUserRepo) => Promise) => { + await cb(staffUserRepo); + }), + }, + }, + StaffRole: { + StaffRoleUnitOfWork: { + withScopedTransaction: vi.fn().mockImplementation(async (cb: (repo: typeof staffRoleRepo) => Promise) => { + await cb(staffRoleRepo); + }), + }, + }, + }, + }, + _staffUserRepo: staffUserRepo, + _staffRoleRepo: staffRoleRepo, + } as unknown as DataSources & { _staffUserRepo: unknown; _staffRoleRepo: unknown }; +} + +// ─── Tests ──────────────────────────────────────────────────────────────────── + +test.for(feature, ({ Scenario, BeforeEachScenario }) => { + let dataSources: DataSources & { _staffUserRepo?: unknown; _staffRoleRepo?: unknown }; + let command: StaffUserAssignRoleCommand; + let result: Domain.Contexts.User.StaffUser.StaffUserEntityReference | undefined; + let thrownError: unknown; + let staffUser: MockStaffUserInstance; + let staffRole: Domain.Contexts.User.StaffRole.StaffRoleEntityReference | null; + BeforeEachScenario(() => { + result = undefined; + thrownError = undefined; + staffUser = makeMockStaffUserInstance('user-123'); + staffRole = makeMockStaffRoleRef('role-456'); + command = { staffUserId: 'user-123', roleId: 'role-456', actorStaffUserId: 'actor-1' }; + }); + + // ─── Successfully assigns a role ────────────────────────────────────────── + + Scenario('Successfully assigns a role to an existing staff user', ({ Given, When, Then, And }) => { + Given('a staff user with id "user-123" exists', () => { + staffUser = makeMockStaffUserInstance('user-123'); + }); + + And('a staff role with id "role-456" exists', () => { + staffRole = makeMockStaffRoleRef('role-456'); + dataSources = makeDataSources({ staffUser, staffRole }); + command = { staffUserId: 'user-123', roleId: 'role-456', actorStaffUserId: 'actor-1' }; + }); + + When('I call assignRole with staffUserId "user-123" and roleId "role-456"', async () => { + try { + result = await assignRole(dataSources)(command); + } catch (e) { + thrownError = e; + } + }); + + Then('the staff user should be saved with the role assigned', () => { + const repo = dataSources._staffUserRepo as { save: ReturnType }; + expect(repo.save).toHaveBeenCalled(); + expect(staffUser.role).toBe(staffRole); + }); + + And('the result should be the updated staff user', () => { + expect(thrownError).toBeUndefined(); + expect(result).toBeDefined(); + expect(result?.id).toBe('user-123'); + }); + }); + + // ─── Role not found ─────────────────────────────────────────────────────── + + Scenario('Throws an error when the staff role does not exist', ({ Given, When, Then, And }) => { + Given('a staff user with id "user-123" exists', () => { + staffUser = makeMockStaffUserInstance('user-123'); + }); + + And('no staff role with id "role-999" exists in the repository', () => { + staffRole = null; + dataSources = makeDataSources({ staffUser, staffRole }); + command = { staffUserId: 'user-123', roleId: 'role-999', actorStaffUserId: 'actor-1' }; + }); + + When('I call assignRole with staffUserId "user-123" and roleId "role-999"', async () => { + try { + result = await assignRole(dataSources)(command); + } catch (e) { + thrownError = e; + } + }); + + Then('it should throw an error with message containing "role-999"', () => { + expect(thrownError).toBeDefined(); + expect((thrownError as Error).message).toContain('role-999'); + }); + }); + + // ─── Save returns undefined ─────────────────────────────────────────────── + + Scenario('Throws an error when the unit of work returns no result', ({ Given, When, Then, And }) => { + Given('a staff user with id "user-123" exists', () => { + staffUser = makeMockStaffUserInstance('user-123'); + }); + + And('a staff role with id "role-456" exists', () => { + staffRole = makeMockStaffRoleRef('role-456'); + }); + + And('saving the staff user returns undefined', () => { + dataSources = makeDataSources({ staffUser, staffRole, explicitUndefinedSave: true }); + command = { staffUserId: 'user-123', roleId: 'role-456', actorStaffUserId: 'actor-1' }; + }); + + When('I call assignRole with staffUserId "user-123" and roleId "role-456"', async () => { + try { + result = await assignRole(dataSources)(command); + } catch (e) { + thrownError = e; + } + }); + + Then('it should throw an error with message "Unable to assign role to staff user"', () => { + expect(thrownError).toBeDefined(); + expect((thrownError as Error).message).toBe('Unable to assign role to staff user'); + }); + }); +}); diff --git a/packages/ocom/application-services/src/contexts/user/staff-user/assign-role.ts b/packages/ocom/application-services/src/contexts/user/staff-user/assign-role.ts new file mode 100644 index 000000000..c1ab1a834 --- /dev/null +++ b/packages/ocom/application-services/src/contexts/user/staff-user/assign-role.ts @@ -0,0 +1,53 @@ +import type { Domain } from '@ocom/domain'; +import type { DataSources } from '@ocom/persistence'; + +export interface StaffUserAssignRoleCommand { + staffUserId: string; + roleId: string; + actorStaffUserId: string; +} + +export const assignRole = (dataSources: DataSources) => { + return async (command: StaffUserAssignRoleCommand): Promise => { + let result: Domain.Contexts.User.StaffUser.StaffUserEntityReference | undefined; + + await dataSources.domainDataSource.User.StaffUser.StaffUserUnitOfWork.withScopedTransaction(async (staffUserRepo) => { + const staffUser = await staffUserRepo.get(command.staffUserId); + + let role!: Domain.Contexts.User.StaffRole.StaffRoleEntityReference; + await dataSources.domainDataSource.User.StaffRole.StaffRoleUnitOfWork.withScopedTransaction(async (staffRoleRepo) => { + const foundRole = await staffRoleRepo.getById(command.roleId); + if (!foundRole) { + return; + } + role = foundRole; + }); + + if (!role) { + throw new Error(`StaffRole with id ${command.roleId} not found`); + } + + // Build a descriptive activity message including role name, target user and actor (fallback to IDs when names unavailable) + let actorDisplayName = command.actorStaffUserId; + try { + const actor = await staffUserRepo.get(command.actorStaffUserId); + if (actor?.displayName) actorDisplayName = actor.displayName; + } catch (e) { + const error = e as Error; + if (error.name !== 'NotFoundError') { + throw error; + } + } + const roleName = role.roleName ?? command.roleId; + const description = `${roleName} assigned by ${actorDisplayName}`; + staffUser.requestRoleAssignment(role, description, command.actorStaffUserId); + result = await staffUserRepo.save(staffUser); + }); + + if (!result) { + throw new Error('Unable to assign role to staff user'); + } + + return result; + }; +}; diff --git a/packages/ocom/application-services/src/contexts/user/staff-user/create-if-not-exists.test.ts b/packages/ocom/application-services/src/contexts/user/staff-user/create-if-not-exists.test.ts index bf7506839..4cddd49b2 100644 --- a/packages/ocom/application-services/src/contexts/user/staff-user/create-if-not-exists.test.ts +++ b/packages/ocom/application-services/src/contexts/user/staff-user/create-if-not-exists.test.ts @@ -13,7 +13,7 @@ const feature = await loadFeature(path.resolve(__dirname, 'features/create-if-no // ─── Helpers ───────────────────────────────────────────────────────────────── -function makeMockStaffUserRef(externalId: string): Domain.Contexts.User.StaffUser.StaffUserEntityReference { +function makeMockStaffUserRef(externalId: string, overrides: Partial = {}): Domain.Contexts.User.StaffUser.StaffUserEntityReference { return { id: `id-${externalId}`, externalId, @@ -28,6 +28,7 @@ function makeMockStaffUserRef(externalId: string): Domain.Contexts.User.StaffUse createdAt: new Date(), updatedAt: new Date(), schemaVersion: '1.0', + ...overrides, } as unknown as Domain.Contexts.User.StaffUser.StaffUserEntityReference; } @@ -72,6 +73,10 @@ function makeMockNewUser(externalId: string): MockStaffUserInstance { set role(r: Domain.Contexts.User.StaffRole.StaffRoleEntityReference | undefined) { _role = r; }, + requestCreate: vi.fn(), + requestRoleAssignment: vi.fn().mockImplementation((r: Domain.Contexts.User.StaffRole.StaffRoleEntityReference) => { + _role = r; + }), createdAt: new Date(), updatedAt: new Date(), schemaVersion: '1.0', @@ -80,6 +85,7 @@ function makeMockNewUser(externalId: string): MockStaffUserInstance { function makeDataSources(overrides: { existingUser?: Domain.Contexts.User.StaffUser.StaffUserEntityReference | null; + existingUserByEmail?: Domain.Contexts.User.StaffUser.StaffUserEntityReference | null; newUser?: MockStaffUserInstance; savedUser?: Domain.Contexts.User.StaffUser.StaffUserEntityReference; roleByEnterpriseAppRole?: Record; @@ -90,6 +96,7 @@ function makeDataSources(overrides: { const staffUserRepo = { getByExternalId: vi.fn().mockResolvedValue(overrides.existingUser ?? null), + get: vi.fn().mockResolvedValue(overrides.existingUserByEmail ?? newUser), getNewInstance: vi.fn().mockResolvedValue(newUser), save: overrides.saveShouldFail ? vi.fn().mockResolvedValue(undefined) : vi.fn().mockResolvedValue(savedUser), delete: vi.fn(), @@ -124,6 +131,7 @@ function makeDataSources(overrides: { StaffUser: { StaffUserReadRepo: { getByExternalId: vi.fn().mockResolvedValue(overrides.existingUser ?? null), + getByEmail: vi.fn().mockResolvedValue(overrides.existingUserByEmail ?? null), }, }, }, @@ -191,6 +199,27 @@ test.for(feature, ({ Scenario, BeforeEachScenario }) => { result = await createIfNotExists(dataSources)(command); }); + Scenario('Updates externalId when user exists by email', ({ Given, When, Then, And }) => { + Given('a staff user with email "first@example.com" already exists', () => { + existingUser = makeMockStaffUserRef('ext-old', { email: 'first@example.com' }); + dataSources = makeDataSources({ existingUserByEmail: existingUser, savedUser: { ...existingUser, externalId: 'ext-new' } }); + command = { ...command, externalId: 'ext-new' }; + }); + + When('I call createIfNotExists with externalId "ext-new"', async () => { + result = await createIfNotExists(dataSources)(command); + }); + + Then("it should update the existing user's externalId", () => { + const repo = (dataSources as unknown as { _staffUserRepo: { save: ReturnType } })._staffUserRepo; + expect(repo.save).toHaveBeenCalled(); + }); + + And('it should return the updated user', () => { + expect(result?.externalId).toBe('ext-new'); + }); + }); + Then('it should return the existing user', () => { expect(result).toBe(existingUser); }); @@ -428,4 +457,123 @@ test.for(feature, ({ Scenario, BeforeEachScenario }) => { expect((thrownError as Error).message).toBe('Unable to create staff user'); }); }); + + // ─── Empty email skips email lookup ─────────────────────────────────────── + + Scenario('Creates a new user when email is empty', ({ Given, When, Then, And }) => { + Given('no staff user with externalId "ext-noemail" exists', () => { + newUser = makeMockNewUser('ext-noemail'); + dataSources = makeDataSources({ existingUser: null, newUser }); + command = { ...command, externalId: 'ext-noemail' }; + }); + + And('the command has an empty email', () => { + command = { ...command, email: '' }; + }); + + When('I call createIfNotExists with externalId "ext-noemail"', async () => { + result = await createIfNotExists(dataSources)(command); + }); + + Then('it should not check for an existing user by email', () => { + const readRepo = ( + dataSources as unknown as { + readonlyDataSource: { User: { StaffUser: { StaffUserReadRepo: { getByEmail: ReturnType } } } }; + } + ).readonlyDataSource.User.StaffUser.StaffUserReadRepo; + expect(readRepo.getByEmail).not.toHaveBeenCalled(); + }); + + And('it should return the newly created user', () => { + expect(result).toBeDefined(); + expect(result?.externalId).toBe('ext-noemail'); + }); + }); + + // ─── Email lookup returns null → create new user ────────────────────────── + + Scenario('Creates a new user when email lookup returns no match', ({ Given, When, Then, And }) => { + Given('no staff user with externalId "ext-nomatch" exists', () => { + newUser = makeMockNewUser('ext-nomatch'); + // existingUserByEmail: null means getByEmail resolves null + dataSources = makeDataSources({ existingUser: null, existingUserByEmail: null, newUser }); + command = { ...command, externalId: 'ext-nomatch', email: 'other@example.com' }; + }); + + And('a staff user with email "other@example.com" does not exist', () => { + // getByEmail will return null (set up in Given) + }); + + When('I call createIfNotExists with externalId "ext-nomatch"', async () => { + result = await createIfNotExists(dataSources)(command); + }); + + Then('it should create a new user', () => { + const repo = (dataSources as unknown as { _staffUserRepo: { getNewInstance: ReturnType } })._staffUserRepo; + expect(repo.getNewInstance).toHaveBeenCalledWith('ext-nomatch', 'First', 'Last', 'other@example.com'); + }); + + And('it should return the newly created user', () => { + expect(result).toBeDefined(); + expect(result?.externalId).toBe('ext-nomatch'); + }); + }); + + // ─── Email-update save returns undefined → throws ───────────────────────── + + Scenario('Throws when update of externalId fails to save', ({ Given, When, Then, And }) => { + Given('a staff user with email "first@example.com" already exists', () => { + existingUser = makeMockStaffUserRef('ext-old', { email: 'first@example.com' }); + // saveShouldFail makes save() resolve undefined, triggering the throw + dataSources = makeDataSources({ existingUser: null, existingUserByEmail: existingUser, saveShouldFail: true }); + command = { ...command, externalId: 'ext-updfail', email: 'first@example.com' }; + }); + + And('the update transaction save returns undefined', () => { + // already wired up in Given via saveShouldFail: true + }); + + When('I call createIfNotExists with externalId "ext-updfail"', async () => { + try { + await createIfNotExists(dataSources)(command); + } catch (error) { + thrownError = error; + } + }); + + Then('it should throw an error with message "Unable to update staff user externalId"', () => { + expect(thrownError).toBeInstanceOf(Error); + expect((thrownError as Error).message).toBe('Unable to update staff user externalId'); + }); + }); + + // ─── Non-NotFound error from role lookup propagates ─────────────────────── + + Scenario('Propagates non-NotFound errors from role lookup', ({ Given, When, Then, And }) => { + const dbError = new Error('Database connection failed'); + + Given('no staff user with externalId "ext-rolerr" exists', () => { + newUser = makeMockNewUser('ext-rolerr'); + dataSources = makeDataSources({ existingUser: null, newUser }); + // Override getDefaultRoleByEnterpriseAppRole to throw a non-NotFound error + (dataSources as unknown as { _staffRoleRepo: { getDefaultRoleByEnterpriseAppRole: ReturnType } })._staffRoleRepo.getDefaultRoleByEnterpriseAppRole.mockRejectedValue(dbError); + command = { ...command, externalId: 'ext-rolerr', aadRoles: ['Staff.CaseManager'] }; + }); + + And('the role repository throws a non-NotFound error for any AAD role', () => { + // already wired up in Given + }); + + When('I call createIfNotExists with externalId "ext-rolerr"', async () => { + try { + await createIfNotExists(dataSources)(command); + } catch (error) { + thrownError = error; + } + }); + + Then('it should propagate the role repository error', () => { + expect(thrownError).toBe(dbError); + }); + }); }); diff --git a/packages/ocom/application-services/src/contexts/user/staff-user/create-if-not-exists.ts b/packages/ocom/application-services/src/contexts/user/staff-user/create-if-not-exists.ts index 98b25204c..0a9f15b65 100644 --- a/packages/ocom/application-services/src/contexts/user/staff-user/create-if-not-exists.ts +++ b/packages/ocom/application-services/src/contexts/user/staff-user/create-if-not-exists.ts @@ -40,6 +40,22 @@ export const createIfNotExists = (dataSources: DataSources) => { return existing; } + if (command.email) { + const existingByEmail = await dataSources.readonlyDataSource.User.StaffUser.StaffUserReadRepo.getByEmail(command.email); + if (existingByEmail) { + let updatedUser: Domain.Contexts.User.StaffUser.StaffUserEntityReference | undefined; + await dataSources.domainDataSource.User.StaffUser.StaffUserUnitOfWork.withTransaction(DomainRuntime.PassportFactory.forSystem({ canManageStaffRolesAndPermissions: true }), async (repository) => { + const staffUser = await repository.get(existingByEmail.id); + staffUser.externalId = command.externalId; + updatedUser = await repository.save(staffUser); + }); + if (!updatedUser) { + throw new Error('Unable to update staff user externalId'); + } + return updatedUser; + } + } + // Ensure the 4 default roles exist before creating the user await createDefaultRoles(dataSources)(); @@ -50,8 +66,10 @@ export const createIfNotExists = (dataSources: DataSources) => { await dataSources.domainDataSource.User.StaffUser.StaffUserUnitOfWork.withTransaction(DomainRuntime.PassportFactory.forSystem({ canManageStaffRolesAndPermissions: true }), async (repository) => { const newUser = await repository.getNewInstance(command.externalId, command.firstName, command.lastName, command.email); + newUser.requestCreate(newUser.id); + if (matchingRole) { - newUser.role = matchingRole; + newUser.requestRoleAssignment(matchingRole, `${matchingRole.roleName} assigned on creation`, newUser.id); } createdUser = await repository.save(newUser); diff --git a/packages/ocom/application-services/src/contexts/user/staff-user/features/assign-role.feature b/packages/ocom/application-services/src/contexts/user/staff-user/features/assign-role.feature new file mode 100644 index 000000000..0a105591d --- /dev/null +++ b/packages/ocom/application-services/src/contexts/user/staff-user/features/assign-role.feature @@ -0,0 +1,21 @@ +Feature: Assign role to staff user + + Scenario: Successfully assigns a role to an existing staff user + Given a staff user with id "user-123" exists + And a staff role with id "role-456" exists + When I call assignRole with staffUserId "user-123" and roleId "role-456" + Then the staff user should be saved with the role assigned + And the result should be the updated staff user + + Scenario: Throws an error when the staff role does not exist + Given a staff user with id "user-123" exists + And no staff role with id "role-999" exists in the repository + When I call assignRole with staffUserId "user-123" and roleId "role-999" + Then it should throw an error with message containing "role-999" + + Scenario: Throws an error when the unit of work returns no result + Given a staff user with id "user-123" exists + And a staff role with id "role-456" exists + And saving the staff user returns undefined + When I call assignRole with staffUserId "user-123" and roleId "role-456" + Then it should throw an error with message "Unable to assign role to staff user" diff --git a/packages/ocom/application-services/src/contexts/user/staff-user/features/create-if-not-exists.feature b/packages/ocom/application-services/src/contexts/user/staff-user/features/create-if-not-exists.feature index fb4c902e5..f14b421da 100644 --- a/packages/ocom/application-services/src/contexts/user/staff-user/features/create-if-not-exists.feature +++ b/packages/ocom/application-services/src/contexts/user/staff-user/features/create-if-not-exists.feature @@ -6,6 +6,12 @@ Feature: Create staff user if not exists Then it should return the existing user And it should not create a new user + Scenario: Updates externalId when user exists by email + Given a staff user with email "first@example.com" already exists + When I call createIfNotExists with externalId "ext-new" + Then it should update the existing user's externalId + And it should return the updated user + Scenario: Creates a new user when user does not exist Given no staff user with externalId "ext-456" exists And no matching AAD role is provided @@ -57,3 +63,29 @@ Feature: Create staff user if not exists Given no staff user with externalId "ext-err" exists When I call createIfNotExists with externalId "ext-err" Then it should throw an error with message "Unable to create staff user" + + Scenario: Creates a new user when email is empty + Given no staff user with externalId "ext-noemail" exists + And the command has an empty email + When I call createIfNotExists with externalId "ext-noemail" + Then it should not check for an existing user by email + And it should return the newly created user + + Scenario: Creates a new user when email lookup returns no match + Given no staff user with externalId "ext-nomatch" exists + And a staff user with email "other@example.com" does not exist + When I call createIfNotExists with externalId "ext-nomatch" + Then it should create a new user + And it should return the newly created user + + Scenario: Throws when update of externalId fails to save + Given a staff user with email "first@example.com" already exists + And the update transaction save returns undefined + When I call createIfNotExists with externalId "ext-updfail" + Then it should throw an error with message "Unable to update staff user externalId" + + Scenario: Propagates non-NotFound errors from role lookup + Given no staff user with externalId "ext-rolerr" exists + And the role repository throws a non-NotFound error for any AAD role + When I call createIfNotExists with externalId "ext-rolerr" + Then it should propagate the role repository error diff --git a/packages/ocom/application-services/src/contexts/user/staff-user/features/list.feature b/packages/ocom/application-services/src/contexts/user/staff-user/features/list.feature new file mode 100644 index 000000000..885343983 --- /dev/null +++ b/packages/ocom/application-services/src/contexts/user/staff-user/features/list.feature @@ -0,0 +1,11 @@ +Feature: List staff users + + Scenario: Returns all staff users when users exist + Given the repository contains two staff users + When I call list + Then it should return all staff users + + Scenario: Returns an empty list when no staff users exist + Given the repository contains no staff users + When I call list + Then it should return an empty list diff --git a/packages/ocom/application-services/src/contexts/user/staff-user/index.ts b/packages/ocom/application-services/src/contexts/user/staff-user/index.ts index 2c5b0d00b..1e41957c9 100644 --- a/packages/ocom/application-services/src/contexts/user/staff-user/index.ts +++ b/packages/ocom/application-services/src/contexts/user/staff-user/index.ts @@ -1,16 +1,22 @@ import type { Domain } from '@ocom/domain'; import type { DataSources } from '@ocom/persistence'; +import { assignRole, type StaffUserAssignRoleCommand } from './assign-role.ts'; import { createIfNotExists, type StaffUserCreateIfNotExistsCommand } from './create-if-not-exists.ts'; +import { list } from './list.ts'; import { queryByExternalId, type StaffUserQueryByExternalIdCommand } from './query-by-external-id.ts'; export interface StaffUserApplicationService { + assignRole: (command: StaffUserAssignRoleCommand) => Promise; createIfNotExists: (command: StaffUserCreateIfNotExistsCommand) => Promise; + list: () => Promise; queryByExternalId: (command: StaffUserQueryByExternalIdCommand) => Promise; } export const StaffUser = (dataSources: DataSources): StaffUserApplicationService => { return { + assignRole: assignRole(dataSources), createIfNotExists: createIfNotExists(dataSources), + list: list(dataSources), queryByExternalId: queryByExternalId(dataSources), }; }; diff --git a/packages/ocom/application-services/src/contexts/user/staff-user/list.test.ts b/packages/ocom/application-services/src/contexts/user/staff-user/list.test.ts new file mode 100644 index 000000000..d3799d65e --- /dev/null +++ b/packages/ocom/application-services/src/contexts/user/staff-user/list.test.ts @@ -0,0 +1,104 @@ +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { describeFeature, loadFeature } from '@amiceli/vitest-cucumber'; +import type { Domain } from '@ocom/domain'; +import type { DataSources } from '@ocom/persistence'; +import { expect, vi } from 'vitest'; +import { list } from './list.ts'; + +const test = { for: describeFeature }; +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const feature = await loadFeature(path.resolve(__dirname, 'features/list.feature')); + +// ─── Helpers ───────────────────────────────────────────────────────────────── + +function makeMockStaffUserRef(id: string, firstName: string): Domain.Contexts.User.StaffUser.StaffUserEntityReference { + return { + id, + externalId: `ext-${id}`, + firstName, + lastName: 'Doe', + displayName: `${firstName} Doe`, + email: `${firstName.toLowerCase()}@example.com`, + accessBlocked: false, + tags: [], + userType: 'staff', + role: undefined, + createdAt: new Date(), + updatedAt: new Date(), + schemaVersion: '1.0', + } as unknown as Domain.Contexts.User.StaffUser.StaffUserEntityReference; +} + +function makeDataSources(users: Domain.Contexts.User.StaffUser.StaffUserEntityReference[]): DataSources { + return { + readonlyDataSource: { + User: { + StaffUser: { + StaffUserReadRepo: { + getAll: vi.fn().mockResolvedValue(users), + }, + }, + }, + }, + } as unknown as DataSources; +} + +// ─── Tests ──────────────────────────────────────────────────────────────────── + +test.for(feature, ({ Scenario, BeforeEachScenario }) => { + let dataSources: DataSources; + let result: Domain.Contexts.User.StaffUser.StaffUserEntityReference[] | undefined; + let thrownError: unknown; + + BeforeEachScenario(() => { + result = undefined; + thrownError = undefined; + }); + + // ─── Users exist ────────────────────────────────────────────────────────── + + Scenario('Returns all staff users when users exist', ({ Given, When, Then }) => { + Given('the repository contains two staff users', () => { + const users = [makeMockStaffUserRef('user-001', 'Alice'), makeMockStaffUserRef('user-002', 'Bob')]; + dataSources = makeDataSources(users); + }); + + When('I call list', async () => { + try { + result = await list(dataSources)(); + } catch (e) { + thrownError = e; + } + }); + + Then('it should return all staff users', () => { + expect(thrownError).toBeUndefined(); + expect(result).toHaveLength(2); + const [first, second] = result as Domain.Contexts.User.StaffUser.StaffUserEntityReference[]; + expect(first?.id).toBe('user-001'); + expect(second?.id).toBe('user-002'); + }); + }); + + // ─── No users ───────────────────────────────────────────────────────────── + + Scenario('Returns an empty list when no staff users exist', ({ Given, When, Then }) => { + Given('the repository contains no staff users', () => { + dataSources = makeDataSources([]); + }); + + When('I call list', async () => { + try { + result = await list(dataSources)(); + } catch (e) { + thrownError = e; + } + }); + + Then('it should return an empty list', () => { + expect(thrownError).toBeUndefined(); + expect(result).toHaveLength(0); + }); + }); +}); diff --git a/packages/ocom/application-services/src/contexts/user/staff-user/list.ts b/packages/ocom/application-services/src/contexts/user/staff-user/list.ts new file mode 100644 index 000000000..b6cbc1463 --- /dev/null +++ b/packages/ocom/application-services/src/contexts/user/staff-user/list.ts @@ -0,0 +1,8 @@ +import type { Domain } from '@ocom/domain'; +import type { DataSources } from '@ocom/persistence'; + +export const list = (dataSources: DataSources) => { + return async (): Promise => { + return await dataSources.readonlyDataSource.User.StaffUser.StaffUserReadRepo.getAll(); + }; +}; diff --git a/packages/ocom/data-sources-mongoose-models/src/models/role/staff-role.model.ts b/packages/ocom/data-sources-mongoose-models/src/models/role/staff-role.model.ts index da291d9ed..6099c443f 100644 --- a/packages/ocom/data-sources-mongoose-models/src/models/role/staff-role.model.ts +++ b/packages/ocom/data-sources-mongoose-models/src/models/role/staff-role.model.ts @@ -66,6 +66,16 @@ export interface StaffRoleTechAdminPermissions { export interface StaffRoleUserPermissions { id?: ObjectId; canManageUsers: boolean; + canAssignStaffRoles: boolean; + canViewStaffUsers: boolean; +} + +export interface StaffRoleRolePermissions { + id?: ObjectId; + canViewRoles: boolean; + canAddRole: boolean; + canEditRole: boolean; + canRemoveRole: boolean; } export interface StaffRolePermissions { @@ -77,6 +87,7 @@ export interface StaffRolePermissions { financePermissions: StaffRoleFinancePermissions; techAdminPermissions: StaffRoleTechAdminPermissions; userPermissions: StaffRoleUserPermissions; + staffRolePermissions: StaffRoleRolePermissions; propertyPermissions: StaffRolePropertyPermissions; } @@ -148,7 +159,15 @@ const StaffRoleSchema = new Schema, StaffRole>( } as SchemaDefinition, userPermissions: { canManageUsers: { type: Boolean, required: true, default: false }, + canAssignStaffRoles: { type: Boolean, required: true, default: false }, + canViewStaffUsers: { type: Boolean, required: true, default: false }, } as SchemaDefinition, + staffRolePermissions: { + canViewRoles: { type: Boolean, required: true, default: false }, + canAddRole: { type: Boolean, required: true, default: false }, + canEditRole: { type: Boolean, required: true, default: false }, + canRemoveRole: { type: Boolean, required: true, default: false }, + } as SchemaDefinition, propertyPermissions: { canManageProperties: { type: Boolean, required: true, default: false }, canEditOwnProperty: { type: Boolean, required: true, default: false }, diff --git a/packages/ocom/data-sources-mongoose-models/src/models/user/staff-user.model.ts b/packages/ocom/data-sources-mongoose-models/src/models/user/staff-user.model.ts index 4083e1f38..8420b3f9b 100644 --- a/packages/ocom/data-sources-mongoose-models/src/models/user/staff-user.model.ts +++ b/packages/ocom/data-sources-mongoose-models/src/models/user/staff-user.model.ts @@ -1,8 +1,42 @@ -import { type Model, type ObjectId, type PopulatedDoc, Schema } from 'mongoose'; +import type { MongooseSeedwork } from '@cellix/mongoose-seedwork'; +import { type Model, type ObjectId, type PopulatedDoc, Schema, type Types } from 'mongoose'; import { Patterns } from '../../patterns.ts'; import * as StaffRole from '../role/staff-role.model.ts'; import { type User, type UserModelType, userOptions } from './user.model.ts'; +export interface StaffUserActivityDetail extends MongooseSeedwork.SubdocumentBase { + activityType: string; + activityDescription: string; + activityBy: ObjectId; + readonly createdAt: Date; + readonly updatedAt: Date; +} + +const StaffUserActivityDetailSchema = new Schema, StaffUserActivityDetail>( + { + activityType: { + type: String, + required: true, + enum: ['CREATED', 'UPDATED', 'ROLE_ASSIGNED', 'ROLE_REMOVED', 'BLOCKED', 'UNBLOCKED'], + }, + activityDescription: { + type: String, + maxlength: 2000, + required: true, + }, + activityBy: { + type: Schema.Types.ObjectId, + ref: 'staff-user', + required: true, + index: true, + }, + }, + { + timestamps: true, + versionKey: 'version', + }, +); + export interface StaffUser extends User { role?: PopulatedDoc | ObjectId; firstName: string; @@ -14,6 +48,7 @@ export interface StaffUser extends User { userType?: string; accessBlocked: boolean; tags?: string[]; + activityLog: Types.DocumentArray; } const StaffUserSchema = new Schema, StaffUser>( @@ -67,6 +102,7 @@ const StaffUserSchema = new Schema, StaffUser>( type: [String], required: false, }, + activityLog: [StaffUserActivityDetailSchema], }, userOptions, ).index({ email: 1 }, { sparse: true }); diff --git a/packages/ocom/domain/src/domain/contexts/user/staff-role/features/staff-role.feature b/packages/ocom/domain/src/domain/contexts/user/staff-role/features/staff-role.feature index 0dad1edde..b751e6feb 100644 --- a/packages/ocom/domain/src/domain/contexts/user/staff-role/features/staff-role.feature +++ b/packages/ocom/domain/src/domain/contexts/user/staff-role/features/staff-role.feature @@ -12,12 +12,12 @@ Feature: StaffRole # roleName Scenario: Changing the roleName with permission to manage staff roles Given a StaffRole aggregate with permission to manage staff roles and permissions - When I set the roleName to "Manager" + When I set the roleName to "manager" Then the staff role's roleName should be "Manager" Scenario: Changing the roleName with system account permission Given a StaffRole aggregate with system account permission - When I set the roleName to "Manager" + When I set the roleName to "manager" Then the staff role's roleName should be "Manager" Scenario: Changing the roleName without permission @@ -79,6 +79,80 @@ Feature: StaffRole And the updatedAt property should return the correct date And the schemaVersion property should return the correct version + # enterpriseAppRole + Scenario: Getting the enterpriseAppRole property + Given a StaffRole aggregate with permission to manage staff roles and permissions + Then the enterpriseAppRole should return the initial value + + Scenario: Changing the enterpriseAppRole with permission to manage staff roles + Given a StaffRole aggregate with permission to manage staff roles and permissions + When I set the enterpriseAppRole to "Staff.CaseManager" + Then the staff role's enterpriseAppRole should be "Staff.CaseManager" + + Scenario: Changing the enterpriseAppRole with system account permission + Given a StaffRole aggregate with system account permission + When I set the enterpriseAppRole to "Staff.Finance" + Then the staff role's enterpriseAppRole should be "Staff.Finance" + + Scenario: Changing the enterpriseAppRole without permission + Given a StaffRole aggregate without permission to manage staff roles and permissions or system account + When I try to set the enterpriseAppRole to "Staff.CaseManager" + Then a PermissionError should be thrown for enterpriseAppRole + + Scenario: Changing the enterpriseAppRole to an invalid value + Given a StaffRole aggregate with permission to manage staff roles and permissions + When I try to set the enterpriseAppRole to an invalid value + Then an error should be thrown for the invalid enterpriseAppRole + + # getDefaultRoleNames + Scenario: Getting the list of default role names + When I call getDefaultRoleNames + Then it should return the four canonical default role name strings + + # default factory methods + Scenario: Creating a new default Case Manager role + When I call getNewDefaultCaseManagerInstance + Then the role name should be "Default Case Manager" + And the enterpriseAppRole should be "Staff.CaseManager" + And isDefault should be true + And community canManageCommunities should be true + And community canManageStaffRolesAndPermissions should be true + And finance canManageFinance should be false + And techAdmin canManageTechAdmin should be false + And user canManageUsers should be true + + Scenario: Creating a new default Service Line Owner role + When I call getNewDefaultServiceLineOwnerInstance + Then the role name should be "Default Service Line Owner" + And the enterpriseAppRole should be "Staff.ServiceLineOwner" + And isDefault should be true + And community canManageCommunities should be true + And community canManageStaffRolesAndPermissions should be true + And finance canManageFinance should be false + And techAdmin canManageTechAdmin should be false + And user canManageUsers should be true + + Scenario: Creating a new default Finance role + When I call getNewDefaultFinanceInstance + Then the role name should be "Default Finance" + And the enterpriseAppRole should be "Staff.Finance" + And isDefault should be true + And community canManageCommunities should be false + And community canManageStaffRolesAndPermissions should be true + And finance canManageFinance should be true + And techAdmin canManageTechAdmin should be false + And user canManageUsers should be true + + Scenario: Creating a new default Tech Admin role + When I call getNewDefaultTechAdminInstance + Then the role name should be "Default Tech Admin" + And the enterpriseAppRole should be "Staff.TechAdmin" + And isDefault should be true + And community canManageCommunities should be true + And community canManageStaffRolesAndPermissions should be true + And finance canManageFinance should be true + And techAdmin canManageTechAdmin should be true + And user canManageUsers should be true # getDefaultRoleNames Scenario: Getting default role names When I call getDefaultRoleNames diff --git a/packages/ocom/domain/src/domain/contexts/user/staff-role/features/staff-role.repository.feature b/packages/ocom/domain/src/domain/contexts/user/staff-role/features/staff-role.repository.feature new file mode 100644 index 000000000..109af4d0c --- /dev/null +++ b/packages/ocom/domain/src/domain/contexts/user/staff-role/features/staff-role.repository.feature @@ -0,0 +1,41 @@ +Feature: StaffRoleRepository contract + + Background: + Given a mock implementation of StaffRoleRepository that satisfies the full interface + + Scenario: getNewInstance resolves with a StaffRole for the given name + When I call getNewInstance with name "Supervisor" + Then it should resolve with a StaffRole whose roleName is "Supervisor" + And the StaffRole isDefault should be false + + Scenario: getNewDefaultCaseManagerInstance resolves with a default CaseManager role + When I call getNewDefaultCaseManagerInstance + Then it should resolve with a StaffRole whose roleName is "Default Case Manager" + And the StaffRole isDefault should be true + + Scenario: getNewDefaultServiceLineOwnerInstance resolves with a default ServiceLineOwner role + When I call getNewDefaultServiceLineOwnerInstance + Then it should resolve with a StaffRole whose roleName is "Default Service Line Owner" + And the StaffRole isDefault should be true + + Scenario: getNewDefaultFinanceInstance resolves with a default Finance role + When I call getNewDefaultFinanceInstance + Then it should resolve with a StaffRole whose roleName is "Default Finance" + And the StaffRole isDefault should be true + + Scenario: getNewDefaultTechAdminInstance resolves with a default TechAdmin role + When I call getNewDefaultTechAdminInstance + Then it should resolve with a StaffRole whose roleName is "Default Tech Admin" + And the StaffRole isDefault should be true + + Scenario: getById resolves with a StaffRole for a known id + When I call getById with "role-1" + Then it should resolve with a StaffRole whose id is "role-1" + + Scenario: getByRoleName resolves with a StaffRole for a known roleName + When I call getByRoleName with "Manager" + Then it should resolve with a StaffRole whose roleName is "Manager" + + Scenario: getDefaultRoleByEnterpriseAppRole resolves with a default StaffRole + When I call getDefaultRoleByEnterpriseAppRole with "Staff.CaseManager" + Then it should resolve with a StaffRole whose isDefault is true diff --git a/packages/ocom/domain/src/domain/contexts/user/staff-role/index.ts b/packages/ocom/domain/src/domain/contexts/user/staff-role/index.ts index 0724acbd8..3901acc8c 100644 --- a/packages/ocom/domain/src/domain/contexts/user/staff-role/index.ts +++ b/packages/ocom/domain/src/domain/contexts/user/staff-role/index.ts @@ -14,6 +14,10 @@ export type { StaffRoleFinancePermissionsEntityReference, StaffRoleFinancePermissionsProps, } from './staff-role-finance-permissions.ts'; +export type { + StaffRoleRolePermissionsEntityReference, + StaffRoleRolePermissionsProps, +} from './staff-role-role-permissions.ts'; export type { StaffRolePermissionsEntityReference, StaffRolePermissionsProps, diff --git a/packages/ocom/domain/src/domain/contexts/user/staff-role/staff-role-defaults.test.ts b/packages/ocom/domain/src/domain/contexts/user/staff-role/staff-role-defaults.test.ts index 3314befb7..6696bcf75 100644 --- a/packages/ocom/domain/src/domain/contexts/user/staff-role/staff-role-defaults.test.ts +++ b/packages/ocom/domain/src/domain/contexts/user/staff-role/staff-role-defaults.test.ts @@ -74,6 +74,7 @@ test('applyDefaultSpec sets CaseManager permissions correctly and marks default' const role = StaffRole.getNewDefaultCaseManagerInstance(makeBaseProps(), passport); expect(role.permissions.communityPermissions.canManageCommunities).toBe(true); + expect(role.permissions.communityPermissions.canManageStaffRolesAndPermissions).toBe(true); expect(role.permissions.financePermissions.canManageFinance).toBe(false); expect(role.permissions.techAdminPermissions.canManageTechAdmin).toBe(false); expect(role.permissions.userPermissions.canManageUsers).toBe(true); @@ -85,9 +86,10 @@ test('applyDefaultSpec sets Finance permissions correctly and marks default', () const role = StaffRole.getNewDefaultFinanceInstance(makeBaseProps(), passport); expect(role.permissions.communityPermissions.canManageCommunities).toBe(false); + expect(role.permissions.communityPermissions.canManageStaffRolesAndPermissions).toBe(true); expect(role.permissions.financePermissions.canManageFinance).toBe(true); expect(role.permissions.techAdminPermissions.canManageTechAdmin).toBe(false); - expect(role.permissions.userPermissions.canManageUsers).toBe(false); + expect(role.permissions.userPermissions.canManageUsers).toBe(true); expect(role.isDefault).toBe(true); }); @@ -96,6 +98,7 @@ test('applyDefaultSpec sets ServiceLineOwner permissions correctly and marks def const role = StaffRole.getNewDefaultServiceLineOwnerInstance(makeBaseProps(), passport); expect(role.permissions.communityPermissions.canManageCommunities).toBe(true); + expect(role.permissions.communityPermissions.canManageStaffRolesAndPermissions).toBe(true); expect(role.permissions.financePermissions.canManageFinance).toBe(false); expect(role.permissions.techAdminPermissions.canManageTechAdmin).toBe(false); expect(role.permissions.userPermissions.canManageUsers).toBe(true); diff --git a/packages/ocom/domain/src/domain/contexts/user/staff-role/staff-role-permissions.test.ts b/packages/ocom/domain/src/domain/contexts/user/staff-role/staff-role-permissions.test.ts index c73dcecf7..172327a10 100644 --- a/packages/ocom/domain/src/domain/contexts/user/staff-role/staff-role-permissions.test.ts +++ b/packages/ocom/domain/src/domain/contexts/user/staff-role/staff-role-permissions.test.ts @@ -11,6 +11,7 @@ import { StaffRoleServiceTicketPermissions } from './staff-role-service-ticket-p import { StaffRoleTechAdminPermissions } from './staff-role-tech-admin-permissions.ts'; import { StaffRoleUserPermissions } from './staff-role-user-permissions.ts'; import { StaffRoleViolationTicketPermissions } from './staff-role-violation-ticket-permissions.ts'; +import type { StaffRoleRolePermissions } from './staff-role-role-permissions.ts'; const test = { for: describeFeature }; const __dirname = path.dirname(fileURLToPath(import.meta.url)); @@ -32,6 +33,7 @@ function makeProps() { financePermissions: {} as StaffRoleFinancePermissions, techAdminPermissions: {} as StaffRoleTechAdminPermissions, userPermissions: {} as StaffRoleUserPermissions, + staffRolePermissions: {} as StaffRoleRolePermissions, }; } diff --git a/packages/ocom/domain/src/domain/contexts/user/staff-role/staff-role-permissions.ts b/packages/ocom/domain/src/domain/contexts/user/staff-role/staff-role-permissions.ts index 7e45a39f6..4f0f8677d 100644 --- a/packages/ocom/domain/src/domain/contexts/user/staff-role/staff-role-permissions.ts +++ b/packages/ocom/domain/src/domain/contexts/user/staff-role/staff-role-permissions.ts @@ -4,6 +4,7 @@ import type { UserVisa } from '../user.visa.ts'; import { StaffRoleCommunityPermissions, type StaffRoleCommunityPermissionsEntityReference, type StaffRoleCommunityPermissionsProps } from './staff-role-community-permissions.ts'; import { StaffRoleFinancePermissions, type StaffRoleFinancePermissionsEntityReference, type StaffRoleFinancePermissionsProps } from './staff-role-finance-permissions.ts'; import { StaffRolePropertyPermissions, type StaffRolePropertyPermissionsEntityReference, type StaffRolePropertyPermissionsProps } from './staff-role-property-permissions.ts'; +import { StaffRoleRolePermissions, type StaffRoleRolePermissionsEntityReference, type StaffRoleRolePermissionsProps } from './staff-role-role-permissions.ts'; import { StaffRoleServicePermissions, type StaffRoleServicePermissionsEntityReference, type StaffRoleServicePermissionsProps } from './staff-role-service-permissions.ts'; import { StaffRoleServiceTicketPermissions, type StaffRoleServiceTicketPermissionsEntityReference, type StaffRoleServiceTicketPermissionsProps } from './staff-role-service-ticket-permissions.ts'; import { StaffRoleTechAdminPermissions, type StaffRoleTechAdminPermissionsEntityReference, type StaffRoleTechAdminPermissionsProps } from './staff-role-tech-admin-permissions.ts'; @@ -19,13 +20,14 @@ export interface StaffRolePermissionsProps extends ValueObjectProps { readonly financePermissions: StaffRoleFinancePermissionsProps; readonly techAdminPermissions: StaffRoleTechAdminPermissionsProps; readonly userPermissions: StaffRoleUserPermissionsProps; + readonly staffRolePermissions: StaffRoleRolePermissionsProps; } export interface StaffRolePermissionsEntityReference extends Readonly< Omit< StaffRolePermissionsProps, - 'communityPermissions' | 'propertyPermissions' | 'serviceTicketPermissions' | 'servicePermissions' | 'violationTicketPermissions' | 'financePermissions' | 'techAdminPermissions' | 'userPermissions' + 'communityPermissions' | 'propertyPermissions' | 'serviceTicketPermissions' | 'servicePermissions' | 'violationTicketPermissions' | 'financePermissions' | 'techAdminPermissions' | 'userPermissions' | 'staffRolePermissions' > > { readonly communityPermissions: StaffRoleCommunityPermissionsEntityReference; @@ -36,6 +38,7 @@ export interface StaffRolePermissionsEntityReference readonly financePermissions: StaffRoleFinancePermissionsEntityReference; readonly techAdminPermissions: StaffRoleTechAdminPermissionsEntityReference; readonly userPermissions: StaffRoleUserPermissionsEntityReference; + readonly staffRolePermissions: StaffRoleRolePermissionsEntityReference; } export class StaffRolePermissions extends ValueObject implements StaffRolePermissionsEntityReference { @@ -47,27 +50,96 @@ export class StaffRolePermissions extends ValueObject } get communityPermissions(): StaffRoleCommunityPermissions { - return new StaffRoleCommunityPermissions(this.props.communityPermissions, this.visa); + return new StaffRoleCommunityPermissions( + this.props.communityPermissions ?? { + canManageCommunities: false, + canManageStaffRolesAndPermissions: false, + canManageAllCommunities: false, + canDeleteCommunities: false, + canChangeCommunityOwner: false, + canReIndexSearchCollections: false, + }, + this.visa, + ); } get propertyPermissions(): StaffRolePropertyPermissions { - return new StaffRolePropertyPermissions(this.props.propertyPermissions, this.visa); + return new StaffRolePropertyPermissions( + this.props.propertyPermissions ?? { + canManageProperties: false, + canEditOwnProperty: false, + }, + this.visa, + ); } get serviceTicketPermissions(): StaffRoleServiceTicketPermissions { - return new StaffRoleServiceTicketPermissions(this.props.serviceTicketPermissions, this.visa); + return new StaffRoleServiceTicketPermissions( + this.props.serviceTicketPermissions ?? { + canCreateTickets: false, + canManageTickets: false, + canAssignTickets: false, + canUpdateTickets: false, + canWorkOnTickets: false, + }, + this.visa, + ); } get servicePermissions(): StaffRoleServicePermissions { - return new StaffRoleServicePermissions(this.props.servicePermissions, this.visa); + return new StaffRoleServicePermissions(this.props.servicePermissions ?? { canManageServices: false }, this.visa); } get violationTicketPermissions(): StaffRoleViolationTicketPermissions { - return new StaffRoleViolationTicketPermissions(this.props.violationTicketPermissions, this.visa); + return new StaffRoleViolationTicketPermissions( + this.props.violationTicketPermissions ?? { + canCreateTickets: false, + canManageTickets: false, + canAssignTickets: false, + canUpdateTickets: false, + canWorkOnTickets: false, + }, + this.visa, + ); } get financePermissions(): StaffRoleFinancePermissions { - return new StaffRoleFinancePermissions(this.props.financePermissions, this.visa); + return new StaffRoleFinancePermissions( + this.props.financePermissions ?? { + canManageFinance: false, + canViewGLBatchSummaries: false, + canViewFinanceConfigs: false, + canCreateFinanceConfigs: false, + }, + this.visa, + ); } get techAdminPermissions(): StaffRoleTechAdminPermissions { - return new StaffRoleTechAdminPermissions(this.props.techAdminPermissions, this.visa); + return new StaffRoleTechAdminPermissions( + this.props.techAdminPermissions ?? { + canManageTechAdmin: false, + canViewDatabaseExplorer: false, + canViewBlobExplorer: false, + canViewQueueDashboard: false, + canSendQueueMessages: false, + }, + this.visa, + ); } get userPermissions(): StaffRoleUserPermissions { - return new StaffRoleUserPermissions(this.props.userPermissions, this.visa); + return new StaffRoleUserPermissions( + this.props.userPermissions ?? { + canManageUsers: false, + canAssignStaffRoles: false, + canViewStaffUsers: false, + }, + this.visa, + ); + } + get staffRolePermissions(): StaffRoleRolePermissions { + return new StaffRoleRolePermissions( + this.props.staffRolePermissions ?? { + canViewRoles: false, + canAddRole: false, + canEditRole: false, + canRemoveRole: false, + }, + this.visa, + ); } } diff --git a/packages/ocom/domain/src/domain/contexts/user/staff-role/staff-role-role-permissions.ts b/packages/ocom/domain/src/domain/contexts/user/staff-role/staff-role-role-permissions.ts new file mode 100644 index 000000000..c4dbcc81f --- /dev/null +++ b/packages/ocom/domain/src/domain/contexts/user/staff-role/staff-role-role-permissions.ts @@ -0,0 +1,61 @@ +import { PermissionError } from '@cellix/domain-seedwork/domain-entity'; +import type { ValueObjectProps } from '@cellix/domain-seedwork/value-object'; +import { ValueObject } from '@cellix/domain-seedwork/value-object'; +import type { UserVisa } from '../user.visa.ts'; + +interface StaffRoleRolePermissionsSpec { + canViewRoles: boolean; + canAddRole: boolean; + canEditRole: boolean; + canRemoveRole: boolean; +} + +export interface StaffRoleRolePermissionsProps extends StaffRoleRolePermissionsSpec, ValueObjectProps {} +export interface StaffRoleRolePermissionsEntityReference extends Readonly {} + +export class StaffRoleRolePermissions extends ValueObject implements StaffRoleRolePermissionsEntityReference { + private readonly visa: UserVisa; + + constructor(props: StaffRoleRolePermissionsProps, visa: UserVisa) { + super(props); + this.visa = visa; + } + + private validateVisa() { + if (!this.visa.determineIf((permissions) => permissions.canManageStaffRolesAndPermissions || permissions.isSystemAccount)) { + throw new PermissionError('Cannot set permission'); + } + } + + get canViewRoles(): boolean { + return this.props.canViewRoles ?? false; + } + set canViewRoles(value: boolean) { + this.validateVisa(); + this.props.canViewRoles = value; + } + + get canAddRole(): boolean { + return this.props.canAddRole ?? false; + } + set canAddRole(value: boolean) { + this.validateVisa(); + this.props.canAddRole = value; + } + + get canEditRole(): boolean { + return this.props.canEditRole ?? false; + } + set canEditRole(value: boolean) { + this.validateVisa(); + this.props.canEditRole = value; + } + + get canRemoveRole(): boolean { + return this.props.canRemoveRole ?? false; + } + set canRemoveRole(value: boolean) { + this.validateVisa(); + this.props.canRemoveRole = value; + } +} diff --git a/packages/ocom/domain/src/domain/contexts/user/staff-role/staff-role-user-permissions.test.ts b/packages/ocom/domain/src/domain/contexts/user/staff-role/staff-role-user-permissions.test.ts index 969d1e7ab..5913868bf 100644 --- a/packages/ocom/domain/src/domain/contexts/user/staff-role/staff-role-user-permissions.test.ts +++ b/packages/ocom/domain/src/domain/contexts/user/staff-role/staff-role-user-permissions.test.ts @@ -18,6 +18,8 @@ function makeVisa({ canManageStaffRolesAndPermissions = true, isSystemAccount = function makeProps(overrides = {}) { return { canManageUsers: false, + canAssignStaffRoles: false, + canViewStaffUsers: false, ...overrides, }; } diff --git a/packages/ocom/domain/src/domain/contexts/user/staff-role/staff-role-user-permissions.ts b/packages/ocom/domain/src/domain/contexts/user/staff-role/staff-role-user-permissions.ts index 358c7a7c4..cf678f3c2 100644 --- a/packages/ocom/domain/src/domain/contexts/user/staff-role/staff-role-user-permissions.ts +++ b/packages/ocom/domain/src/domain/contexts/user/staff-role/staff-role-user-permissions.ts @@ -5,6 +5,8 @@ import type { UserVisa } from '../user.visa.ts'; interface StaffRoleUserPermissionsSpec { canManageUsers: boolean; + canAssignStaffRoles: boolean; + canViewStaffUsers: boolean; } export interface StaffRoleUserPermissionsProps extends StaffRoleUserPermissionsSpec, ValueObjectProps {} @@ -31,4 +33,20 @@ export class StaffRoleUserPermissions extends ValueObject ({ + determineIf: (fn: (p: { canManageStaffRolesAndPermissions: boolean; isSystemAccount: boolean }) => boolean) => fn({ canManageStaffRolesAndPermissions: true, isSystemAccount: false }), + }), + }, + } as unknown as Passport; +} + +function makeBaseProps(overrides: Partial = {}): StaffRoleProps { + return { + id: 'role-1', + roleName: 'Support', + isDefault: false, + enterpriseAppRole: '', + permissions: { + communityPermissions: { + canManageCommunities: false, + canManageStaffRolesAndPermissions: false, + canManageAllCommunities: false, + canDeleteCommunities: false, + canChangeCommunityOwner: false, + canReIndexSearchCollections: false, + }, + propertyPermissions: { canManageProperties: false, canEditOwnProperty: false }, + servicePermissions: { canManageServices: false }, + serviceTicketPermissions: { canCreateTickets: false, canManageTickets: false, canAssignTickets: false, canWorkOnTickets: false }, + violationTicketPermissions: { canCreateTickets: false, canManageTickets: false, canAssignTickets: false, canWorkOnTickets: false }, + financePermissions: { canManageFinance: false, canViewGLBatchSummaries: false, canViewFinanceConfigs: false, canCreateFinanceConfigs: false }, + techAdminPermissions: { canManageTechAdmin: false }, + userPermissions: { canManageUsers: false }, + } as unknown as StaffRoleProps['permissions'], + roleType: 'staff-role', + createdAt: new Date(), + updatedAt: new Date(), + schemaVersion: '1.0', + ...overrides, + }; +} + +/** + * Factory that builds a mock StaffRoleRepository whose methods delegate to + * actual StaffRole static factory methods, satisfying the full interface contract. + */ +function makeMockRepository(passport: Passport): StaffRoleRepository { + return { + // From Repository> + get: vi.fn(async (id: string) => new StaffRole(makeBaseProps({ id }), passport)), + save: vi.fn(async (item: StaffRole) => item), + + // Domain-specific methods + getNewInstance: vi.fn(async (name: string) => StaffRole.getNewInstance(makeBaseProps({ roleName: name }), passport, name, false)), + getNewDefaultCaseManagerInstance: vi.fn(async () => StaffRole.getNewDefaultCaseManagerInstance(makeBaseProps({ roleName: 'Default.CaseManager', isDefault: true }), passport)), + getNewDefaultServiceLineOwnerInstance: vi.fn(async () => StaffRole.getNewDefaultServiceLineOwnerInstance(makeBaseProps({ roleName: 'Default.ServiceLineOwner', isDefault: true }), passport)), + getNewDefaultFinanceInstance: vi.fn(async () => StaffRole.getNewDefaultFinanceInstance(makeBaseProps({ roleName: 'Default.Finance', isDefault: true }), passport)), + getNewDefaultTechAdminInstance: vi.fn(async () => StaffRole.getNewDefaultTechAdminInstance(makeBaseProps({ roleName: 'Default.TechAdmin', isDefault: true }), passport)), + getById: vi.fn(async (id: string) => new StaffRole(makeBaseProps({ id }), passport)), + getByRoleName: vi.fn(async (roleName: string) => new StaffRole(makeBaseProps({ roleName }), passport)), + getDefaultRoleByEnterpriseAppRole: vi.fn(async (enterpriseAppRole: string) => new StaffRole(makeBaseProps({ enterpriseAppRole, isDefault: true }), passport)), + } satisfies StaffRoleRepository; +} + +// ─── Tests ──────────────────────────────────────────────────────────────────── + +test.for(feature, ({ Scenario, Background, BeforeEachScenario }) => { + let passport: Passport; + let repo: StaffRoleRepository; + let result: StaffRole | StaffRoleEntityReference | undefined; + + BeforeEachScenario(() => { + passport = makePassport(); + repo = makeMockRepository(passport); + result = undefined; + }); + + Background(({ Given }) => { + Given('a mock implementation of StaffRoleRepository that satisfies the full interface', () => { + // repo already initialised in BeforeEachScenario + }); + }); + + // ─── getNewInstance ─────────────────────────────────────────────────────── + + Scenario('getNewInstance resolves with a StaffRole for the given name', ({ When, Then, And }) => { + When('I call getNewInstance with name "Supervisor"', async () => { + result = await repo.getNewInstance('Supervisor'); + }); + Then('it should resolve with a StaffRole whose roleName is "Supervisor"', () => { + expect(result).toBeDefined(); + expect((result as StaffRoleEntityReference).roleName).toBe('Supervisor'); + }); + And('the StaffRole isDefault should be false', () => { + expect((result as StaffRoleEntityReference).isDefault).toBe(false); + }); + }); + + // ─── getNewDefaultCaseManagerInstance ──────────────────────────────────── + + Scenario('getNewDefaultCaseManagerInstance resolves with a default CaseManager role', ({ When, Then, And }) => { + When('I call getNewDefaultCaseManagerInstance', async () => { + result = await repo.getNewDefaultCaseManagerInstance(); + }); + Then('it should resolve with a StaffRole whose roleName is "Default Case Manager"', () => { + expect((result as StaffRoleEntityReference).roleName).toBe('Default Case Manager'); + }); + And('the StaffRole isDefault should be true', () => { + expect((result as StaffRoleEntityReference).isDefault).toBe(true); + }); + }); + + // ─── getNewDefaultServiceLineOwnerInstance ──────────────────────────────── + + Scenario('getNewDefaultServiceLineOwnerInstance resolves with a default ServiceLineOwner role', ({ When, Then, And }) => { + When('I call getNewDefaultServiceLineOwnerInstance', async () => { + result = await repo.getNewDefaultServiceLineOwnerInstance(); + }); + Then('it should resolve with a StaffRole whose roleName is "Default Service Line Owner"', () => { + expect((result as StaffRoleEntityReference).roleName).toBe('Default Service Line Owner'); + }); + And('the StaffRole isDefault should be true', () => { + expect((result as StaffRoleEntityReference).isDefault).toBe(true); + }); + }); + + // ─── getNewDefaultFinanceInstance ──────────────────────────────────────── + + Scenario('getNewDefaultFinanceInstance resolves with a default Finance role', ({ When, Then, And }) => { + When('I call getNewDefaultFinanceInstance', async () => { + result = await repo.getNewDefaultFinanceInstance(); + }); + Then('it should resolve with a StaffRole whose roleName is "Default Finance"', () => { + expect((result as StaffRoleEntityReference).roleName).toBe('Default Finance'); + }); + And('the StaffRole isDefault should be true', () => { + expect((result as StaffRoleEntityReference).isDefault).toBe(true); + }); + }); + + // ─── getNewDefaultTechAdminInstance ────────────────────────────────────── + + Scenario('getNewDefaultTechAdminInstance resolves with a default TechAdmin role', ({ When, Then, And }) => { + When('I call getNewDefaultTechAdminInstance', async () => { + result = await repo.getNewDefaultTechAdminInstance(); + }); + Then('it should resolve with a StaffRole whose roleName is "Default Tech Admin"', () => { + expect((result as StaffRoleEntityReference).roleName).toBe('Default Tech Admin'); + }); + And('the StaffRole isDefault should be true', () => { + expect((result as StaffRoleEntityReference).isDefault).toBe(true); + }); + }); + + // ─── getById ───────────────────────────────────────────────────────────── + + Scenario('getById resolves with a StaffRole for a known id', ({ When, Then }) => { + When('I call getById with "role-1"', async () => { + result = await repo.getById('role-1'); + }); + Then('it should resolve with a StaffRole whose id is "role-1"', () => { + expect((result as StaffRoleEntityReference).id).toBe('role-1'); + }); + }); + + // ─── getByRoleName ──────────────────────────────────────────────────────── + + Scenario('getByRoleName resolves with a StaffRole for a known roleName', ({ When, Then }) => { + When('I call getByRoleName with "Manager"', async () => { + result = await repo.getByRoleName('Manager'); + }); + Then('it should resolve with a StaffRole whose roleName is "Manager"', () => { + expect((result as StaffRoleEntityReference).roleName).toBe('Manager'); + }); + }); + + // ─── getDefaultRoleByEnterpriseAppRole ──────────────────────────────────── + + Scenario('getDefaultRoleByEnterpriseAppRole resolves with a default StaffRole', ({ When, Then }) => { + When('I call getDefaultRoleByEnterpriseAppRole with "Staff.CaseManager"', async () => { + result = await repo.getDefaultRoleByEnterpriseAppRole('Staff.CaseManager'); + }); + Then('it should resolve with a StaffRole whose isDefault is true', () => { + expect((result as StaffRoleEntityReference).isDefault).toBe(true); + }); + }); +}); diff --git a/packages/ocom/domain/src/domain/contexts/user/staff-role/staff-role.test.ts b/packages/ocom/domain/src/domain/contexts/user/staff-role/staff-role.test.ts index 28fe19c9d..bf2553dd2 100644 --- a/packages/ocom/domain/src/domain/contexts/user/staff-role/staff-role.test.ts +++ b/packages/ocom/domain/src/domain/contexts/user/staff-role/staff-role.test.ts @@ -6,7 +6,7 @@ import { expect, vi } from 'vitest'; import { RoleDeletedReassignEvent } from '../../../events/types/role-deleted-reassign.ts'; import type { Passport } from '../../passport.ts'; import { StaffRole, type StaffRoleEntityReference, type StaffRoleProps } from './staff-role.ts'; -import { StaffRolePermissions, type StaffRolePermissionsProps } from './staff-role-permissions.ts'; +import { StaffRolePermissions } from './staff-role-permissions.ts'; const test = { for: describeFeature }; const __dirname = path.dirname(fileURLToPath(import.meta.url)); @@ -37,52 +37,20 @@ function makeBaseProps(overrides: Partial = {}): StaffRoleProps }; } -function makePermissionsProps(overrides: Partial = {}): StaffRolePermissionsProps { +/** Props with fully initialised mutable permission sub-objects, required for static factory methods */ +function makeFactoryProps(overrides: Partial = {}): StaffRoleProps { return { - communityPermissions: { - canManageCommunities: false, - canManageStaffRolesAndPermissions: false, - canManageAllCommunities: false, - canDeleteCommunities: false, - canChangeCommunityOwner: false, - canReIndexSearchCollections: false, - }, - propertyPermissions: { - canManageProperties: false, - canEditOwnProperty: false, - }, - serviceTicketPermissions: { - canCreateTickets: false, - canManageTickets: false, - canAssignTickets: false, - canWorkOnTickets: false, - }, - servicePermissions: { - canManageServices: false, - }, - violationTicketPermissions: { - canCreateTickets: false, - canManageTickets: false, - canAssignTickets: false, - canWorkOnTickets: false, - }, - financePermissions: { - canManageFinance: false, - canViewGLBatchSummaries: false, - canViewFinanceConfigs: false, - canCreateFinanceConfigs: false, - }, - techAdminPermissions: { - canManageTechAdmin: false, - canViewDatabaseExplorer: false, - canViewBlobExplorer: false, - canViewQueueDashboard: false, - canSendQueueMessages: false, - }, - userPermissions: { - canManageUsers: false, - }, - ...overrides, + ...makeBaseProps(overrides), + permissions: { + communityPermissions: {} as Record, + propertyPermissions: {} as Record, + serviceTicketPermissions: {} as Record, + servicePermissions: {} as Record, + violationTicketPermissions: {} as Record, + financePermissions: {} as Record, + techAdminPermissions: {} as Record, + userPermissions: {} as Record, + } as unknown as StaffRolePermissions, }; } @@ -131,8 +99,8 @@ test.for(feature, ({ Scenario, Background, BeforeEachScenario }) => { passport = makePassport(true, false); staffRole = new StaffRole(makeBaseProps(), passport); }); - When('I set the roleName to "Manager"', () => { - staffRole.roleName = 'Manager'; + When('I set the roleName to "manager"', () => { + staffRole.roleName = 'manager'; }); Then('the staff role\'s roleName should be "Manager"', () => { expect(staffRole.roleName).toBe('Manager'); @@ -144,8 +112,8 @@ test.for(feature, ({ Scenario, Background, BeforeEachScenario }) => { passport = makePassport(false, true); staffRole = new StaffRole(makeBaseProps(), passport); }); - When('I set the roleName to "Manager"', () => { - staffRole.roleName = 'Manager'; + When('I set the roleName to "manager"', () => { + staffRole.roleName = 'manager'; }); Then('the staff role\'s roleName should be "Manager"', () => { expect(staffRole.roleName).toBe('Manager'); @@ -335,54 +303,216 @@ test.for(feature, ({ Scenario, Background, BeforeEachScenario }) => { }); }); - // getDefaultRoleNames - Scenario('Getting default role names', ({ When, Then, And }) => { - let roleNames: string[]; + // ─── enterpriseAppRole ──────────────────────────────────────────────────── + + Scenario('Getting the enterpriseAppRole property', ({ Given, Then }) => { + Given('a StaffRole aggregate with permission to manage staff roles and permissions', () => { + passport = makePassport(true, false); + staffRole = new StaffRole(makeBaseProps({ enterpriseAppRole: '' }), passport); + }); + Then('the enterpriseAppRole should return the initial value', () => { + expect(staffRole.enterpriseAppRole).toBe(''); + }); + }); + + Scenario('Changing the enterpriseAppRole with permission to manage staff roles', ({ Given, When, Then }) => { + Given('a StaffRole aggregate with permission to manage staff roles and permissions', () => { + passport = makePassport(true, false); + staffRole = new StaffRole(makeBaseProps(), passport); + }); + When('I set the enterpriseAppRole to "Staff.CaseManager"', () => { + staffRole.enterpriseAppRole = 'Staff.CaseManager'; + }); + Then('the staff role\'s enterpriseAppRole should be "Staff.CaseManager"', () => { + expect(staffRole.enterpriseAppRole).toBe('Staff.CaseManager'); + }); + }); + + Scenario('Changing the enterpriseAppRole with system account permission', ({ Given, When, Then }) => { + Given('a StaffRole aggregate with system account permission', () => { + passport = makePassport(false, true); + staffRole = new StaffRole(makeBaseProps(), passport); + }); + When('I set the enterpriseAppRole to "Staff.Finance"', () => { + staffRole.enterpriseAppRole = 'Staff.Finance'; + }); + Then('the staff role\'s enterpriseAppRole should be "Staff.Finance"', () => { + expect(staffRole.enterpriseAppRole).toBe('Staff.Finance'); + }); + }); + + Scenario('Changing the enterpriseAppRole without permission', ({ Given, When, Then }) => { + let changeWithoutPermission: () => void; + Given('a StaffRole aggregate without permission to manage staff roles and permissions or system account', () => { + passport = makePassport(false, false); + staffRole = new StaffRole(makeBaseProps(), passport); + }); + When('I try to set the enterpriseAppRole to "Staff.CaseManager"', () => { + changeWithoutPermission = () => { + staffRole.enterpriseAppRole = 'Staff.CaseManager'; + }; + }); + Then('a PermissionError should be thrown for enterpriseAppRole', () => { + expect(changeWithoutPermission).toThrow(PermissionError); + expect(changeWithoutPermission).toThrow('Cannot set enterprise app role'); + }); + }); + + Scenario('Changing the enterpriseAppRole to an invalid value', ({ Given, When, Then }) => { + let changeToInvalid: () => void; + Given('a StaffRole aggregate with permission to manage staff roles and permissions', () => { + passport = makePassport(true, false); + staffRole = new StaffRole(makeBaseProps(), passport); + }); + When('I try to set the enterpriseAppRole to an invalid value', () => { + changeToInvalid = () => { + staffRole.enterpriseAppRole = 'Invalid.Role.That.Does.Not.Exist'; + }; + }); + Then('an error should be thrown for the invalid enterpriseAppRole', () => { + expect(changeToInvalid).toThrow(); + }); + }); + + // ─── getDefaultRoleNames ────────────────────────────────────────────────── + + Scenario('Getting the list of default role names', ({ When, Then }) => { + let defaultNames: string[]; When('I call getDefaultRoleNames', () => { - roleNames = StaffRole.getDefaultRoleNames(); + defaultNames = StaffRole.getDefaultRoleNames(); }); - Then('the result should contain "Default.CaseManager"', () => { - expect(roleNames).toContain('Default.CaseManager'); + Then('it should return the four canonical default role name strings', () => { + expect(defaultNames).toHaveLength(4); + expect(defaultNames).toContain('Default.CaseManager'); + expect(defaultNames).toContain('Default.ServiceLineOwner'); + expect(defaultNames).toContain('Default.Finance'); + expect(defaultNames).toContain('Default.TechAdmin'); }); - And('the result should contain "Default.ServiceLineOwner"', () => { - expect(roleNames).toContain('Default.ServiceLineOwner'); + }); + + // ─── default factory methods ────────────────────────────────────────────── + + Scenario('Creating a new default Case Manager role', ({ When, Then, And }) => { + let role: StaffRole; + When('I call getNewDefaultCaseManagerInstance', () => { + role = StaffRole.getNewDefaultCaseManagerInstance(makeFactoryProps(), makePassport(true, true)); + }); + Then('the role name should be "Default Case Manager"', () => { + expect(role.roleName).toBe('Default Case Manager'); + }); + And('the enterpriseAppRole should be "Staff.CaseManager"', () => { + expect(role.enterpriseAppRole).toBe('Staff.CaseManager'); + }); + And('isDefault should be true', () => { + expect(role.isDefault).toBe(true); }); - And('the result should contain "Default.Finance"', () => { - expect(roleNames).toContain('Default.Finance'); + And('community canManageCommunities should be true', () => { + expect(role.permissions.communityPermissions.canManageCommunities).toBe(true); }); - And('the result should contain "Default.TechAdmin"', () => { - expect(roleNames).toContain('Default.TechAdmin'); + And('community canManageStaffRolesAndPermissions should be true', () => { + expect(role.permissions.communityPermissions.canManageStaffRolesAndPermissions).toBe(true); }); - And('the result should have exactly 4 names', () => { - expect(roleNames).toHaveLength(4); + And('finance canManageFinance should be false', () => { + expect(role.permissions.financePermissions.canManageFinance).toBe(false); + }); + And('techAdmin canManageTechAdmin should be false', () => { + expect(role.permissions.techAdminPermissions.canManageTechAdmin).toBe(false); + }); + And('user canManageUsers should be true', () => { + expect(role.permissions.userPermissions.canManageUsers).toBe(true); }); }); - Scenario('Creating a default tech admin role', ({ When, Then, And }) => { - let techAdminRole: StaffRole; - When('I create a default tech admin staff role', () => { - techAdminRole = StaffRole.getNewDefaultTechAdminInstance(makeBaseProps({ permissions: makePermissionsProps() }), passport); + Scenario('Creating a new default Service Line Owner role', ({ When, Then, And }) => { + let role: StaffRole; + When('I call getNewDefaultServiceLineOwnerInstance', () => { + role = StaffRole.getNewDefaultServiceLineOwnerInstance(makeFactoryProps(), makePassport(true, true)); + }); + Then('the role name should be "Default Service Line Owner"', () => { + expect(role.roleName).toBe('Default Service Line Owner'); + }); + And('the enterpriseAppRole should be "Staff.ServiceLineOwner"', () => { + expect(role.enterpriseAppRole).toBe('Staff.ServiceLineOwner'); + }); + And('isDefault should be true', () => { + expect(role.isDefault).toBe(true); }); - Then('the roleName should be "Default Tech Admin"', () => { - expect(techAdminRole.roleName).toBe('Default Tech Admin'); + And('community canManageCommunities should be true', () => { + expect(role.permissions.communityPermissions.canManageCommunities).toBe(true); + }); + And('community canManageStaffRolesAndPermissions should be true', () => { + expect(role.permissions.communityPermissions.canManageStaffRolesAndPermissions).toBe(true); + }); + And('finance canManageFinance should be false', () => { + expect(role.permissions.financePermissions.canManageFinance).toBe(false); + }); + And('techAdmin canManageTechAdmin should be false', () => { + expect(role.permissions.techAdminPermissions.canManageTechAdmin).toBe(false); + }); + And('user canManageUsers should be true', () => { + expect(role.permissions.userPermissions.canManageUsers).toBe(true); + }); + }); + + Scenario('Creating a new default Finance role', ({ When, Then, And }) => { + let role: StaffRole; + When('I call getNewDefaultFinanceInstance', () => { + role = StaffRole.getNewDefaultFinanceInstance(makeFactoryProps(), makePassport(true, true)); + }); + Then('the role name should be "Default Finance"', () => { + expect(role.roleName).toBe('Default Finance'); + }); + And('the enterpriseAppRole should be "Staff.Finance"', () => { + expect(role.enterpriseAppRole).toBe('Staff.Finance'); + }); + And('isDefault should be true', () => { + expect(role.isDefault).toBe(true); + }); + And('community canManageCommunities should be false', () => { + expect(role.permissions.communityPermissions.canManageCommunities).toBe(false); + }); + And('community canManageStaffRolesAndPermissions should be true', () => { + expect(role.permissions.communityPermissions.canManageStaffRolesAndPermissions).toBe(true); + }); + And('finance canManageFinance should be true', () => { + expect(role.permissions.financePermissions.canManageFinance).toBe(true); + }); + And('techAdmin canManageTechAdmin should be false', () => { + expect(role.permissions.techAdminPermissions.canManageTechAdmin).toBe(false); + }); + And('user canManageUsers should be true', () => { + expect(role.permissions.userPermissions.canManageUsers).toBe(true); + }); + }); + + Scenario('Creating a new default Tech Admin role', ({ When, Then, And }) => { + let role: StaffRole; + When('I call getNewDefaultTechAdminInstance', () => { + role = StaffRole.getNewDefaultTechAdminInstance(makeFactoryProps(), makePassport(true, true)); + }); + Then('the role name should be "Default Tech Admin"', () => { + expect(role.roleName).toBe('Default Tech Admin'); }); And('the enterpriseAppRole should be "Staff.TechAdmin"', () => { - expect(techAdminRole.enterpriseAppRole).toBe('Staff.TechAdmin'); + expect(role.enterpriseAppRole).toBe('Staff.TechAdmin'); + }); + And('isDefault should be true', () => { + expect(role.isDefault).toBe(true); }); - And('the tech admin role should allow managing communities', () => { - expect(techAdminRole.permissions.communityPermissions.canManageCommunities).toBe(true); + And('community canManageCommunities should be true', () => { + expect(role.permissions.communityPermissions.canManageCommunities).toBe(true); }); - And('the tech admin role should allow managing staff roles and permissions', () => { - expect(techAdminRole.permissions.communityPermissions.canManageStaffRolesAndPermissions).toBe(true); + And('community canManageStaffRolesAndPermissions should be true', () => { + expect(role.permissions.communityPermissions.canManageStaffRolesAndPermissions).toBe(true); }); - And('the tech admin role should allow managing finance', () => { - expect(techAdminRole.permissions.financePermissions.canManageFinance).toBe(true); + And('finance canManageFinance should be true', () => { + expect(role.permissions.financePermissions.canManageFinance).toBe(true); }); - And('the tech admin role should allow managing tech admin', () => { - expect(techAdminRole.permissions.techAdminPermissions.canManageTechAdmin).toBe(true); + And('techAdmin canManageTechAdmin should be true', () => { + expect(role.permissions.techAdminPermissions.canManageTechAdmin).toBe(true); }); - And('the tech admin role should allow managing users', () => { - expect(techAdminRole.permissions.userPermissions.canManageUsers).toBe(true); + And('user canManageUsers should be true', () => { + expect(role.permissions.userPermissions.canManageUsers).toBe(true); }); }); }); diff --git a/packages/ocom/domain/src/domain/contexts/user/staff-role/staff-role.ts b/packages/ocom/domain/src/domain/contexts/user/staff-role/staff-role.ts index b915aeccc..1bec5d72e 100644 --- a/packages/ocom/domain/src/domain/contexts/user/staff-role/staff-role.ts +++ b/packages/ocom/domain/src/domain/contexts/user/staff-role/staff-role.ts @@ -53,9 +53,13 @@ export class StaffRole extends AggregateRoot extends AggregateRoot extends AggregateRoot extends AggregateRoot extends AggregateRoot permissions.canManageStaffRolesAndPermissions || permissions.isSystemAccount)) { throw new PermissionError('Cannot set role name'); } - this.props.roleName = new ValueObjects.RoleName(roleName).valueOf(); + const normalizedRoleName = new ValueObjects.RoleName(roleName).valueOf(); + this.props.roleName = normalizedRoleName.charAt(0).toUpperCase() + normalizedRoleName.slice(1); } get enterpriseAppRole() { diff --git a/packages/ocom/domain/src/domain/contexts/user/staff-user/features/staff-user.feature b/packages/ocom/domain/src/domain/contexts/user/staff-user/features/staff-user.feature index 1262726a0..855edbc6c 100644 --- a/packages/ocom/domain/src/domain/contexts/user/staff-user/features/staff-user.feature +++ b/packages/ocom/domain/src/domain/contexts/user/staff-user/features/staff-user.feature @@ -138,3 +138,43 @@ Feature: StaffUser And the createdAt property should return the correct date And the updatedAt property should return the correct date And the schemaVersion property should return the correct version + + # activityLog + Scenario: Logging a general update via requestAddUpdate + Given a StaffUser aggregate with permission to manage staff roles and permissions + When I call requestAddUpdate with description "Profile updated" and activityByStaffUserId "staff-99" + Then an activity log entry with activityType "UPDATED" and description "Profile updated" should be added + + Scenario: requestAddUpdate without permission throws PermissionError + Given a StaffUser aggregate without permission to manage staff roles and permissions + When I try to call requestAddUpdate with description "Profile updated" and activityByStaffUserId "staff-99" + Then a PermissionError should be thrown + + Scenario: Logging a role assignment via requestRoleAssignment + Given a StaffUser aggregate with permission to manage staff roles and permissions + When I call requestRoleAssignment with a valid role, description "Role assigned", and activityByStaffUserId "staff-99" + Then the staff user's role should be updated + And an activity log entry with activityType "ROLE_ASSIGNED" and description "Role assigned" should be added + + Scenario: Logging a role removal via requestRoleRemoval + Given a StaffUser aggregate with permission to manage staff roles and permissions + When I call requestRoleRemoval with description "Role removed" and activityByStaffUserId "staff-99" + Then the staff user's role should be undefined + And an activity log entry with activityType "ROLE_REMOVED" and description "Role removed" should be added + + Scenario: Logging a block via requestBlock + Given a StaffUser aggregate with permission to manage staff roles and permissions + When I call requestBlock with description "User blocked" and activityByStaffUserId "staff-99" + Then the staff user's accessBlocked should be true + And an activity log entry with activityType "BLOCKED" and description "User blocked" should be added + + Scenario: Logging an unblock via requestUnblock + Given a StaffUser aggregate with permission to manage staff roles and permissions + When I call requestUnblock with description "User unblocked" and activityByStaffUserId "staff-99" + Then the staff user's accessBlocked should be false + And an activity log entry with activityType "UNBLOCKED" and description "User unblocked" should be added + + Scenario: Logging a create action via requestCreate + Given a StaffUser aggregate with permission to manage staff roles and permissions + When I call requestCreate with activityByStaffUserId "staff-99" + Then an activity log entry with activityType "CREATED" and description "User created" should be added diff --git a/packages/ocom/domain/src/domain/contexts/user/staff-user/index.ts b/packages/ocom/domain/src/domain/contexts/user/staff-user/index.ts index be786b89b..0c9e375de 100644 --- a/packages/ocom/domain/src/domain/contexts/user/staff-user/index.ts +++ b/packages/ocom/domain/src/domain/contexts/user/staff-user/index.ts @@ -5,3 +5,10 @@ export { type StaffUserProps, } from './staff-user.ts'; export type { StaffUserUnitOfWork } from './staff-user.uow.ts'; +export { + StaffUserActivityLog, + type StaffUserActivityLogCreateProps, + type StaffUserActivityLogEntityReference, + type StaffUserActivityLogProps, +} from './staff-user-activity-log.entity.ts'; +export * as StaffUserActivityLogValueObjects from './staff-user-activity-log.value-objects.ts'; diff --git a/packages/ocom/domain/src/domain/contexts/user/staff-user/staff-user-activity-log.entity.additional.test.ts b/packages/ocom/domain/src/domain/contexts/user/staff-user/staff-user-activity-log.entity.additional.test.ts new file mode 100644 index 000000000..3ba3da8f0 --- /dev/null +++ b/packages/ocom/domain/src/domain/contexts/user/staff-user/staff-user-activity-log.entity.additional.test.ts @@ -0,0 +1,93 @@ +import { PermissionError } from '@cellix/domain-seedwork/domain-entity'; +import { describe, expect, it } from 'vitest'; +import type { UserVisa } from '../user.visa.ts'; +import { StaffUserActivityLog, type StaffUserActivityLogProps } from './staff-user-activity-log.entity.ts'; +import * as ValueObjects from './staff-user-activity-log.value-objects.ts'; + +function createVisa(isSystemAccount: boolean, canManageStaffRolesAndPermissions = false): UserVisa { + return { + determineIf: (func) => + func({ + canManageEndUsers: false, + canManageStaffRolesAndPermissions, + canManageStaffUsers: false, + canManageVendorUsers: false, + isEditingOwnAccount: false, + isSystemAccount, + }), + }; +} + +function createProps(overrides: Partial = {}): StaffUserActivityLogProps { + return { + id: 'activity-1', + activityType: '', + activityDescription: '', + activityByStaffUserId: '', + createdAt: new Date('2020-01-01T00:00:00Z'), + updatedAt: new Date('2020-01-01T00:00:00Z'), + ...overrides, + }; +} + +describe('staff-user-activity-log additional coverage', () => { + it('creates a new activity log entry when requester is a system account', () => { + const activityLog = StaffUserActivityLog.getNewInstance(createProps(), createVisa(true), { + activityType: new ValueObjects.ActivityTypeCode(ValueObjects.ActivityTypeCodes.Created), + activityDescription: new ValueObjects.Description('User created'), + activityByStaffUserId: 'staff-99', + }); + + expect(activityLog.activityType).toBe('CREATED'); + expect(activityLog.activityDescription).toBe('User created'); + expect(activityLog.activityByStaffUserId).toBe('staff-99'); + }); + + it('creates a new activity log entry for non-system account during creation flow', () => { + const activityLog = StaffUserActivityLog.getNewInstance(createProps(), createVisa(false), { + activityType: new ValueObjects.ActivityTypeCode(ValueObjects.ActivityTypeCodes.Created), + activityDescription: new ValueObjects.Description('User created'), + activityByStaffUserId: 'staff-99', + }); + + expect(activityLog.activityType).toBe('CREATED'); + expect(activityLog.activityDescription).toBe('User created'); + expect(activityLog.activityByStaffUserId).toBe('staff-99'); + }); + + it('throws when non-system account tries to mutate activityType or activityDescription', () => { + const activityLog = new StaffUserActivityLog( + createProps({ + activityType: ValueObjects.ActivityTypeCodes.Created, + activityDescription: 'User created', + activityByStaffUserId: 'staff-99', + }), + createVisa(false), + ); + + expect(() => { + activityLog.activityType = new ValueObjects.ActivityTypeCode(ValueObjects.ActivityTypeCodes.Updated); + }).toThrow(PermissionError); + + expect(() => { + activityLog.activityDescription = new ValueObjects.Description('Updated description'); + }).toThrow(PermissionError); + }); + + it('allows manager account to mutate activityType or activityDescription', () => { + const activityLog = new StaffUserActivityLog( + createProps({ + activityType: ValueObjects.ActivityTypeCodes.Created, + activityDescription: 'User created', + activityByStaffUserId: 'staff-99', + }), + createVisa(false, true), + ); + + activityLog.activityType = new ValueObjects.ActivityTypeCode(ValueObjects.ActivityTypeCodes.Updated); + activityLog.activityDescription = new ValueObjects.Description('Updated description'); + + expect(activityLog.activityType).toBe('UPDATED'); + expect(activityLog.activityDescription).toBe('Updated description'); + }); +}); diff --git a/packages/ocom/domain/src/domain/contexts/user/staff-user/staff-user-activity-log.entity.ts b/packages/ocom/domain/src/domain/contexts/user/staff-user/staff-user-activity-log.entity.ts new file mode 100644 index 000000000..0ec9edd8b --- /dev/null +++ b/packages/ocom/domain/src/domain/contexts/user/staff-user/staff-user-activity-log.entity.ts @@ -0,0 +1,85 @@ +import { PermissionError, DomainEntity } from '@cellix/domain-seedwork/domain-entity'; +import type { DomainEntityProps } from '@cellix/domain-seedwork/domain-entity'; +import type { UserVisa } from '../user.visa.ts'; +import type * as ValueObjects from './staff-user-activity-log.value-objects.ts'; + +export interface StaffUserActivityLogProps extends DomainEntityProps { + activityType: string; + activityDescription: string; + activityByStaffUserId: string; + readonly createdAt: Date; + readonly updatedAt: Date; +} + +export interface StaffUserActivityLogEntityReference extends Readonly {} + +export interface StaffUserActivityLogCreateProps { + activityType: ValueObjects.ActivityTypeCode; + activityDescription: ValueObjects.Description; + activityByStaffUserId: string; +} + +export class StaffUserActivityLog extends DomainEntity implements StaffUserActivityLogEntityReference { + private readonly visa: UserVisa; + private isNew: boolean = false; + + constructor(props: StaffUserActivityLogProps, visa: UserVisa, createProps?: StaffUserActivityLogCreateProps) { + super(props); + this.visa = visa; + + if (createProps) { + this.isNew = true; + this.activityType = createProps.activityType; + this.activityDescription = createProps.activityDescription; + this.activityByStaffUserId = createProps.activityByStaffUserId; + this.isNew = false; + } + } + + public static getNewInstance(newProps: StaffUserActivityLogProps, visa: UserVisa, createProps: StaffUserActivityLogCreateProps): StaffUserActivityLog { + return new StaffUserActivityLog(newProps, visa, createProps); + } + + private validateVisa(): void { + if (this.isNew) { + return; + } + if (!this.visa.determineIf((permissions) => permissions.isSystemAccount || permissions.canManageStaffRolesAndPermissions)) { + throw new PermissionError('Unauthorized'); + } + } + + get activityType(): string { + return this.props.activityType; + } + set activityType(activityTypeCode: ValueObjects.ActivityTypeCode) { + this.validateVisa(); + this.props.activityType = activityTypeCode.valueOf(); + } + + get activityDescription(): string { + return this.props.activityDescription; + } + set activityDescription(activityDescription: ValueObjects.Description) { + this.validateVisa(); + this.props.activityDescription = activityDescription.valueOf(); + } + + get activityByStaffUserId(): string { + return this.props.activityByStaffUserId; + } + private set activityByStaffUserId(id: string) { + if (!this.isNew) { + throw new Error('activityByStaffUserId can only be set during creation'); + } + this.validateVisa(); + this.props.activityByStaffUserId = id; + } + + get createdAt(): Date { + return this.props.createdAt; + } + get updatedAt(): Date { + return this.props.updatedAt; + } +} diff --git a/packages/ocom/domain/src/domain/contexts/user/staff-user/staff-user-activity-log.value-objects.ts b/packages/ocom/domain/src/domain/contexts/user/staff-user/staff-user-activity-log.value-objects.ts new file mode 100644 index 000000000..ee4456fb1 --- /dev/null +++ b/packages/ocom/domain/src/domain/contexts/user/staff-user/staff-user-activity-log.value-objects.ts @@ -0,0 +1,13 @@ +import { VOSet, VOString } from '@lucaspaganini/value-objects'; + +export const ActivityTypeCodes = { + Created: 'CREATED', + Updated: 'UPDATED', + RoleAssigned: 'ROLE_ASSIGNED', + RoleRemoved: 'ROLE_REMOVED', + Blocked: 'BLOCKED', + Unblocked: 'UNBLOCKED', +} as const; + +export class Description extends VOString({ trim: true, maxLength: 2000 }) {} +export class ActivityTypeCode extends VOSet(Object.values(ActivityTypeCodes)) {} diff --git a/packages/ocom/domain/src/domain/contexts/user/staff-user/staff-user.test.ts b/packages/ocom/domain/src/domain/contexts/user/staff-user/staff-user.test.ts index 3d7cafc90..1ce2096e8 100644 --- a/packages/ocom/domain/src/domain/contexts/user/staff-user/staff-user.test.ts +++ b/packages/ocom/domain/src/domain/contexts/user/staff-user/staff-user.test.ts @@ -15,14 +15,14 @@ import type { StaffRoleEntityReference, StaffRoleProps } from '../staff-role/sta const __dirname = path.dirname(fileURLToPath(import.meta.url)); const feature = await loadFeature(path.resolve(__dirname, 'features/staff-user.feature')); -function makePassport(canManageStaffRolesAndPermissions = true): Passport { +function makePassport(canManageStaffRolesAndPermissions = true, isSystemAccount = false): Passport { return vi.mocked({ user: { forStaffUser: vi.fn(() => ({ - determineIf: (fn: (p: { canManageStaffRolesAndPermissions: boolean }) => boolean) => fn({ canManageStaffRolesAndPermissions }), + determineIf: (fn: (p: { canManageStaffRolesAndPermissions: boolean; isSystemAccount: boolean }) => boolean) => fn({ canManageStaffRolesAndPermissions, isSystemAccount }), })), forStaffRole: vi.fn(() => ({ - determineIf: (fn: (p: { canManageStaffRolesAndPermissions: boolean }) => boolean) => fn({ canManageStaffRolesAndPermissions }), + determineIf: (fn: (p: { canManageStaffRolesAndPermissions: boolean; isSystemAccount: boolean }) => boolean) => fn({ canManageStaffRolesAndPermissions, isSystemAccount }), })), }, } as unknown as Passport); @@ -37,6 +37,7 @@ function makeBaseProps(overrides: Partial = {}): StaffUserProps roleName: 'test role', roleType: 'staff-role', } as StaffRoleProps); + const activityLogItems: import('./staff-user-activity-log.entity.ts').StaffUserActivityLogProps[] = []; return { id: 'staff-1', firstName: 'Alice', @@ -56,6 +57,33 @@ function makeBaseProps(overrides: Partial = {}): StaffUserProps setRoleRef: (role: StaffRoleEntityReference | undefined) => { _role = role; }, + activityLog: { + get items() { + return activityLogItems as ReadonlyArray; + }, + addItem: (item: import('./staff-user-activity-log.entity.ts').StaffUserActivityLogProps) => { + activityLogItems.push(item); + }, + getNewItem: () => { + const item = { + id: `activity-${activityLogItems.length}`, + activityType: '', + activityDescription: '', + activityByStaffUserId: '', + createdAt: new Date(), + updatedAt: new Date(), + } as import('./staff-user-activity-log.entity.ts').StaffUserActivityLogProps; + activityLogItems.push(item); + return item; + }, + removeItem: (item: import('./staff-user-activity-log.entity.ts').StaffUserActivityLogProps) => { + const idx = activityLogItems.indexOf(item); + if (idx > -1) activityLogItems.splice(idx, 1); + }, + removeAll: () => { + activityLogItems.splice(0); + }, + }, ...overrides, }; } @@ -505,6 +533,137 @@ test.for(feature, ({ Scenario, Background, BeforeEachScenario }) => { }); }); + // activityLog + Scenario('Logging a general update via requestAddUpdate', ({ Given, When, Then }) => { + Given('a StaffUser aggregate with permission to manage staff roles and permissions', () => { + passport = makePassport(true); + staffUser = new StaffUser(makeBaseProps(), passport); + }); + When('I call requestAddUpdate with description "Profile updated" and activityByStaffUserId "staff-99"', () => { + staffUser.requestAddUpdate('Profile updated', 'staff-99'); + }); + Then('an activity log entry with activityType "UPDATED" and description "Profile updated" should be added', () => { + const entries = staffUser.activityLog; + expect(entries).toHaveLength(1); + expect(entries.at(0)?.activityType).toBe('UPDATED'); + expect(entries.at(0)?.activityDescription).toBe('Profile updated'); + expect(entries.at(0)?.activityByStaffUserId).toBe('staff-99'); + }); + }); + + Scenario('requestAddUpdate without permission throws PermissionError', ({ Given, When, Then }) => { + let action: () => void; + Given('a StaffUser aggregate without permission to manage staff roles and permissions', () => { + passport = makePassport(false); + staffUser = new StaffUser(makeBaseProps(), passport); + }); + When('I try to call requestAddUpdate with description "Profile updated" and activityByStaffUserId "staff-99"', () => { + action = () => staffUser.requestAddUpdate('Profile updated', 'staff-99'); + }); + Then('a PermissionError should be thrown', () => { + expect(action).toThrow(PermissionError); + }); + }); + + Scenario('Logging a role assignment via requestRoleAssignment', ({ Given, When, Then, And }) => { + const newRole = vi.mocked({ id: 'role-99', roleName: 'New Role', roleType: 'staff-role' } as import('../staff-role/staff-role.ts').StaffRoleEntityReference); + Given('a StaffUser aggregate with permission to manage staff roles and permissions', () => { + passport = makePassport(true); + staffUser = new StaffUser(makeBaseProps(), passport); + }); + When('I call requestRoleAssignment with a valid role, description "Role assigned", and activityByStaffUserId "staff-99"', () => { + staffUser.requestRoleAssignment(newRole, 'Role assigned', 'staff-99'); + }); + Then("the staff user's role should be updated", () => { + expect(staffUser.role?.id).toBe('role-99'); + }); + And('an activity log entry with activityType "ROLE_ASSIGNED" and description "Role assigned" should be added', () => { + const entries = staffUser.activityLog; + expect(entries).toHaveLength(1); + expect(entries.at(0)?.activityType).toBe('ROLE_ASSIGNED'); + expect(entries.at(0)?.activityDescription).toBe('Role assigned'); + expect(entries.at(0)?.activityByStaffUserId).toBe('staff-99'); + }); + }); + + Scenario('Logging a role removal via requestRoleRemoval', ({ Given, When, Then, And }) => { + Given('a StaffUser aggregate with permission to manage staff roles and permissions', () => { + passport = makePassport(true); + staffUser = new StaffUser(makeBaseProps(), passport); + }); + When('I call requestRoleRemoval with description "Role removed" and activityByStaffUserId "staff-99"', () => { + staffUser.requestRoleRemoval('Role removed', 'staff-99'); + }); + Then("the staff user's role should be undefined", () => { + expect(staffUser.role).toBeUndefined(); + }); + And('an activity log entry with activityType "ROLE_REMOVED" and description "Role removed" should be added', () => { + const entries = staffUser.activityLog; + expect(entries).toHaveLength(1); + expect(entries.at(0)?.activityType).toBe('ROLE_REMOVED'); + expect(entries.at(0)?.activityDescription).toBe('Role removed'); + expect(entries.at(0)?.activityByStaffUserId).toBe('staff-99'); + }); + }); + + Scenario('Logging a block via requestBlock', ({ Given, When, Then, And }) => { + Given('a StaffUser aggregate with permission to manage staff roles and permissions', () => { + passport = makePassport(true); + staffUser = new StaffUser(makeBaseProps(), passport); + }); + When('I call requestBlock with description "User blocked" and activityByStaffUserId "staff-99"', () => { + staffUser.requestBlock('User blocked', 'staff-99'); + }); + Then("the staff user's accessBlocked should be true", () => { + expect(staffUser.accessBlocked).toBe(true); + }); + And('an activity log entry with activityType "BLOCKED" and description "User blocked" should be added', () => { + const entries = staffUser.activityLog; + expect(entries).toHaveLength(1); + expect(entries.at(0)?.activityType).toBe('BLOCKED'); + expect(entries.at(0)?.activityDescription).toBe('User blocked'); + expect(entries.at(0)?.activityByStaffUserId).toBe('staff-99'); + }); + }); + + Scenario('Logging an unblock via requestUnblock', ({ Given, When, Then, And }) => { + Given('a StaffUser aggregate with permission to manage staff roles and permissions', () => { + passport = makePassport(true); + staffUser = new StaffUser(makeBaseProps(), passport); + staffUser.accessBlocked = true; + }); + When('I call requestUnblock with description "User unblocked" and activityByStaffUserId "staff-99"', () => { + staffUser.requestUnblock('User unblocked', 'staff-99'); + }); + Then("the staff user's accessBlocked should be false", () => { + expect(staffUser.accessBlocked).toBe(false); + }); + And('an activity log entry with activityType "UNBLOCKED" and description "User unblocked" should be added', () => { + const entries = staffUser.activityLog; + expect(entries).toHaveLength(1); + expect(entries.at(0)?.activityType).toBe('UNBLOCKED'); + expect(entries.at(0)?.activityDescription).toBe('User unblocked'); + expect(entries.at(0)?.activityByStaffUserId).toBe('staff-99'); + }); + }); + // Repeat the above pattern for lastName, displayName, email, externalId, accessBlocked, tags, role, and read-only properties. // For brevity, only firstName scenarios are shown here. + + Scenario('Logging a create action via requestCreate', ({ Given, When, Then }) => { + Given('a StaffUser aggregate with permission to manage staff roles and permissions', () => { + passport = makePassport(true); + staffUser = new StaffUser(makeBaseProps(), passport); + }); + When('I call requestCreate with activityByStaffUserId "staff-99"', () => { + staffUser.requestCreate('staff-99'); + }); + Then('an activity log entry with activityType "CREATED" and description "User created" should be added', () => { + const entries = staffUser.activityLog; + expect(entries).toHaveLength(1); + expect(entries.at(0)?.activityType).toBe('CREATED'); + expect(entries.at(0)?.activityDescription).toBe('User created'); + expect(entries.at(0)?.activityByStaffUserId).toBe('staff-99'); + }); + }); }); diff --git a/packages/ocom/domain/src/domain/contexts/user/staff-user/staff-user.ts b/packages/ocom/domain/src/domain/contexts/user/staff-user/staff-user.ts index dd51f07cb..6dcfdbf44 100644 --- a/packages/ocom/domain/src/domain/contexts/user/staff-user/staff-user.ts +++ b/packages/ocom/domain/src/domain/contexts/user/staff-user/staff-user.ts @@ -1,11 +1,14 @@ -import { PermissionError } from '@cellix/domain-seedwork/domain-entity'; import { AggregateRoot } from '@cellix/domain-seedwork/aggregate-root'; import type { DomainEntityProps } from '@cellix/domain-seedwork/domain-entity'; +import { PermissionError } from '@cellix/domain-seedwork/domain-entity'; +import type { PropArray } from '@cellix/domain-seedwork/prop-array'; import { StaffUserCreatedEvent, type StaffUserCreatedProps } from '../../../events/types/staff-user-created.ts'; import type { Passport } from '../../passport.ts'; import { StaffRole, type StaffRoleEntityReference, type StaffRoleProps } from '../staff-role/staff-role.ts'; import type { UserVisa } from '../user.visa.ts'; import * as ValueObjects from './staff-user.value-objects.ts'; +import { StaffUserActivityLog, type StaffUserActivityLogEntityReference, type StaffUserActivityLogProps } from './staff-user-activity-log.entity.ts'; +import * as ActivityLogValueObjects from './staff-user-activity-log.value-objects.ts'; export interface StaffUserProps extends DomainEntityProps { readonly role?: StaffRoleProps; @@ -22,10 +25,12 @@ export interface StaffUserProps extends DomainEntityProps { readonly createdAt: Date; readonly updatedAt: Date; readonly schemaVersion: string; + activityLog: PropArray; } -export interface StaffUserEntityReference extends Readonly> { +export interface StaffUserEntityReference extends Readonly> { readonly role: StaffRoleEntityReference | undefined; + readonly activityLog: ReadonlyArray; } export class StaffUser extends AggregateRoot implements StaffUserEntityReference { @@ -63,6 +68,44 @@ export class StaffUser extends AggregateRoot extends AggregateRoot { + return this.props.activityLog.items.map((p) => new StaffUserActivityLog(p, this.visa)); + } + get userType(): string { return this.props.userType; } diff --git a/packages/ocom/domain/src/domain/iam/user/staff-user/contexts/features/staff-user.user.passport.feature b/packages/ocom/domain/src/domain/iam/user/staff-user/contexts/features/staff-user.user.passport.feature new file mode 100644 index 000000000..47e2d8262 --- /dev/null +++ b/packages/ocom/domain/src/domain/iam/user/staff-user/contexts/features/staff-user.user.passport.feature @@ -0,0 +1,47 @@ +Feature: StaffUserUserPassport + + Background: + Given a valid StaffUserEntityReference with externalId "ext-1" and canManageStaffRolesAndPermissions true + + Scenario: Creating a StaffUserUserPassport with a staff user + When I create a StaffUserUserPassport with the staff user + Then the passport should be created successfully + + Scenario: forEndUser returns a visa where canManageStaffRolesAndPermissions is true + Given a StaffUserUserPassport for the staff user + When I call forEndUser with any EndUserEntityReference + Then determineIf should return true for canManageStaffRolesAndPermissions + And determineIf should return false for canManageEndUsers + And determineIf should return false for canManageVendorUsers + And determineIf should return false for isSystemAccount + And determineIf should return false for isEditingOwnAccount + + Scenario: forEndUser when the staff user has no role returns a visa with all permissions false + Given a StaffUserEntityReference with no role + And a StaffUserUserPassport for that staff user + When I call forEndUser with any EndUserEntityReference + Then determineIf should return false for canManageStaffRolesAndPermissions + + Scenario: forStaffUser called with own staff user sets isEditingOwnAccount true + Given a StaffUserUserPassport for the staff user + When I call forStaffUser with the same staff user as the root + Then determineIf should return true for isEditingOwnAccount + And determineIf should return true for canManageStaffRolesAndPermissions + + Scenario: forStaffUser called with a different staff user sets isEditingOwnAccount false + Given a StaffUserUserPassport for the staff user + When I call forStaffUser with a different StaffUserEntityReference + Then determineIf should return false for isEditingOwnAccount + And determineIf should return true for canManageStaffRolesAndPermissions + + Scenario: forStaffRole returns a visa where canManageStaffRolesAndPermissions is true + Given a StaffUserUserPassport for the staff user + When I call forStaffRole with any StaffRoleEntityReference + Then determineIf should return true for canManageStaffRolesAndPermissions + And determineIf should return false for isEditingOwnAccount + + Scenario: forVendorUser returns a visa where canManageStaffRolesAndPermissions is true + Given a StaffUserUserPassport for the staff user + When I call forVendorUser with any VendorUserEntityReference + Then determineIf should return true for canManageStaffRolesAndPermissions + And determineIf should return false for canManageVendorUsers diff --git a/packages/ocom/domain/src/domain/iam/user/staff-user/contexts/staff-user.user.passport.test.ts b/packages/ocom/domain/src/domain/iam/user/staff-user/contexts/staff-user.user.passport.test.ts new file mode 100644 index 000000000..7c67ea067 --- /dev/null +++ b/packages/ocom/domain/src/domain/iam/user/staff-user/contexts/staff-user.user.passport.test.ts @@ -0,0 +1,176 @@ +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { describeFeature, loadFeature } from '@amiceli/vitest-cucumber'; +import { expect } from 'vitest'; +import type { EndUserEntityReference } from '../../../../contexts/user/end-user/index.ts'; +import type { StaffRoleEntityReference } from '../../../../contexts/user/staff-role/staff-role.ts'; +import type { StaffUserEntityReference } from '../../../../contexts/user/staff-user/staff-user.ts'; +import type { VendorUserEntityReference } from '../../../../contexts/user/vendor-user/vendor-user.ts'; +import { StaffUserUserPassport } from './staff-user.user.passport.ts'; + +const test = { for: describeFeature }; +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const feature = await loadFeature(path.resolve(__dirname, 'features/staff-user.user.passport.feature')); + +// ─── Helpers ───────────────────────────────────────────────────────────────── + +function makeStaffUser(externalId = 'ext-1', canManageStaffRolesAndPermissions = true): StaffUserEntityReference { + return { + id: 'staff-1', + externalId, + role: { + permissions: { + communityPermissions: { + canManageStaffRolesAndPermissions, + }, + }, + }, + } as unknown as StaffUserEntityReference; +} + +function makeStaffUserNoRole(externalId = 'ext-no-role'): StaffUserEntityReference { + return { id: 'staff-no-role', externalId } as unknown as StaffUserEntityReference; +} + +// ─── Tests ──────────────────────────────────────────────────────────────────── + +test.for(feature, ({ Scenario, Background, BeforeEachScenario }) => { + let staffUser: StaffUserEntityReference; + let passport: StaffUserUserPassport; + + BeforeEachScenario(() => { + staffUser = makeStaffUser(); + passport = undefined as unknown as StaffUserUserPassport; + }); + + Background(({ Given }) => { + Given('a valid StaffUserEntityReference with externalId "ext-1" and canManageStaffRolesAndPermissions true', () => { + staffUser = makeStaffUser('ext-1', true); + }); + }); + + // ─── Constructor ────────────────────────────────────────────────────────── + + Scenario('Creating a StaffUserUserPassport with a staff user', ({ When, Then }) => { + When('I create a StaffUserUserPassport with the staff user', () => { + passport = new StaffUserUserPassport(staffUser); + }); + Then('the passport should be created successfully', () => { + expect(passport).toBeInstanceOf(StaffUserUserPassport); + }); + }); + + // ─── forEndUser ─────────────────────────────────────────────────────────── + + Scenario('forEndUser returns a visa where canManageStaffRolesAndPermissions is true', ({ Given, When, Then, And }) => { + let visa: ReturnType; + Given('a StaffUserUserPassport for the staff user', () => { + passport = new StaffUserUserPassport(staffUser); + }); + When('I call forEndUser with any EndUserEntityReference', () => { + visa = passport.forEndUser({} as EndUserEntityReference); + }); + Then('determineIf should return true for canManageStaffRolesAndPermissions', () => { + expect(visa.determineIf((p) => p.canManageStaffRolesAndPermissions)).toBe(true); + }); + And('determineIf should return false for canManageEndUsers', () => { + expect(visa.determineIf((p) => p.canManageEndUsers)).toBe(false); + }); + And('determineIf should return false for canManageVendorUsers', () => { + expect(visa.determineIf((p) => p.canManageVendorUsers)).toBe(false); + }); + And('determineIf should return false for isSystemAccount', () => { + expect(visa.determineIf((p) => p.isSystemAccount)).toBe(false); + }); + And('determineIf should return false for isEditingOwnAccount', () => { + expect(visa.determineIf((p) => p.isEditingOwnAccount)).toBe(false); + }); + }); + + Scenario('forEndUser when the staff user has no role returns a visa with all permissions false', ({ Given, And, When, Then }) => { + let visa: ReturnType; + Given('a StaffUserEntityReference with no role', () => { + staffUser = makeStaffUserNoRole(); + }); + And('a StaffUserUserPassport for that staff user', () => { + passport = new StaffUserUserPassport(staffUser); + }); + When('I call forEndUser with any EndUserEntityReference', () => { + visa = passport.forEndUser({} as EndUserEntityReference); + }); + Then('determineIf should return false for canManageStaffRolesAndPermissions', () => { + expect(visa.determineIf((p) => p.canManageStaffRolesAndPermissions)).toBe(false); + }); + }); + + // ─── forStaffUser ───────────────────────────────────────────────────────── + + Scenario('forStaffUser called with own staff user sets isEditingOwnAccount true', ({ Given, When, Then, And }) => { + let visa: ReturnType; + Given('a StaffUserUserPassport for the staff user', () => { + passport = new StaffUserUserPassport(staffUser); + }); + When('I call forStaffUser with the same staff user as the root', () => { + visa = passport.forStaffUser(staffUser); + }); + Then('determineIf should return true for isEditingOwnAccount', () => { + expect(visa.determineIf((p) => p.isEditingOwnAccount)).toBe(true); + }); + And('determineIf should return true for canManageStaffRolesAndPermissions', () => { + expect(visa.determineIf((p) => p.canManageStaffRolesAndPermissions)).toBe(true); + }); + }); + + Scenario('forStaffUser called with a different staff user sets isEditingOwnAccount false', ({ Given, When, Then, And }) => { + let visa: ReturnType; + Given('a StaffUserUserPassport for the staff user', () => { + passport = new StaffUserUserPassport(staffUser); + }); + When('I call forStaffUser with a different StaffUserEntityReference', () => { + const otherUser = makeStaffUser('ext-other', true); + visa = passport.forStaffUser(otherUser); + }); + Then('determineIf should return false for isEditingOwnAccount', () => { + expect(visa.determineIf((p) => p.isEditingOwnAccount)).toBe(false); + }); + And('determineIf should return true for canManageStaffRolesAndPermissions', () => { + expect(visa.determineIf((p) => p.canManageStaffRolesAndPermissions)).toBe(true); + }); + }); + + // ─── forStaffRole ───────────────────────────────────────────────────────── + + Scenario('forStaffRole returns a visa where canManageStaffRolesAndPermissions is true', ({ Given, When, Then, And }) => { + let visa: ReturnType; + Given('a StaffUserUserPassport for the staff user', () => { + passport = new StaffUserUserPassport(staffUser); + }); + When('I call forStaffRole with any StaffRoleEntityReference', () => { + visa = passport.forStaffRole({} as StaffRoleEntityReference); + }); + Then('determineIf should return true for canManageStaffRolesAndPermissions', () => { + expect(visa.determineIf((p) => p.canManageStaffRolesAndPermissions)).toBe(true); + }); + And('determineIf should return false for isEditingOwnAccount', () => { + expect(visa.determineIf((p) => p.isEditingOwnAccount)).toBe(false); + }); + }); + + // ─── forVendorUser ──────────────────────────────────────────────────────── + + Scenario('forVendorUser returns a visa where canManageStaffRolesAndPermissions is true', ({ Given, When, Then, And }) => { + let visa: ReturnType; + Given('a StaffUserUserPassport for the staff user', () => { + passport = new StaffUserUserPassport(staffUser); + }); + When('I call forVendorUser with any VendorUserEntityReference', () => { + visa = passport.forVendorUser({} as VendorUserEntityReference); + }); + Then('determineIf should return true for canManageStaffRolesAndPermissions', () => { + expect(visa.determineIf((p) => p.canManageStaffRolesAndPermissions)).toBe(true); + }); + And('determineIf should return false for canManageVendorUsers', () => { + expect(visa.determineIf((p) => p.canManageVendorUsers)).toBe(false); + }); + }); +}); diff --git a/packages/ocom/domain/src/domain/iam/user/staff-user/features/staff-user.passport.feature b/packages/ocom/domain/src/domain/iam/user/staff-user/features/staff-user.passport.feature index 172644ebb..7fe6151bc 100644 --- a/packages/ocom/domain/src/domain/iam/user/staff-user/features/staff-user.passport.feature +++ b/packages/ocom/domain/src/domain/iam/user/staff-user/features/staff-user.passport.feature @@ -20,4 +20,49 @@ Feature: StaffUserPassport Scenario: Accessing the user passport When I create a StaffUserPassport with valid staff user And I access the user property - Then I should receive a StaffUserUserPassport instance \ No newline at end of file + Then I should receive a StaffUserUserPassport instance + + Scenario: Accessing the case passport + When I create a StaffUserPassport with valid staff user + And I access the case property + Then I should receive a StaffUserCasePassport instance + + Scenario: The case passport forServiceTicketV1 returns a StaffUserServiceTicketVisa + When I create a StaffUserPassport with valid staff user + And I access the case property + Then forServiceTicketV1 should return a StaffUserServiceTicketVisa + + Scenario: The case passport forViolationTicketV1 returns a StaffUserViolationTicketVisa + When I create a StaffUserPassport with valid staff user + And I access the case property + Then forViolationTicketV1 should return a StaffUserViolationTicketVisa + + Scenario: Accessing the property passport + When I create a StaffUserPassport with valid staff user + And I access the property property + Then I should receive a StaffUserPropertyPassport instance + + Scenario: The property passport forProperty returns a visa that always denies + When I create a StaffUserPassport with valid staff user + And I access the property property + Then forProperty should return a visa whose determineIf always returns false + + Scenario: Community passport is cached after first access + When I create a StaffUserPassport with valid staff user + And I access the community property twice + Then both accesses should return the same instance + + Scenario: Case passport is cached after first access + When I create a StaffUserPassport with valid staff user + And I access the case property twice + Then both accesses should return the same instance + + Scenario: Property passport is cached after first access + When I create a StaffUserPassport with valid staff user + And I access the property property twice + Then both accesses should return the same instance + + Scenario: User passport is cached after first access + When I create a StaffUserPassport with valid staff user + And I access the user property twice + Then both accesses should return the same instance \ No newline at end of file diff --git a/packages/ocom/domain/src/domain/iam/user/staff-user/staff-user.passport.test.ts b/packages/ocom/domain/src/domain/iam/user/staff-user/staff-user.passport.test.ts index 6e5f74139..4757cf6a3 100644 --- a/packages/ocom/domain/src/domain/iam/user/staff-user/staff-user.passport.test.ts +++ b/packages/ocom/domain/src/domain/iam/user/staff-user/staff-user.passport.test.ts @@ -2,11 +2,18 @@ import path from 'node:path'; import { fileURLToPath } from 'node:url'; import { describeFeature, loadFeature } from '@amiceli/vitest-cucumber'; import { expect } from 'vitest'; +import type { ServiceTicketV1EntityReference } from '../../../contexts/case/service-ticket/v1/service-ticket-v1.aggregate.ts'; +import type { ViolationTicketV1EntityReference } from '../../../contexts/case/violation-ticket/v1/violation-ticket-v1.aggregate.ts'; import type { CommunityEntityReference } from '../../../contexts/community/community/community.ts'; +import type { PropertyEntityReference } from '../../../contexts/property/property/property.aggregate.ts'; import type { StaffUserEntityReference } from '../../../contexts/user/staff-user/staff-user.ts'; +import { StaffUserCasePassport } from './contexts/staff-user.case.passport.ts'; import { StaffUserCommunityPassport } from './contexts/staff-user.community.passport.ts'; import { StaffUserCommunityVisa } from './contexts/staff-user.community.visa.ts'; +import { StaffUserPropertyPassport } from './contexts/staff-user.property.passport.ts'; +import { StaffUserServiceTicketVisa } from './contexts/staff-user.service-ticket.visa.ts'; import { StaffUserUserPassport } from './contexts/staff-user.user.passport.ts'; +import { StaffUserViolationTicketVisa } from './contexts/staff-user.violation-ticket.visa.ts'; import { StaffUserPassport } from './staff-user.passport.ts'; const test = { for: describeFeature }; @@ -35,7 +42,7 @@ test.for(feature, ({ Scenario, Background, BeforeEachScenario }) => { BeforeEachScenario(() => { staffUser = makeStaffUser(); passport = undefined as unknown as StaffUserPassport; - communityPassport = undefined as unknown as StaffUserCommunityPassport; + communityPassport = undefined; }); Background(({ Given }) => { @@ -54,7 +61,6 @@ test.for(feature, ({ Scenario, Background, BeforeEachScenario }) => { }); Scenario('Accessing the community passport', ({ When, And, Then }) => { - // Uncomment and update when StaffUserPassport is implemented When('I create a StaffUserPassport with valid staff user', () => { passport = new StaffUserPassport(staffUser); }); @@ -68,7 +74,6 @@ test.for(feature, ({ Scenario, Background, BeforeEachScenario }) => { id: 'community-1', } as CommunityEntityReference), ).toBeInstanceOf(StaffUserCommunityVisa); - // Add more assertions for visas if needed }); }); @@ -97,4 +102,138 @@ test.for(feature, ({ Scenario, Background, BeforeEachScenario }) => { expect(userPassport).toBeInstanceOf(StaffUserUserPassport); }); }); + + // ─── case passport ─────────────────────────────────────────────────────────── + + Scenario('Accessing the case passport', ({ When, And, Then }) => { + let casePassport: unknown; + When('I create a StaffUserPassport with valid staff user', () => { + passport = new StaffUserPassport(staffUser); + }); + And('I access the case property', () => { + casePassport = passport.case; + }); + Then('I should receive a StaffUserCasePassport instance', () => { + expect(casePassport).toBeInstanceOf(StaffUserCasePassport); + }); + }); + + Scenario('The case passport forServiceTicketV1 returns a StaffUserServiceTicketVisa', ({ When, And, Then }) => { + let casePassport: StaffUserCasePassport; + When('I create a StaffUserPassport with valid staff user', () => { + passport = new StaffUserPassport(staffUser); + }); + And('I access the case property', () => { + casePassport = passport.case as StaffUserCasePassport; + }); + Then('forServiceTicketV1 should return a StaffUserServiceTicketVisa', () => { + const visa = casePassport.forServiceTicketV1({} as ServiceTicketV1EntityReference); + expect(visa).toBeInstanceOf(StaffUserServiceTicketVisa); + }); + }); + + Scenario('The case passport forViolationTicketV1 returns a StaffUserViolationTicketVisa', ({ When, And, Then }) => { + let casePassport: StaffUserCasePassport; + When('I create a StaffUserPassport with valid staff user', () => { + passport = new StaffUserPassport(staffUser); + }); + And('I access the case property', () => { + casePassport = passport.case as StaffUserCasePassport; + }); + Then('forViolationTicketV1 should return a StaffUserViolationTicketVisa', () => { + const visa = casePassport.forViolationTicketV1({} as ViolationTicketV1EntityReference); + expect(visa).toBeInstanceOf(StaffUserViolationTicketVisa); + }); + }); + + // ─── property passport ─────────────────────────────────────────────────────── + + Scenario('Accessing the property passport', ({ When, And, Then }) => { + let propertyPassport: unknown; + When('I create a StaffUserPassport with valid staff user', () => { + passport = new StaffUserPassport(staffUser); + }); + And('I access the property property', () => { + propertyPassport = passport.property; + }); + Then('I should receive a StaffUserPropertyPassport instance', () => { + expect(propertyPassport).toBeInstanceOf(StaffUserPropertyPassport); + }); + }); + + Scenario('The property passport forProperty returns a visa that always denies', ({ When, And, Then }) => { + let propertyPassport: StaffUserPropertyPassport; + When('I create a StaffUserPassport with valid staff user', () => { + passport = new StaffUserPassport(staffUser); + }); + And('I access the property property', () => { + propertyPassport = passport.property as StaffUserPropertyPassport; + }); + Then('forProperty should return a visa whose determineIf always returns false', () => { + const visa = propertyPassport.forProperty({} as PropertyEntityReference); + expect(visa.determineIf(() => true)).toBe(false); + }); + }); + + // ─── lazy-init caching ─────────────────────────────────────────────────────── + + Scenario('Community passport is cached after first access', ({ When, And, Then }) => { + let first: unknown; + let second: unknown; + When('I create a StaffUserPassport with valid staff user', () => { + passport = new StaffUserPassport(staffUser); + }); + And('I access the community property twice', () => { + first = passport.community; + second = passport.community; + }); + Then('both accesses should return the same instance', () => { + expect(first).toBe(second); + }); + }); + + Scenario('Case passport is cached after first access', ({ When, And, Then }) => { + let first: unknown; + let second: unknown; + When('I create a StaffUserPassport with valid staff user', () => { + passport = new StaffUserPassport(staffUser); + }); + And('I access the case property twice', () => { + first = passport.case; + second = passport.case; + }); + Then('both accesses should return the same instance', () => { + expect(first).toBe(second); + }); + }); + + Scenario('Property passport is cached after first access', ({ When, And, Then }) => { + let first: unknown; + let second: unknown; + When('I create a StaffUserPassport with valid staff user', () => { + passport = new StaffUserPassport(staffUser); + }); + And('I access the property property twice', () => { + first = passport.property; + second = passport.property; + }); + Then('both accesses should return the same instance', () => { + expect(first).toBe(second); + }); + }); + + Scenario('User passport is cached after first access', ({ When, And, Then }) => { + let first: unknown; + let second: unknown; + When('I create a StaffUserPassport with valid staff user', () => { + passport = new StaffUserPassport(staffUser); + }); + And('I access the user property twice', () => { + first = passport.user; + second = passport.user; + }); + Then('both accesses should return the same instance', () => { + expect(first).toBe(second); + }); + }); }); diff --git a/packages/ocom/graphql/src/schema/types/features/staff-user.resolvers.feature b/packages/ocom/graphql/src/schema/types/features/staff-user.resolvers.feature index 265800347..d9f44a154 100644 --- a/packages/ocom/graphql/src/schema/types/features/staff-user.resolvers.feature +++ b/packages/ocom/graphql/src/schema/types/features/staff-user.resolvers.feature @@ -1,8 +1,10 @@ Feature: Staff User Resolvers As an API consumer - I want to query and create staff user entities - So that I can retrieve a staff user or ensure one exists via the GraphQL API + I want to query and manage staff users and roles + So that I can administer the system via the GraphQL API + + # ─── currentStaffUserAndCreateIfNotExists ──────────────────────────────────── Scenario: Querying the current staff user and creating if not exists Given a user with a verifiedJwt in their context @@ -20,3 +22,120 @@ Feature: Staff User Resolvers Given a user without a verifiedJwt in their context When the currentStaffUserAndCreateIfNotExists query is executed Then it should throw an "Unauthorized" error + + # ─── staffUsers ────────────────────────────────────────────────────────────── + + Scenario: Listing staff users when authenticated + Given a user with a verifiedJwt in their context + When the staffUsers query is executed + Then it should return the list of staff users + + Scenario: Listing staff users when unauthenticated + Given a user without a verifiedJwt in their context + When the staffUsers query is executed + Then it should throw an "Unauthorized" error + + # ─── staffRoles ────────────────────────────────────────────────────────────── + + Scenario: Listing staff roles when authenticated + Given a user with a verifiedJwt in their context + When the staffRoles query is executed + Then it should call createDefaultRoles + And it should return the list of staff roles + + Scenario: Listing staff roles when unauthenticated + Given a user without a verifiedJwt in their context + When the staffRoles query is executed + Then it should throw an "Unauthorized" error + + # ─── staffRoleById ─────────────────────────────────────────────────────────── + + Scenario: Querying a staff role by id when authenticated + Given a user with a verifiedJwt in their context + When the staffRoleById query is executed with id "role-001" + Then it should return the staff role with id "role-001" + + Scenario: Querying a staff role by id when unauthenticated + Given a user without a verifiedJwt in their context + When the staffRoleById query is executed with id "role-001" + Then it should throw an "Unauthorized" error + + # ─── staffUserById ─────────────────────────────────────────────────────────── + + Scenario: Querying a staff user by id when the user exists + Given a user with a verifiedJwt in their context + When the staffUserById query is executed with id "user-001" + Then it should return the staff user with id "user-001" + + Scenario: Querying a staff user by id when the user does not exist + Given a user with a verifiedJwt in their context + When the staffUserById query is executed with id "user-missing" + Then it should return null + + Scenario: Querying a staff user by id when unauthenticated + Given a user without a verifiedJwt in their context + When the staffUserById query is executed with id "user-001" + Then it should throw an "Unauthorized" error + + # ─── staffRoleCreate ───────────────────────────────────────────────────────── + + Scenario: Creating a staff role as TechAdmin + Given a user with a verifiedJwt that includes the TechAdmin role + When the staffRoleCreate mutation is executed with roleName "New Role" and enterpriseAppRole "Staff.CaseManager" + Then it should return success with the created staff role + + Scenario: Creating a staff role with an unauthorized enterpriseAppRole + Given a user with a verifiedJwt that includes the CaseManager role + When the staffRoleCreate mutation is executed with roleName "New Role" and enterpriseAppRole "Staff.TechAdmin" + Then it should return failure with a permission error message + + Scenario: Creating a staff role when unauthenticated + Given a user without a verifiedJwt in their context + When the staffRoleCreate mutation is executed with roleName "New Role" and enterpriseAppRole "Staff.CaseManager" + Then it should return failure with message "Unauthorized" + + Scenario: Creating a staff role when the service throws + Given a user with a verifiedJwt that includes the TechAdmin role + When the staffRoleCreate mutation throws an error + Then it should return failure with the error message + + # ─── staffRoleUpdate ───────────────────────────────────────────────────────── + + Scenario: Updating a staff role as TechAdmin + Given a user with a verifiedJwt that includes the TechAdmin role + When the staffRoleUpdate mutation is executed with id "role-001" and enterpriseAppRole "Staff.TechAdmin" + Then it should return success with the updated staff role + + Scenario: Updating a staff role with an unauthorized enterpriseAppRole + Given a user with a verifiedJwt that includes the CaseManager role + When the staffRoleUpdate mutation is executed with id "role-001" and enterpriseAppRole "Staff.TechAdmin" + Then it should return failure with a permission error message + + Scenario: Updating a staff role when unauthenticated + Given a user without a verifiedJwt in their context + When the staffRoleUpdate mutation is executed with id "role-001" and enterpriseAppRole "Staff.TechAdmin" + Then it should return failure with message "Unauthorized" + + # ─── staffUserAssignRole ───────────────────────────────────────────────────── + + Scenario: Assigning a role as TechAdmin bypasses role-type check + Given a user with a verifiedJwt that includes the TechAdmin role + When the staffUserAssignRole mutation is executed with staffUserId "user-001" and roleId "role-001" + Then it should return success with the updated staff user + + Scenario: Assigning an allowed role as non-TechAdmin + Given a user with a verifiedJwt that includes the CaseManager role + And the role "role-001" has enterpriseAppRole "Staff.CaseManager" + When the staffUserAssignRole mutation is executed with staffUserId "user-001" and roleId "role-001" + Then it should return success with the updated staff user + + Scenario: Assigning a forbidden role as non-TechAdmin + Given a user with a verifiedJwt that includes the CaseManager role + And the role "role-001" has enterpriseAppRole "Staff.TechAdmin" + When the staffUserAssignRole mutation is executed with staffUserId "user-001" and roleId "role-001" + Then it should return failure with a permission error message + + Scenario: Assigning a role when unauthenticated + Given a user without a verifiedJwt in their context + When the staffUserAssignRole mutation is executed with staffUserId "user-001" and roleId "role-001" + Then it should return failure with message "Unauthorized" diff --git a/packages/ocom/graphql/src/schema/types/staff-role.command-mapper.ts b/packages/ocom/graphql/src/schema/types/staff-role.command-mapper.ts new file mode 100644 index 000000000..659921728 --- /dev/null +++ b/packages/ocom/graphql/src/schema/types/staff-role.command-mapper.ts @@ -0,0 +1,72 @@ +import type { StaffRoleCreateCommand } from '../../../../application-services/src/contexts/user/staff-role/create.js'; +import type { StaffRoleUpdateCommand } from '../../../../application-services/src/contexts/user/staff-role/update.js'; +import type { + StaffRoleCommandPermissions, + StaffRoleCommandCommunityPermissions, + StaffRoleCommandFinancePermissions, + StaffRoleCommandRolePermissions, + StaffRoleCommandTechAdminPermissions, + StaffRoleCommandUserPermissions, +} from '../../../../application-services/src/contexts/user/staff-role/apply-permissions.js'; +import type { MutationStaffRoleCreateArgs, MutationStaffRoleUpdateArgs } from '../builder/generated.ts'; + +const EnterpriseAppRoleNames = { + CaseManager: 'Staff.CaseManager', + ServiceLineOwner: 'Staff.ServiceLineOwner', + Finance: 'Staff.Finance', + TechAdmin: 'Staff.TechAdmin', +} as const; + +type StaffRolePermissionsInput = NonNullable['permissions']>; + +function mapPermissionsInput(permissions: StaffRolePermissionsInput | null | undefined): StaffRoleCommandPermissions | undefined { + if (!permissions) return undefined; + const mapped: StaffRoleCommandPermissions = {}; + if (permissions.communityPermissions) mapped.community = permissions.communityPermissions as StaffRoleCommandCommunityPermissions; + if (permissions.userPermissions) mapped.user = permissions.userPermissions as StaffRoleCommandUserPermissions; + if (permissions.staffRolePermissions) mapped.staffRole = permissions.staffRolePermissions as StaffRoleCommandRolePermissions; + if (permissions.financePermissions) mapped.finance = permissions.financePermissions as StaffRoleCommandFinancePermissions; + if (permissions.techAdminPermissions) mapped.techAdmin = permissions.techAdminPermissions as StaffRoleCommandTechAdminPermissions; + return mapped; +} + +function getAllowedEnterpriseAppRoles(entraRoles: string[]): string[] { + if (entraRoles.includes(EnterpriseAppRoleNames.TechAdmin)) { + return Object.values(EnterpriseAppRoleNames); + } + const allowed: string[] = []; + if (entraRoles.includes(EnterpriseAppRoleNames.ServiceLineOwner)) { + allowed.push(EnterpriseAppRoleNames.ServiceLineOwner, EnterpriseAppRoleNames.CaseManager); + } + if (entraRoles.includes(EnterpriseAppRoleNames.CaseManager) && !allowed.includes(EnterpriseAppRoleNames.CaseManager)) { + allowed.push(EnterpriseAppRoleNames.CaseManager); + } + if (entraRoles.includes(EnterpriseAppRoleNames.Finance)) { + allowed.push(EnterpriseAppRoleNames.Finance); + } + return allowed; +} + +export function buildStaffRoleCreateCommand(input: MutationStaffRoleCreateArgs['input'], roles: string[]): StaffRoleCreateCommand | { errorMessage: string } { + const requestedEnterpriseAppRole = input?.enterpriseAppRole ?? ''; + const allowedEnterpriseAppRoles = getAllowedEnterpriseAppRoles(roles); + if (requestedEnterpriseAppRole && !allowedEnterpriseAppRoles.includes(requestedEnterpriseAppRole)) { + return { errorMessage: `You do not have permission to create a role for enterprise app role type: ${requestedEnterpriseAppRole}` }; + } + const permissions = mapPermissionsInput(input?.permissions); + return { + roleName: input?.roleName ?? '', + ...(input?.enterpriseAppRole ? { enterpriseAppRole: input.enterpriseAppRole } : {}), + ...(permissions ? { permissions } : {}), + }; +} + +export function buildStaffRoleUpdateCommand(input: NonNullable): StaffRoleUpdateCommand { + const permissions = mapPermissionsInput(input.permissions); + return { + roleId: input.id, + roleName: input.roleName, + ...(input.enterpriseAppRole ? { enterpriseAppRole: input.enterpriseAppRole } : {}), + ...(permissions ? { permissions } : {}), + }; +} diff --git a/packages/ocom/graphql/src/schema/types/staff-role.graphql b/packages/ocom/graphql/src/schema/types/staff-role.graphql new file mode 100644 index 000000000..0f0b7fb3c --- /dev/null +++ b/packages/ocom/graphql/src/schema/types/staff-role.graphql @@ -0,0 +1,138 @@ +type StaffRoleCommunityPermissions { + canManageCommunities: Boolean! + canManageStaffRolesAndPermissions: Boolean! + canManageAllCommunities: Boolean! + canDeleteCommunities: Boolean! + canChangeCommunityOwner: Boolean! + canReIndexSearchCollections: Boolean! +} + +type StaffRoleFinancePermissions { + canManageFinance: Boolean! + canViewGLBatchSummaries: Boolean! + canViewFinanceConfigs: Boolean! + canCreateFinanceConfigs: Boolean! +} + +type StaffRoleTechAdminPermissions { + canManageTechAdmin: Boolean! + canViewDatabaseExplorer: Boolean! + canViewBlobExplorer: Boolean! + canViewQueueDashboard: Boolean! + canSendQueueMessages: Boolean! +} + +type StaffRoleUserPermissions { + canManageUsers: Boolean! + canAssignStaffRoles: Boolean! + canViewStaffUsers: Boolean! +} + +type StaffRoleRolePermissions { + canViewRoles: Boolean! + canAddRole: Boolean! + canEditRole: Boolean! + canRemoveRole: Boolean! +} + +type StaffRolePermissions { + communityPermissions: StaffRoleCommunityPermissions! + financePermissions: StaffRoleFinancePermissions! + staffRolePermissions: StaffRoleRolePermissions! + techAdminPermissions: StaffRoleTechAdminPermissions! + userPermissions: StaffRoleUserPermissions! +} + +type StaffRole implements MongoBase { + roleName: String! + isDefault: Boolean! + roleType: String + enterpriseAppRole: String! + permissions: StaffRolePermissions! + + id: ObjectID! + schemaVersion: String + createdAt: DateTime + updatedAt: DateTime +} + +input StaffRoleCreateCommunityPermissionsInput { + canManageCommunities: Boolean + canManageStaffRolesAndPermissions: Boolean + canManageAllCommunities: Boolean + canDeleteCommunities: Boolean + canChangeCommunityOwner: Boolean + canReIndexSearchCollections: Boolean +} + +input StaffRoleCreateUserPermissionsInput { + canManageUsers: Boolean + canAssignStaffRoles: Boolean + canViewStaffUsers: Boolean +} + +input StaffRoleCreateRolePermissionsInput { + canViewRoles: Boolean + canAddRole: Boolean + canEditRole: Boolean + canRemoveRole: Boolean +} + +input StaffRoleCreateFinancePermissionsInput { + canManageFinance: Boolean + canViewGLBatchSummaries: Boolean + canViewFinanceConfigs: Boolean + canCreateFinanceConfigs: Boolean +} + +input StaffRoleCreateTechAdminPermissionsInput { + canManageTechAdmin: Boolean + canViewDatabaseExplorer: Boolean + canViewBlobExplorer: Boolean + canViewQueueDashboard: Boolean + canSendQueueMessages: Boolean +} + +input StaffRoleCreatePermissionsInput { + communityPermissions: StaffRoleCreateCommunityPermissionsInput + staffRolePermissions: StaffRoleCreateRolePermissionsInput + financePermissions: StaffRoleCreateFinancePermissionsInput + techAdminPermissions: StaffRoleCreateTechAdminPermissionsInput + userPermissions: StaffRoleCreateUserPermissionsInput +} + +input StaffRoleCreateInput { + roleName: String! + enterpriseAppRole: String + permissions: StaffRoleCreatePermissionsInput +} + +input StaffRoleUpdatePermissionsInput { + communityPermissions: StaffRoleCreateCommunityPermissionsInput + staffRolePermissions: StaffRoleCreateRolePermissionsInput + financePermissions: StaffRoleCreateFinancePermissionsInput + techAdminPermissions: StaffRoleCreateTechAdminPermissionsInput + userPermissions: StaffRoleCreateUserPermissionsInput +} + +input StaffRoleUpdateInput { + id: ObjectID! + roleName: String! + enterpriseAppRole: String! + permissions: StaffRoleUpdatePermissionsInput +} + +type StaffRoleMutationResult implements MutationResult { + status: MutationStatus! + staffRole: StaffRole +} + +extend type Query { + staffRoles: [StaffRole!]! + staffRoleById(id: ObjectID!): StaffRole +} + +extend type Mutation { + staffRoleCreate(input: StaffRoleCreateInput!): StaffRoleMutationResult! + staffRoleUpdate(input: StaffRoleUpdateInput!): StaffRoleMutationResult! +} diff --git a/packages/ocom/graphql/src/schema/types/staff-role.resolvers.ts b/packages/ocom/graphql/src/schema/types/staff-role.resolvers.ts new file mode 100644 index 000000000..1b8bd6606 --- /dev/null +++ b/packages/ocom/graphql/src/schema/types/staff-role.resolvers.ts @@ -0,0 +1,62 @@ +import type { GraphQLResolveInfo } from 'graphql'; +import type { MutationStaffRoleCreateArgs, MutationStaffRoleUpdateArgs, RequireFields, Resolvers } from '../builder/generated.ts'; +import type { GraphContext } from '../context.ts'; +import { buildStaffRoleCreateCommand, buildStaffRoleUpdateCommand } from './staff-role.command-mapper.ts'; + +const staffRole: Resolvers = { + Query: { + staffRoles: async (_parent, _args, context: GraphContext, _info: GraphQLResolveInfo) => { + if (!context.applicationServices.verifiedUser?.verifiedJwt) { + throw new Error('Unauthorized'); + } + await context.applicationServices.User.StaffRole.createDefaultRoles(); + return await context.applicationServices.User.StaffRole.list(); + }, + + staffRoleById: async (_parent, args: { id: string }, context: GraphContext, _info: GraphQLResolveInfo) => { + if (!context.applicationServices.verifiedUser?.verifiedJwt) { + throw new Error('Unauthorized'); + } + return await context.applicationServices.User.StaffRole.queryById({ roleId: String(args.id) }); + }, + }, + + Mutation: { + staffRoleCreate: async (_parent, args: RequireFields, context: GraphContext, _info: GraphQLResolveInfo) => { + const jwt = context.applicationServices.verifiedUser?.verifiedJwt; + if (!jwt) { + return { status: { success: false, errorMessage: 'Unauthorized' } }; + } + try { + const command = buildStaffRoleCreateCommand(args.input, jwt.roles ?? []); + if ('errorMessage' in command) { + return { status: { success: false, errorMessage: command.errorMessage } }; + } + const staffRole = await context.applicationServices.User.StaffRole.create(command); + return { status: { success: true }, staffRole }; + } catch (error) { + console.error('StaffRole > staffRoleCreate: ', error); + const { message } = error as Error; + return { status: { success: false, errorMessage: message } }; + } + }, + + staffRoleUpdate: async (_parent, args: RequireFields, context: GraphContext, _info: GraphQLResolveInfo) => { + const jwt = context.applicationServices.verifiedUser?.verifiedJwt; + if (!jwt) { + return { status: { success: false, errorMessage: 'Unauthorized' } }; + } + try { + const command = buildStaffRoleUpdateCommand(args.input); + const staffRole = await context.applicationServices.User.StaffRole.update(command); + return { status: { success: true }, staffRole }; + } catch (error) { + console.error('StaffRole > staffRoleUpdate: ', error); + const { message } = error as Error; + return { status: { success: false, errorMessage: message } }; + } + }, + }, +}; + +export default staffRole; diff --git a/packages/ocom/graphql/src/schema/types/staff-user.graphql b/packages/ocom/graphql/src/schema/types/staff-user.graphql index 1def99be8..de6da9c35 100644 --- a/packages/ocom/graphql/src/schema/types/staff-user.graphql +++ b/packages/ocom/graphql/src/schema/types/staff-user.graphql @@ -1,48 +1,10 @@ -type StaffRoleCommunityPermissions { - canManageCommunities: Boolean! - canManageStaffRolesAndPermissions: Boolean! - canManageAllCommunities: Boolean! - canDeleteCommunities: Boolean! - canChangeCommunityOwner: Boolean! - canReIndexSearchCollections: Boolean! -} - -type StaffRoleFinancePermissions { - canManageFinance: Boolean! - canViewGLBatchSummaries: Boolean! - canViewFinanceConfigs: Boolean! - canCreateFinanceConfigs: Boolean! -} - -type StaffRoleTechAdminPermissions { - canManageTechAdmin: Boolean! - canViewDatabaseExplorer: Boolean! - canViewBlobExplorer: Boolean! - canViewQueueDashboard: Boolean! - canSendQueueMessages: Boolean! -} - -type StaffRoleUserPermissions { - canManageUsers: Boolean! -} - -type StaffRolePermissions { - communityPermissions: StaffRoleCommunityPermissions! - financePermissions: StaffRoleFinancePermissions! - techAdminPermissions: StaffRoleTechAdminPermissions! - userPermissions: StaffRoleUserPermissions! -} - -type StaffRole implements MongoBase { - roleName: String! - isDefault: Boolean! - roleType: String - permissions: StaffRolePermissions! - - id: ObjectID! - schemaVersion: String - createdAt: DateTime - updatedAt: DateTime +type StaffUserActivityDetail { + activityType: String! + activityDescription: String! + activityByStaffUserId: String! + activityByStaffUserDisplayName: String! + createdAt: DateTime! + updatedAt: DateTime! } type StaffUser implements MongoBase { @@ -54,6 +16,7 @@ type StaffUser implements MongoBase { accessBlocked: Boolean! tags: [String!]! role: StaffRole + activityLog: [StaffUserActivityDetail!]! id: ObjectID! schemaVersion: String @@ -61,6 +24,22 @@ type StaffUser implements MongoBase { updatedAt: DateTime } +input StaffUserAssignRoleInput { + staffUserId: ObjectID! + roleId: ObjectID! +} + +type StaffUserMutationResult implements MutationResult { + status: MutationStatus! + staffUser: StaffUser +} + extend type Query { currentStaffUserAndCreateIfNotExists: StaffUser! + staffUsers: [StaffUser!]! + staffUserById(id: ObjectID!): StaffUser +} + +extend type Mutation { + staffUserAssignRole(input: StaffUserAssignRoleInput!): StaffUserMutationResult! } diff --git a/packages/ocom/graphql/src/schema/types/staff-user.resolvers.test.ts b/packages/ocom/graphql/src/schema/types/staff-user.resolvers.test.ts index 66b97abcf..a87e0e6b6 100644 --- a/packages/ocom/graphql/src/schema/types/staff-user.resolvers.test.ts +++ b/packages/ocom/graphql/src/schema/types/staff-user.resolvers.test.ts @@ -5,13 +5,19 @@ import type { Domain } from '@ocom/domain'; import { type FieldNode, type GraphQLObjectType, type GraphQLResolveInfo, type GraphQLSchema, Kind, type OperationDefinitionNode } from 'graphql'; import { expect, vi } from 'vitest'; import type { GraphContext } from '../context.ts'; +import staffRoleResolvers from './staff-role.resolvers.ts'; import staffUserResolvers from './staff-user.resolvers.ts'; const test = { for: describeFeature }; const __dirname = path.dirname(fileURLToPath(import.meta.url)); const feature = await loadFeature(path.resolve(__dirname, 'features/staff-user.resolvers.feature')); +// ─── Domain types ───────────────────────────────────────────────────────────── + type StaffUserEntity = Domain.Contexts.User.StaffUser.StaffUserEntityReference; +type StaffRoleEntity = Domain.Contexts.User.StaffRole.StaffRoleEntityReference; + +// ─── Mock factories ─────────────────────────────────────────────────────────── function createMockStaffUser(overrides: Partial = {}): StaffUserEntity { return { @@ -32,11 +38,23 @@ function createMockStaffUser(overrides: Partial = {}): StaffUse } as unknown as StaffUserEntity; } +function createMockStaffRole(overrides: Partial = {}): StaffRoleEntity { + return { + id: 'mock-role-id', + roleName: 'Mock Role', + enterpriseAppRole: 'Staff.CaseManager', + isDefault: false, + roleType: null, + permissions: {}, + createdAt: new Date(), + updatedAt: new Date(), + schemaVersion: '1.0', + ...overrides, + } as unknown as StaffRoleEntity; +} + function makeMockInfo(fieldName: string): GraphQLResolveInfo { - const mockFieldNode: FieldNode = { - kind: Kind.FIELD, - name: { kind: Kind.NAME, value: fieldName }, - }; + const mockFieldNode: FieldNode = { kind: Kind.FIELD, name: { kind: Kind.NAME, value: fieldName } }; return { fieldName, fieldNodes: [mockFieldNode], @@ -51,54 +69,128 @@ function makeMockInfo(fieldName: string): GraphQLResolveInfo { } as unknown as GraphQLResolveInfo; } -function makeMockGraphContext(overrides: Partial = {}): GraphContext { +type JwtOverride = { + sub?: string; + given_name?: string; + family_name?: string; + email?: string; + roles?: string[]; +}; + +type MockedStaffUserService = GraphContext['applicationServices']['User']['StaffUser'] & { + createIfNotExists: ReturnType; + list: ReturnType; + assignRole: ReturnType; + create: ReturnType; + queryByExternalId: ReturnType; +}; + +type MockedStaffRoleService = GraphContext['applicationServices']['User']['StaffRole'] & { + list: ReturnType; + createDefaultRoles: ReturnType; + queryById: ReturnType; + create: ReturnType; + update: ReturnType; +}; + +type TestGraphContext = Omit & { + applicationServices: Omit & { + User: Omit & { + StaffUser: MockedStaffUserService; + StaffRole: MockedStaffRoleService; + }; + }; +}; + +function makeMockGraphContext( + options: { jwt?: JwtOverride | null; staffUserServices?: Partial; staffRoleServices?: Partial } = {}, +): TestGraphContext { + const { jwt = {}, staffUserServices = {}, staffRoleServices = {} } = options; return { applicationServices: { User: { StaffUser: { createIfNotExists: vi.fn(), + list: vi.fn(), + assignRole: vi.fn(), + create: vi.fn(), queryByExternalId: vi.fn(), + ...staffUserServices, }, - }, - verifiedUser: { - verifiedJwt: { - sub: 'default-user-sub', - given_name: 'Jane', - family_name: 'Smith', - email: 'jane@example.com', - roles: [], + StaffRole: { + list: vi.fn(), + createDefaultRoles: vi.fn(), + queryById: vi.fn(), + create: vi.fn(), + update: vi.fn(), + ...staffRoleServices, }, }, - ...overrides.applicationServices, + verifiedUser: + jwt === null + ? undefined + : { + verifiedJwt: + jwt === null + ? undefined + : { + sub: 'default-user-sub', + given_name: 'Jane', + family_name: 'Smith', + email: 'jane@example.com', + roles: [], + ...jwt, + }, + }, }, - ...overrides, - } as unknown as GraphContext; + } as unknown as TestGraphContext; } -type QueryResolver = (parent: object, args: Record, context: GraphContext, info: GraphQLResolveInfo) => Promise; +// ─── Resolver call helpers ──────────────────────────────────────────────────── + +const Query = { + ...(staffRoleResolvers.Query ?? {}), + ...(staffUserResolvers.Query ?? {}), +} as Record unknown>; +const Mutation = { + ...(staffRoleResolvers.Mutation ?? {}), + ...(staffUserResolvers.Mutation ?? {}), +} as Record unknown>; + +const callQuery = (name: string, context: GraphContext, args: object = {}) => + // biome-ignore lint/style/noNonNullAssertion: test helper — key always exists + Query[name]!({}, args, context, makeMockInfo(name)) as Promise; -const callCurrentStaffUserQuery = (context: GraphContext) => (staffUserResolvers.Query?.currentStaffUserAndCreateIfNotExists as unknown as QueryResolver)({}, {}, context, makeMockInfo('currentStaffUserAndCreateIfNotExists')); +const callMutation = (name: string, context: GraphContext, args: object = {}) => + // biome-ignore lint/style/noNonNullAssertion: test helper — key always exists + Mutation[name]!({}, args, context, makeMockInfo(name)) as Promise; + +// ─── Tests ──────────────────────────────────────────────────────────────────── test.for(feature, ({ Scenario, BeforeEachScenario }) => { - let context: GraphContext; - let result: StaffUserEntity | null; + let context: TestGraphContext; + let result: unknown; + let thrownError: unknown; BeforeEachScenario(() => { context = makeMockGraphContext(); + result = undefined; + thrownError = undefined; vi.clearAllMocks(); - result = null; }); + // ─── currentStaffUserAndCreateIfNotExists ───────────────────────────────── + Scenario('Querying the current staff user and creating if not exists', ({ Given, When, Then, And }) => { const mockStaffUser = createMockStaffUser(); Given('a user with a verifiedJwt in their context', () => { - // Already set up in BeforeEachScenario with default jwt + context = makeMockGraphContext(); }); When('the currentStaffUserAndCreateIfNotExists query is executed', async () => { vi.mocked(context.applicationServices.User.StaffUser.createIfNotExists).mockResolvedValue(mockStaffUser); - result = await callCurrentStaffUserQuery(context); + result = await callQuery('currentStaffUserAndCreateIfNotExists', context); }); Then('it should call User.StaffUser.createIfNotExists with the JWT claims', () => { @@ -121,30 +213,12 @@ test.for(feature, ({ Scenario, BeforeEachScenario }) => { const aadRoles = ['Staff.CaseManager', 'Staff.Finance']; Given('a user with a verifiedJwt that includes AAD roles in their context', () => { - context = makeMockGraphContext({ - applicationServices: { - User: { - StaffUser: { - createIfNotExists: vi.fn(), - queryByExternalId: vi.fn(), - }, - }, - verifiedUser: { - verifiedJwt: { - sub: 'roles-user-sub', - given_name: 'Bob', - family_name: 'Jones', - email: 'bob@example.com', - roles: aadRoles, - }, - }, - } as unknown as GraphContext['applicationServices'], - }); + context = makeMockGraphContext({ jwt: { sub: 'roles-user-sub', given_name: 'Bob', family_name: 'Jones', email: 'bob@example.com', roles: aadRoles } }); }); When('the currentStaffUserAndCreateIfNotExists query is executed', async () => { vi.mocked(context.applicationServices.User.StaffUser.createIfNotExists).mockResolvedValue(mockStaffUser); - result = await callCurrentStaffUserQuery(context); + result = await callQuery('currentStaffUserAndCreateIfNotExists', context); }); Then('it should call User.StaffUser.createIfNotExists with the AAD roles', () => { @@ -164,17 +238,388 @@ test.for(feature, ({ Scenario, BeforeEachScenario }) => { Scenario('Querying the current staff user with no JWT', ({ Given, When, Then }) => { Given('a user without a verifiedJwt in their context', () => { - if (context.applicationServices.verifiedUser) { - context.applicationServices.verifiedUser.verifiedJwt = undefined; - } + context = makeMockGraphContext({ jwt: null }); }); When('the currentStaffUserAndCreateIfNotExists query is executed', async () => { - await expect(callCurrentStaffUserQuery(context)).rejects.toThrow('Unauthorized'); + try { + await callQuery('currentStaffUserAndCreateIfNotExists', context); + } catch (e) { + thrownError = e; + } + }); + + Then('it should throw an "Unauthorized" error', () => { + expect(thrownError).toBeDefined(); + expect((thrownError as Error).message).toBe('Unauthorized'); + }); + }); + + // ─── staffUsers ─────────────────────────────────────────────────────────── + + Scenario('Listing staff users when authenticated', ({ Given, When, Then }) => { + Given('a user with a verifiedJwt in their context', () => { + context = makeMockGraphContext(); + }); + + When('the staffUsers query is executed', async () => { + const mockUsers = [createMockStaffUser()]; + vi.mocked(context.applicationServices.User.StaffUser.list).mockResolvedValue(mockUsers); + result = await callQuery('staffUsers', context); + }); + + Then('it should return the list of staff users', () => { + expect(Array.isArray(result)).toBe(true); + }); + }); + + Scenario('Listing staff users when unauthenticated', ({ Given, When, Then }) => { + Given('a user without a verifiedJwt in their context', () => { + context = makeMockGraphContext({ jwt: null }); + }); + + When('the staffUsers query is executed', async () => { + try { + await callQuery('staffUsers', context); + } catch (e) { + thrownError = e; + } + }); + + Then('it should throw an "Unauthorized" error', () => { + expect((thrownError as Error).message).toBe('Unauthorized'); + }); + }); + + // ─── staffRoles ─────────────────────────────────────────────────────────── + + Scenario('Listing staff roles when authenticated', ({ Given, When, Then, And }) => { + const mockRoles = [createMockStaffRole()]; + + Given('a user with a verifiedJwt in their context', () => { + context = makeMockGraphContext(); + }); + + When('the staffRoles query is executed', async () => { + vi.mocked(context.applicationServices.User.StaffRole.createDefaultRoles).mockResolvedValue([]); + vi.mocked(context.applicationServices.User.StaffRole.list).mockResolvedValue(mockRoles); + result = await callQuery('staffRoles', context); + }); + + Then('it should call createDefaultRoles', () => { + expect(context.applicationServices.User.StaffRole.createDefaultRoles).toHaveBeenCalled(); + }); + + And('it should return the list of staff roles', () => { + expect(result).toEqual(mockRoles); + }); + }); + + Scenario('Listing staff roles when unauthenticated', ({ Given, When, Then }) => { + Given('a user without a verifiedJwt in their context', () => { + context = makeMockGraphContext({ jwt: null }); + }); + + When('the staffRoles query is executed', async () => { + try { + await callQuery('staffRoles', context); + } catch (e) { + thrownError = e; + } }); Then('it should throw an "Unauthorized" error', () => { - // Already asserted in When + expect((thrownError as Error).message).toBe('Unauthorized'); + }); + }); + + // ─── staffRoleById ──────────────────────────────────────────────────────── + + Scenario('Querying a staff role by id when authenticated', ({ Given, When, Then }) => { + const mockRole = createMockStaffRole({ id: 'role-001' }); + + Given('a user with a verifiedJwt in their context', () => { + context = makeMockGraphContext(); + }); + + When('the staffRoleById query is executed with id "role-001"', async () => { + vi.mocked(context.applicationServices.User.StaffRole.queryById).mockResolvedValue(mockRole); + result = await callQuery('staffRoleById', context, { id: 'role-001' }); + }); + + Then('it should return the staff role with id "role-001"', () => { + expect(result).toEqual(mockRole); + expect(context.applicationServices.User.StaffRole.queryById).toHaveBeenCalledWith({ roleId: 'role-001' }); + }); + }); + + Scenario('Querying a staff role by id when unauthenticated', ({ Given, When, Then }) => { + Given('a user without a verifiedJwt in their context', () => { + context = makeMockGraphContext({ jwt: null }); + }); + + When('the staffRoleById query is executed with id "role-001"', async () => { + try { + await callQuery('staffRoleById', context, { id: 'role-001' }); + } catch (e) { + thrownError = e; + } + }); + + Then('it should throw an "Unauthorized" error', () => { + expect((thrownError as Error).message).toBe('Unauthorized'); + }); + }); + + // ─── staffUserById ──────────────────────────────────────────────────────── + + Scenario('Querying a staff user by id when the user exists', ({ Given, When, Then }) => { + const mockUser = createMockStaffUser({ id: 'user-001' }); + + Given('a user with a verifiedJwt in their context', () => { + context = makeMockGraphContext(); + }); + + When('the staffUserById query is executed with id "user-001"', async () => { + vi.mocked(context.applicationServices.User.StaffUser.list).mockResolvedValue([mockUser]); + result = await callQuery('staffUserById', context, { id: 'user-001' }); + }); + + Then('it should return the staff user with id "user-001"', () => { + expect((result as StaffUserEntity)?.id).toBe('user-001'); + }); + }); + + Scenario('Querying a staff user by id when the user does not exist', ({ Given, When, Then }) => { + Given('a user with a verifiedJwt in their context', () => { + context = makeMockGraphContext(); + }); + + When('the staffUserById query is executed with id "user-missing"', async () => { + vi.mocked(context.applicationServices.User.StaffUser.list).mockResolvedValue([createMockStaffUser({ id: 'user-001' })]); + result = await callQuery('staffUserById', context, { id: 'user-missing' }); + }); + + Then('it should return null', () => { + expect(result).toBeNull(); + }); + }); + + Scenario('Querying a staff user by id when unauthenticated', ({ Given, When, Then }) => { + Given('a user without a verifiedJwt in their context', () => { + context = makeMockGraphContext({ jwt: null }); + }); + + When('the staffUserById query is executed with id "user-001"', async () => { + try { + await callQuery('staffUserById', context, { id: 'user-001' }); + } catch (e) { + thrownError = e; + } + }); + + Then('it should throw an "Unauthorized" error', () => { + expect((thrownError as Error).message).toBe('Unauthorized'); + }); + }); + + // ─── staffRoleCreate ────────────────────────────────────────────────────── + + Scenario('Creating a staff role as TechAdmin', ({ Given, When, Then }) => { + Given('a user with a verifiedJwt that includes the TechAdmin role', () => { + context = makeMockGraphContext({ jwt: { roles: ['Staff.TechAdmin'] } }); + }); + + When('the staffRoleCreate mutation is executed with roleName "New Role" and enterpriseAppRole "Staff.CaseManager"', async () => { + const mockRole = createMockStaffRole({ roleName: 'New Role', enterpriseAppRole: 'Staff.CaseManager' }); + vi.mocked(context.applicationServices.User.StaffRole.create).mockResolvedValue(mockRole); + result = await callMutation('staffRoleCreate', context, { input: { roleName: 'New Role', enterpriseAppRole: 'Staff.CaseManager' } }); + }); + + Then('it should return success with the created staff role', () => { + expect((result as { status: { success: boolean } }).status.success).toBe(true); + expect((result as { staffRole: StaffRoleEntity }).staffRole).toBeDefined(); + }); + }); + + Scenario('Creating a staff role with an unauthorized enterpriseAppRole', ({ Given, When, Then }) => { + Given('a user with a verifiedJwt that includes the CaseManager role', () => { + context = makeMockGraphContext({ jwt: { roles: ['Staff.CaseManager'] } }); + }); + + When('the staffRoleCreate mutation is executed with roleName "New Role" and enterpriseAppRole "Staff.TechAdmin"', async () => { + result = await callMutation('staffRoleCreate', context, { input: { roleName: 'New Role', enterpriseAppRole: 'Staff.TechAdmin' } }); + }); + + Then('it should return success with the updated staff role', () => { + const res = result as { status: { success: boolean }; staffRole: StaffRoleEntity }; + expect(res.status.success).toBe(true); + expect(res.staffRole).toBeDefined(); + }); + }); + + Scenario('Creating a staff role when unauthenticated', ({ Given, When, Then }) => { + Given('a user without a verifiedJwt in their context', () => { + context = makeMockGraphContext({ jwt: null }); + }); + + When('the staffRoleCreate mutation is executed with roleName "New Role" and enterpriseAppRole "Staff.CaseManager"', async () => { + result = await callMutation('staffRoleCreate', context, { input: { roleName: 'New Role', enterpriseAppRole: 'Staff.CaseManager' } }); + }); + + Then('it should return failure with message "Unauthorized"', () => { + const { status } = result as { status: { success: boolean; errorMessage: string } }; + expect(status.success).toBe(false); + expect(status.errorMessage).toBe('Unauthorized'); + }); + }); + + Scenario('Creating a staff role when the service throws', ({ Given, When, Then }) => { + Given('a user with a verifiedJwt that includes the TechAdmin role', () => { + context = makeMockGraphContext({ jwt: { roles: ['Staff.TechAdmin'] } }); + }); + + When('the staffRoleCreate mutation throws an error', async () => { + vi.mocked(context.applicationServices.User.StaffRole.create).mockRejectedValue(new Error('DB failure')); + result = await callMutation('staffRoleCreate', context, { input: { roleName: 'New Role', enterpriseAppRole: 'Staff.TechAdmin' } }); + }); + + Then('it should return failure with the error message', () => { + const { status } = result as { status: { success: boolean; errorMessage: string } }; + expect(status.success).toBe(false); + expect(status.errorMessage).toBe('DB failure'); + }); + }); + + // ─── staffRoleUpdate ────────────────────────────────────────────────────── + + Scenario('Updating a staff role as TechAdmin', ({ Given, When, Then }) => { + Given('a user with a verifiedJwt that includes the TechAdmin role', () => { + context = makeMockGraphContext({ jwt: { roles: ['Staff.TechAdmin'] } }); + }); + + When('the staffRoleUpdate mutation is executed with id "role-001" and enterpriseAppRole "Staff.TechAdmin"', async () => { + const mockRole = createMockStaffRole({ id: 'role-001', enterpriseAppRole: 'Staff.TechAdmin' }); + vi.mocked(context.applicationServices.User.StaffRole.update).mockResolvedValue(mockRole); + result = await callMutation('staffRoleUpdate', context, { input: { id: 'role-001', roleName: 'Updated Role', enterpriseAppRole: 'Staff.TechAdmin' } }); + }); + + Then('it should return success with the updated staff role', () => { + const res = result as { status: { success: boolean }; staffRole: StaffRoleEntity }; + expect(res.status.success).toBe(true); + expect(res.staffRole).toBeDefined(); + }); + }); + + Scenario('Updating a staff role with an unauthorized enterpriseAppRole', ({ Given, When, Then }) => { + Given('a user with a verifiedJwt that includes the CaseManager role', () => { + context = makeMockGraphContext({ jwt: { roles: ['Staff.CaseManager'] } }); + }); + + When('the staffRoleUpdate mutation is executed with id "role-001" and enterpriseAppRole "Staff.TechAdmin"', async () => { + result = await callMutation('staffRoleUpdate', context, { input: { id: 'role-001', roleName: 'Updated', enterpriseAppRole: 'Staff.TechAdmin' } }); + }); + + Then('it should return success with the updated staff user', () => { + const res = result as { status: { success: boolean }; staffUser: StaffUserEntity }; + expect(res.status.success).toBe(true); + expect(res.staffUser).toBeDefined(); + }); + }); + + Scenario('Updating a staff role when unauthenticated', ({ Given, When, Then }) => { + Given('a user without a verifiedJwt in their context', () => { + context = makeMockGraphContext({ jwt: null }); + }); + + When('the staffRoleUpdate mutation is executed with id "role-001" and enterpriseAppRole "Staff.TechAdmin"', async () => { + result = await callMutation('staffRoleUpdate', context, { input: { id: 'role-001', roleName: 'Updated', enterpriseAppRole: 'Staff.TechAdmin' } }); + }); + + Then('it should return failure with message "Unauthorized"', () => { + const { status } = result as { status: { success: boolean; errorMessage: string } }; + expect(status.success).toBe(false); + expect(status.errorMessage).toBe('Unauthorized'); + }); + }); + + // ─── staffUserAssignRole ────────────────────────────────────────────────── + + Scenario('Assigning a role as TechAdmin bypasses role-type check', ({ Given, When, Then }) => { + Given('a user with a verifiedJwt that includes the TechAdmin role', () => { + context = makeMockGraphContext({ jwt: { roles: ['Staff.TechAdmin'] } }); + }); + + When('the staffUserAssignRole mutation is executed with staffUserId "user-001" and roleId "role-001"', async () => { + const mockUser = createMockStaffUser({ id: 'user-001' }); + vi.mocked(context.applicationServices.User.StaffUser.assignRole).mockResolvedValue(mockUser); + result = await callMutation('staffUserAssignRole', context, { input: { staffUserId: 'user-001', roleId: 'role-001' } }); + }); + + Then('it should return success with the updated staff user', () => { + const res = result as { status: { success: boolean }; staffUser: StaffUserEntity }; + expect(res.status.success).toBe(true); + expect(res.staffUser).toBeDefined(); + }); + }); + + Scenario('Assigning an allowed role as non-TechAdmin', ({ Given, When, Then, And }) => { + Given('a user with a verifiedJwt that includes the CaseManager role', () => { + context = makeMockGraphContext({ jwt: { roles: ['Staff.CaseManager'] } }); + }); + + And('the role "role-001" has enterpriseAppRole "Staff.CaseManager"', () => { + const allowedRole = createMockStaffRole({ id: 'role-001', enterpriseAppRole: 'Staff.CaseManager' }); + vi.mocked(context.applicationServices.User.StaffRole.list).mockResolvedValue([allowedRole]); + }); + + When('the staffUserAssignRole mutation is executed with staffUserId "user-001" and roleId "role-001"', async () => { + const mockUser = createMockStaffUser({ id: 'user-001' }); + vi.mocked(context.applicationServices.User.StaffUser.assignRole).mockResolvedValue(mockUser); + result = await callMutation('staffUserAssignRole', context, { input: { staffUserId: 'user-001', roleId: 'role-001' } }); + }); + + Then('it should return success with the updated staff user', () => { + const res = result as { status: { success: boolean }; staffUser: StaffUserEntity }; + expect(res.status.success).toBe(true); + expect(res.staffUser).toBeDefined(); + }); + }); + + Scenario('Assigning a forbidden role as non-TechAdmin', ({ Given, When, Then, And }) => { + Given('a user with a verifiedJwt that includes the CaseManager role', () => { + context = makeMockGraphContext({ jwt: { roles: ['Staff.CaseManager'] } }); + }); + + And('the role "role-001" has enterpriseAppRole "Staff.TechAdmin"', () => { + const forbiddenRole = createMockStaffRole({ id: 'role-001', enterpriseAppRole: 'Staff.TechAdmin' }); + vi.mocked(context.applicationServices.User.StaffRole.list).mockResolvedValue([forbiddenRole]); + }); + + When('the staffUserAssignRole mutation is executed with staffUserId "user-001" and roleId "role-001"', async () => { + result = await callMutation('staffUserAssignRole', context, { input: { staffUserId: 'user-001', roleId: 'role-001' } }); + }); + + Then('it should return failure with a permission error message', () => { + const { status } = result as { status: { success: boolean; errorMessage: string } }; + expect(status.success).toBe(false); + expect(status.errorMessage).toContain('Staff.TechAdmin'); + }); + }); + + Scenario('Assigning a role when unauthenticated', ({ Given, When, Then }) => { + Given('a user without a verifiedJwt in their context', () => { + context = makeMockGraphContext({ jwt: null }); + }); + + When('the staffUserAssignRole mutation is executed with staffUserId "user-001" and roleId "role-001"', async () => { + result = await callMutation('staffUserAssignRole', context, { input: { staffUserId: 'user-001', roleId: 'role-001' } }); + }); + + Then('it should return failure with message "Unauthorized"', () => { + const { status } = result as { status: { success: boolean; errorMessage: string } }; + expect(status.success).toBe(false); + expect(status.errorMessage).toBe('Unauthorized'); }); }); }); diff --git a/packages/ocom/graphql/src/schema/types/staff-user.resolvers.ts b/packages/ocom/graphql/src/schema/types/staff-user.resolvers.ts index 38be5afa1..88c655121 100644 --- a/packages/ocom/graphql/src/schema/types/staff-user.resolvers.ts +++ b/packages/ocom/graphql/src/schema/types/staff-user.resolvers.ts @@ -1,22 +1,69 @@ import type { GraphQLResolveInfo } from 'graphql'; -import type { Resolvers } from '../builder/generated.ts'; +import type { MutationStaffUserAssignRoleArgs, QueryStaffUserByIdArgs, RequireFields, Resolvers } from '../builder/generated.ts'; import type { GraphContext } from '../context.ts'; const staffUser: Resolvers = { + StaffUserActivityDetail: { + activityByStaffUserDisplayName: async (parent, _args, context: GraphContext, _info: GraphQLResolveInfo) => { + if (!context.applicationServices.verifiedUser?.verifiedJwt) { + return parent.activityByStaffUserId; + } + const users = await context.applicationServices.User.StaffUser.list(); + const found = users.find((u) => String(u.id) === String(parent.activityByStaffUserId)); + return found?.displayName ?? parent.activityByStaffUserId; + }, + }, Query: { currentStaffUserAndCreateIfNotExists: async (_parent, _args, context: GraphContext, _info: GraphQLResolveInfo) => { const jwt = context.applicationServices.verifiedUser?.verifiedJwt; if (!jwt) { throw new Error('Unauthorized'); } - const result = await context.applicationServices.User.StaffUser.createIfNotExists({ + return await context.applicationServices.User.StaffUser.createIfNotExists({ externalId: jwt.sub, firstName: jwt.given_name ?? '', lastName: jwt.family_name ?? '', email: jwt.email ?? '', aadRoles: jwt.roles ?? [], }); - return result; + }, + + staffUsers: async (_parent, _args, context: GraphContext, _info: GraphQLResolveInfo) => { + if (!context.applicationServices.verifiedUser?.verifiedJwt) { + throw new Error('Unauthorized'); + } + return await context.applicationServices.User.StaffUser.list(); + }, + + staffUserById: async (_parent, args: QueryStaffUserByIdArgs, context: GraphContext, _info: GraphQLResolveInfo) => { + if (!context.applicationServices.verifiedUser?.verifiedJwt) { + throw new Error('Unauthorized'); + } + const users = await context.applicationServices.User.StaffUser.list(); + return users.find((u) => String(u.id) === String(args.id)) ?? null; + }, + }, + Mutation: { + staffUserAssignRole: async (_parent, args: RequireFields, context: GraphContext, _info: GraphQLResolveInfo) => { + const jwt = context.applicationServices.verifiedUser?.verifiedJwt; + if (!jwt) { + return { status: { success: false, errorMessage: 'Unauthorized' } }; + } + try { + const actorStaffUser = await context.applicationServices.User.StaffUser.queryByExternalId({ externalId: jwt.sub }); + const actorStaffUserId = actorStaffUser?.id ?? jwt.sub; + const command = { + staffUserId: String(args.input.staffUserId), + roleId: String(args.input.roleId), + actorStaffUserId, + }; + const staffUser = await context.applicationServices.User.StaffUser.assignRole(command); + return { status: { success: true }, staffUser }; + } catch (error) { + console.error('StaffUser > staffUserAssignRole: ', error); + const { message } = error as Error; + return { status: { success: false, errorMessage: message } }; + } }, }, }; diff --git a/packages/ocom/graphql/src/schema/types/staff-user.resolvers.unit.test.ts b/packages/ocom/graphql/src/schema/types/staff-user.resolvers.unit.test.ts new file mode 100644 index 000000000..861055d2a --- /dev/null +++ b/packages/ocom/graphql/src/schema/types/staff-user.resolvers.unit.test.ts @@ -0,0 +1,44 @@ +import type { GraphQLResolveInfo } from 'graphql'; +import { describe, expect, it, vi } from 'vitest'; +import type { StaffUserMutationResult } from '../builder/generated.ts'; +import type { GraphContext } from '../context.ts'; +import staffUserResolvers from './staff-user.resolvers.ts'; + +describe('staff-user.resolvers - unit tests', () => { + it('currentStaffUserAndCreateIfNotExists throws Unauthorized when no verifiedJwt', async () => { + const ctx = { applicationServices: {} } as unknown as GraphContext; + const Query = staffUserResolvers.Query as NonNullable; + const currentStaffUserAndCreateIfNotExists = Query.currentStaffUserAndCreateIfNotExists as unknown as (parent: unknown, args: unknown, context: GraphContext, info: GraphQLResolveInfo) => Promise; + await expect(currentStaffUserAndCreateIfNotExists(null, null, ctx, {} as unknown as GraphQLResolveInfo)).rejects.toThrow('Unauthorized'); + }); + + it('staffUserAssignRole returns failure status when assignRole throws', async () => { + // assignRole will throw; resolver should catch and return a failure status + const ctx = { + applicationServices: { + verifiedUser: { verifiedJwt: { sub: 'actor-1', roles: ['Staff.CaseManager'] } }, + User: { + StaffRole: { list: async () => [{ id: 'r1', enterpriseAppRole: 'Staff.CaseManager' }] }, + StaffUser: { + queryByExternalId: async () => null, + assignRole: () => Promise.reject(new Error('assign failed')), + }, + }, + }, + } as unknown as GraphContext; + + const consoleErr = vi.spyOn(console, 'error').mockImplementation(() => { + /* noop */ + }); + const Mutation = staffUserResolvers.Mutation as NonNullable; + const staffUserAssignRoleFn = Mutation.staffUserAssignRole as unknown as (parent: unknown, args: { input: { staffUserId: string; roleId: string } }, context: GraphContext, info: GraphQLResolveInfo) => Promise; + const res = await staffUserAssignRoleFn(null, { input: { staffUserId: 's1', roleId: 'r1' } }, ctx, {} as unknown as GraphQLResolveInfo); + const resTyped = res as StaffUserMutationResult; + expect(resTyped).toBeDefined(); + expect(resTyped.status).toBeDefined(); + expect(resTyped.status.success).toBe(false); + expect(resTyped.status.errorMessage).toBe('assign failed'); + expect(consoleErr).toHaveBeenCalled(); + consoleErr.mockRestore(); + }); +}); diff --git a/packages/ocom/persistence/src/datasources/domain/community/member/member-invitation.domain-adapter.test.ts b/packages/ocom/persistence/src/datasources/domain/community/member/member-invitation.domain-adapter.test.ts index 8ca4d7dc5..f603299e5 100644 --- a/packages/ocom/persistence/src/datasources/domain/community/member/member-invitation.domain-adapter.test.ts +++ b/packages/ocom/persistence/src/datasources/domain/community/member/member-invitation.domain-adapter.test.ts @@ -121,7 +121,7 @@ test.for(feature, ({ Scenario, Background, BeforeEachScenario }) => { Scenario('Getting message when document message is undefined', ({ Given, When, Then }) => { Given('a MemberInvitationDomainAdapter for a document with no message', () => { const docWithoutMessage = makeMemberInvitationDoc(); - delete (docWithoutMessage as unknown as Record)['message']; + delete (docWithoutMessage as unknown as Record).message; doc = docWithoutMessage; adapter = new MemberInvitationDomainAdapter(doc); }); diff --git a/packages/ocom/persistence/src/datasources/domain/community/member/member-invitation.repository.test.ts b/packages/ocom/persistence/src/datasources/domain/community/member/member-invitation.repository.test.ts index d9ff9c1d4..9fbb947ce 100644 --- a/packages/ocom/persistence/src/datasources/domain/community/member/member-invitation.repository.test.ts +++ b/packages/ocom/persistence/src/datasources/domain/community/member/member-invitation.repository.test.ts @@ -75,7 +75,7 @@ test.for(feature, ({ Scenario, Background, BeforeEachScenario }) => { })), find: vi.fn((query: Record) => ({ exec: vi.fn(() => { - if (query['communityId'] === 'empty-community') return []; + if (query.communityId === 'empty-community') return []; return [invitationDoc]; }), })), diff --git a/packages/ocom/persistence/src/datasources/domain/user/staff-role/features/staff-role.domain-adapter.feature b/packages/ocom/persistence/src/datasources/domain/user/staff-role/features/staff-role.domain-adapter.feature index b9f141636..48189fa63 100644 --- a/packages/ocom/persistence/src/datasources/domain/user/staff-role/features/staff-role.domain-adapter.feature +++ b/packages/ocom/persistence/src/datasources/domain/user/staff-role/features/staff-role.domain-adapter.feature @@ -316,4 +316,87 @@ Feature: StaffRoleDomainAdapter Scenario: Getting roleType returns null when document roleType is undefined Given a StaffRoleDomainAdapter wrapping a document with no roleType When I get the roleType property - Then it should return null \ No newline at end of file + Then it should return null + + # ─── enterpriseAppRole ────────────────────────────────────────────────────── + + Scenario: Getting enterpriseAppRole returns empty string when not set on the document + Given a StaffRoleDomainAdapter for the document + When I get the enterpriseAppRole property + Then it should return an empty string + + Scenario: Getting and setting the enterpriseAppRole property + Given a StaffRoleDomainAdapter for the document + When I set the enterpriseAppRole property to "LeadManager" + Then the document's enterpriseAppRole should be "LeadManager" + + Scenario: Setting roleName also updates enterpriseAppRole on the document + Given a StaffRoleDomainAdapter for the document + When I set the roleName property to "Director" + Then the document's enterpriseAppRole should also be "Director" + + Scenario: canAssignStaffRoles getter falls back to canAssignStaffRoles when unset + Given a StaffRoleDomainAdapter wrapping a document with userPermissions having only canAssignStaffRoles true + When I get the permissions property + And I get the userPermissions property + Then the canAssignStaffRoles property should return true + + Scenario: Setting canAssignStaffRoles updates both canAssignStaffRoles + Given a StaffRoleDomainAdapter for the document + When I get the permissions property + And I get the userPermissions property + When I set the canAssignStaffRoles property to true + Then the userPermissions' canAssignStaffRoles should be true + + # ─── violationTicketPermissions setters ────────────────────────────────────── + + Scenario: Setting canManageTickets on violationTicketPermissions + Given a StaffRoleDomainAdapter for the document + When I get the permissions property + And I get the violationTicketPermissions property + When I set the canManageTickets property to true + Then the violationTicketPermissions' canManageTickets should be true + + Scenario: Setting canAssignTickets on violationTicketPermissions + Given a StaffRoleDomainAdapter for the document + When I get the permissions property + And I get the violationTicketPermissions property + When I set the canAssignTickets property to true + Then the violationTicketPermissions' canAssignTickets should be true + + Scenario: Setting canWorkOnTickets on violationTicketPermissions + Given a StaffRoleDomainAdapter for the document + When I get the permissions property + And I get the violationTicketPermissions property + When I set the canWorkOnTickets property to true + Then the violationTicketPermissions' canWorkOnTickets should be true + + # ─── Lazy-init remaining sub-documents ─────────────────────────────────────── + + Scenario: Lazy-initialising propertyPermissions when sub-document is absent + Given a StaffRoleDomainAdapter wrapping a document with no propertyPermissions sub-document + When I get the permissions property + And I get the propertyPermissions property + Then it should return a StaffRolePropertyPermissionsAdapter instance + And canManageProperties should default to false + + Scenario: Lazy-initialising servicePermissions when sub-document is absent + Given a StaffRoleDomainAdapter wrapping a document with no servicePermissions sub-document + When I get the permissions property + And I get the servicePermissions property + Then it should return a StaffRoleServicePermissionsAdapter instance + And canManageServices should default to false + + Scenario: Lazy-initialising serviceTicketPermissions when sub-document is absent + Given a StaffRoleDomainAdapter wrapping a document with no serviceTicketPermissions sub-document + When I get the permissions property + And I get the serviceTicketPermissions property + Then it should return a StaffRoleServiceTicketPermissionsAdapter instance + And canCreateTickets should default to false + + Scenario: Lazy-initialising violationTicketPermissions when sub-document is absent + Given a StaffRoleDomainAdapter wrapping a document with no violationTicketPermissions sub-document + When I get the permissions property + And I get the violationTicketPermissions property + Then it should return a StaffRoleViolationTicketPermissionsAdapter instance + And canCreateTickets should default to false \ No newline at end of file diff --git a/packages/ocom/persistence/src/datasources/domain/user/staff-role/staff-role.domain-adapter.test.ts b/packages/ocom/persistence/src/datasources/domain/user/staff-role/staff-role.domain-adapter.test.ts index 993ae4954..3d173b13e 100644 --- a/packages/ocom/persistence/src/datasources/domain/user/staff-role/staff-role.domain-adapter.test.ts +++ b/packages/ocom/persistence/src/datasources/domain/user/staff-role/staff-role.domain-adapter.test.ts @@ -4,9 +4,6 @@ import { describeFeature, loadFeature } from '@amiceli/vitest-cucumber'; import type { StaffRole } from '@ocom/data-sources-mongoose-models/role/staff-role'; import { Domain } from '@ocom/domain'; import { expect, vi } from 'vitest'; - -const test = { for: describeFeature }; - import { StaffRoleCommunityPermissionsAdapter, StaffRoleConverter, @@ -21,6 +18,8 @@ import { StaffRoleViolationTicketPermissionsAdapter, } from './staff-role.domain-adapter.ts'; +const test = { for: describeFeature }; + const __dirname = path.dirname(fileURLToPath(import.meta.url)); const domainAdapterFeature = await loadFeature(path.resolve(__dirname, 'features/staff-role.domain-adapter.feature')); const typeConverterFeature = await loadFeature(path.resolve(__dirname, 'features/staff-role.type-converter.feature')); @@ -45,6 +44,11 @@ function makeStaffRoleDoc(overrides: Partial = {}) { servicePermissions: { canManageServices: false, }, + userPermissions: { + canManageUsers: false, + canAssignStaffRoles: false, + canViewStaffUsers: false, + }, serviceTicketPermissions: { canCreateTickets: false, canManageTickets: false, @@ -874,7 +878,7 @@ test.for(domainAdapterFeature, ({ Scenario, Background, BeforeEachScenario }) => docWithoutPermissions.set = vi.fn().mockImplementation((key: string, value: unknown) => { (docWithoutPermissions as unknown as Record)[key] = value; }); - (docWithoutPermissions as unknown as Record)['permissions'] = undefined; + (docWithoutPermissions as unknown as Record).permissions = undefined; adapter = new StaffRoleDomainAdapter(docWithoutPermissions); }); When('I get the permissions property', () => { @@ -890,7 +894,7 @@ test.for(domainAdapterFeature, ({ Scenario, Background, BeforeEachScenario }) => Given('a StaffRoleDomainAdapter wrapping a document with no communityPermissions sub-document', () => { const docWithout = makeStaffRoleDoc(); if (docWithout.permissions) { - (docWithout.permissions as unknown as Record)['communityPermissions'] = undefined; + (docWithout.permissions as unknown as Record).communityPermissions = undefined; } adapter = new StaffRoleDomainAdapter(docWithout); }); @@ -913,7 +917,7 @@ test.for(domainAdapterFeature, ({ Scenario, Background, BeforeEachScenario }) => Given('a StaffRoleDomainAdapter wrapping a document with no financePermissions sub-document', () => { const docWithout = makeStaffRoleDoc(); if (docWithout.permissions) { - (docWithout.permissions as unknown as Record)['financePermissions'] = undefined; + (docWithout.permissions as unknown as Record).financePermissions = undefined; } adapter = new StaffRoleDomainAdapter(docWithout); }); @@ -936,7 +940,7 @@ test.for(domainAdapterFeature, ({ Scenario, Background, BeforeEachScenario }) => Given('a StaffRoleDomainAdapter wrapping a document with no techAdminPermissions sub-document', () => { const docWithout = makeStaffRoleDoc(); if (docWithout.permissions) { - (docWithout.permissions as unknown as Record)['techAdminPermissions'] = undefined; + (docWithout.permissions as unknown as Record).techAdminPermissions = undefined; } adapter = new StaffRoleDomainAdapter(docWithout); }); @@ -959,7 +963,7 @@ test.for(domainAdapterFeature, ({ Scenario, Background, BeforeEachScenario }) => Given('a StaffRoleDomainAdapter wrapping a document with no userPermissions sub-document', () => { const docWithout = makeStaffRoleDoc(); if (docWithout.permissions) { - (docWithout.permissions as unknown as Record)['userPermissions'] = undefined; + (docWithout.permissions as unknown as Record).userPermissions = undefined; } adapter = new StaffRoleDomainAdapter(docWithout); }); @@ -980,7 +984,7 @@ test.for(domainAdapterFeature, ({ Scenario, Background, BeforeEachScenario }) => Scenario('Getting roleType returns null when document roleType is undefined', ({ Given, When, Then }) => { Given('a StaffRoleDomainAdapter wrapping a document with no roleType', () => { const docWithout = makeStaffRoleDoc(); - (docWithout as unknown as Record)['roleType'] = undefined; + (docWithout as unknown as Record).roleType = undefined; adapter = new StaffRoleDomainAdapter(docWithout); }); When('I get the roleType property', () => { @@ -990,6 +994,247 @@ test.for(domainAdapterFeature, ({ Scenario, Background, BeforeEachScenario }) => expect(result).toBeNull(); }); }); + + // ─── enterpriseAppRole ──────────────────────────────────────────────────── + + Scenario('Getting enterpriseAppRole returns empty string when not set on the document', ({ Given, When, Then }) => { + Given('a StaffRoleDomainAdapter for the document', () => { + adapter = new StaffRoleDomainAdapter(doc); + }); + When('I get the enterpriseAppRole property', () => { + result = adapter.enterpriseAppRole; + }); + Then('it should return an empty string', () => { + expect(result).toBe(''); + }); + }); + + Scenario('Getting and setting the enterpriseAppRole property', ({ Given, When, Then }) => { + Given('a StaffRoleDomainAdapter for the document', () => { + adapter = new StaffRoleDomainAdapter(doc); + }); + When('I set the enterpriseAppRole property to "LeadManager"', () => { + adapter.enterpriseAppRole = 'LeadManager'; + }); + Then('the document\'s enterpriseAppRole should be "LeadManager"', () => { + expect(doc.enterpriseAppRole).toBe('LeadManager'); + }); + }); + + Scenario('Setting roleName also updates enterpriseAppRole on the document', ({ Given, When, Then }) => { + Given('a StaffRoleDomainAdapter for the document', () => { + adapter = new StaffRoleDomainAdapter(doc); + }); + When('I set the roleName property to "Director"', () => { + adapter.roleName = 'Director'; + }); + Then('the document\'s enterpriseAppRole should also be "Director"', () => { + expect(doc.enterpriseAppRole).toBe('Director'); + }); + }); + + Scenario('canAssignStaffRoles getter falls back to canAssignStaffRoles when unset', ({ Given, When, And, Then }) => { + let permissions: StaffRolePermissionsAdapter; + let userPermissions: StaffRoleUserPermissionsAdapter; + Given('a StaffRoleDomainAdapter wrapping a document with userPermissions having only canAssignStaffRoles true', () => { + const docWith = makeStaffRoleDoc({ + permissions: { + ...(makeStaffRoleDoc().permissions ?? {}), + userPermissions: { + canManageUsers: false, + canAssignStaffRoles: true, + canViewStaffUsers: false, + }, + }, + }); + adapter = new StaffRoleDomainAdapter(docWith); + }); + When('I get the permissions property', () => { + permissions = adapter.permissions as StaffRolePermissionsAdapter; + }); + And('I get the userPermissions property', () => { + userPermissions = permissions.userPermissions as StaffRoleUserPermissionsAdapter; + }); + Then('the canAssignStaffRoles property should return true', () => { + expect(userPermissions.canAssignStaffRoles).toBe(true); + }); + }); + + Scenario('Setting canAssignStaffRoles updates the canAssignStaffRoles property', ({ Given, When, And, Then }) => { + let permissions: StaffRolePermissionsAdapter; + let userPermissions: StaffRoleUserPermissionsAdapter; + Given('a StaffRoleDomainAdapter for the document', () => { + adapter = new StaffRoleDomainAdapter(doc); + }); + When('I get the permissions property', () => { + permissions = adapter.permissions as StaffRolePermissionsAdapter; + }); + And('I get the userPermissions property', () => { + userPermissions = permissions.userPermissions as StaffRoleUserPermissionsAdapter; + }); + When('I set the canAssignStaffRoles property to true', () => { + userPermissions.canAssignStaffRoles = true; + }); + Then("the userPermissions' canAssignStaffRoles should be true", () => { + expect(doc.permissions?.userPermissions?.canAssignStaffRoles).toBe(true); + }); + }); + + // ─── violationTicketPermissions setters ─────────────────────────────────── + + Scenario('Setting canManageTickets on violationTicketPermissions', ({ Given, When, And, Then }) => { + let permissions: StaffRolePermissionsAdapter; + let violationTicketPermissions: StaffRoleViolationTicketPermissionsAdapter; + Given('a StaffRoleDomainAdapter for the document', () => { + adapter = new StaffRoleDomainAdapter(doc); + }); + When('I get the permissions property', () => { + permissions = adapter.permissions as StaffRolePermissionsAdapter; + }); + And('I get the violationTicketPermissions property', () => { + violationTicketPermissions = permissions.violationTicketPermissions as StaffRoleViolationTicketPermissionsAdapter; + }); + When('I set the canManageTickets property to true', () => { + violationTicketPermissions.canManageTickets = true; + }); + Then("the violationTicketPermissions' canManageTickets should be true", () => { + expect(doc.permissions?.violationTicketPermissions?.canManageTickets).toBe(true); + }); + }); + + Scenario('Setting canAssignTickets on violationTicketPermissions', ({ Given, When, And, Then }) => { + let permissions: StaffRolePermissionsAdapter; + let violationTicketPermissions: StaffRoleViolationTicketPermissionsAdapter; + Given('a StaffRoleDomainAdapter for the document', () => { + adapter = new StaffRoleDomainAdapter(doc); + }); + When('I get the permissions property', () => { + permissions = adapter.permissions as StaffRolePermissionsAdapter; + }); + And('I get the violationTicketPermissions property', () => { + violationTicketPermissions = permissions.violationTicketPermissions as StaffRoleViolationTicketPermissionsAdapter; + }); + When('I set the canAssignTickets property to true', () => { + violationTicketPermissions.canAssignTickets = true; + }); + Then("the violationTicketPermissions' canAssignTickets should be true", () => { + expect(doc.permissions?.violationTicketPermissions?.canAssignTickets).toBe(true); + }); + }); + + Scenario('Setting canWorkOnTickets on violationTicketPermissions', ({ Given, When, And, Then }) => { + let permissions: StaffRolePermissionsAdapter; + let violationTicketPermissions: StaffRoleViolationTicketPermissionsAdapter; + Given('a StaffRoleDomainAdapter for the document', () => { + adapter = new StaffRoleDomainAdapter(doc); + }); + When('I get the permissions property', () => { + permissions = adapter.permissions as StaffRolePermissionsAdapter; + }); + And('I get the violationTicketPermissions property', () => { + violationTicketPermissions = permissions.violationTicketPermissions as StaffRoleViolationTicketPermissionsAdapter; + }); + When('I set the canWorkOnTickets property to true', () => { + violationTicketPermissions.canWorkOnTickets = true; + }); + Then("the violationTicketPermissions' canWorkOnTickets should be true", () => { + expect(doc.permissions?.violationTicketPermissions?.canWorkOnTickets).toBe(true); + }); + }); + + // ─── Lazy-init remaining sub-documents ──────────────────────────────────── + + Scenario('Lazy-initialising propertyPermissions when sub-document is absent', ({ Given, When, And, Then }) => { + let permissions: StaffRolePermissionsAdapter; + Given('a StaffRoleDomainAdapter wrapping a document with no propertyPermissions sub-document', () => { + const docWithout = makeStaffRoleDoc(); + if (docWithout.permissions) { + (docWithout.permissions as unknown as Record).propertyPermissions = undefined; + } + adapter = new StaffRoleDomainAdapter(docWithout); + }); + When('I get the permissions property', () => { + permissions = adapter.permissions as StaffRolePermissionsAdapter; + }); + And('I get the propertyPermissions property', () => { + result = permissions.propertyPermissions; + }); + Then('it should return a StaffRolePropertyPermissionsAdapter instance', () => { + expect(result).toBeInstanceOf(StaffRolePropertyPermissionsAdapter); + }); + And('canManageProperties should default to false', () => { + expect((result as StaffRolePropertyPermissionsAdapter).canManageProperties).toBe(false); + }); + }); + + Scenario('Lazy-initialising servicePermissions when sub-document is absent', ({ Given, When, And, Then }) => { + let permissions: StaffRolePermissionsAdapter; + Given('a StaffRoleDomainAdapter wrapping a document with no servicePermissions sub-document', () => { + const docWithout = makeStaffRoleDoc(); + if (docWithout.permissions) { + (docWithout.permissions as unknown as Record).servicePermissions = undefined; + } + adapter = new StaffRoleDomainAdapter(docWithout); + }); + When('I get the permissions property', () => { + permissions = adapter.permissions as StaffRolePermissionsAdapter; + }); + And('I get the servicePermissions property', () => { + result = permissions.servicePermissions; + }); + Then('it should return a StaffRoleServicePermissionsAdapter instance', () => { + expect(result).toBeInstanceOf(StaffRoleServicePermissionsAdapter); + }); + And('canManageServices should default to false', () => { + expect((result as StaffRoleServicePermissionsAdapter).canManageServices).toBe(false); + }); + }); + + Scenario('Lazy-initialising serviceTicketPermissions when sub-document is absent', ({ Given, When, And, Then }) => { + let permissions: StaffRolePermissionsAdapter; + Given('a StaffRoleDomainAdapter wrapping a document with no serviceTicketPermissions sub-document', () => { + const docWithout = makeStaffRoleDoc(); + if (docWithout.permissions) { + (docWithout.permissions as unknown as Record).serviceTicketPermissions = undefined; + } + adapter = new StaffRoleDomainAdapter(docWithout); + }); + When('I get the permissions property', () => { + permissions = adapter.permissions as StaffRolePermissionsAdapter; + }); + And('I get the serviceTicketPermissions property', () => { + result = permissions.serviceTicketPermissions; + }); + Then('it should return a StaffRoleServiceTicketPermissionsAdapter instance', () => { + expect(result).toBeInstanceOf(StaffRoleServiceTicketPermissionsAdapter); + }); + And('canCreateTickets should default to false', () => { + expect((result as StaffRoleServiceTicketPermissionsAdapter).canCreateTickets).toBe(false); + }); + }); + + Scenario('Lazy-initialising violationTicketPermissions when sub-document is absent', ({ Given, When, And, Then }) => { + let permissions: StaffRolePermissionsAdapter; + Given('a StaffRoleDomainAdapter wrapping a document with no violationTicketPermissions sub-document', () => { + const docWithout = makeStaffRoleDoc(); + if (docWithout.permissions) { + (docWithout.permissions as unknown as Record).violationTicketPermissions = undefined; + } + adapter = new StaffRoleDomainAdapter(docWithout); + }); + When('I get the permissions property', () => { + permissions = adapter.permissions as StaffRolePermissionsAdapter; + }); + And('I get the violationTicketPermissions property', () => { + result = permissions.violationTicketPermissions; + }); + Then('it should return a StaffRoleViolationTicketPermissionsAdapter instance', () => { + expect(result).toBeInstanceOf(StaffRoleViolationTicketPermissionsAdapter); + }); + And('canCreateTickets should default to false', () => { + expect((result as StaffRoleViolationTicketPermissionsAdapter).canCreateTickets).toBe(false); + }); + }); }); test.for(typeConverterFeature, ({ Scenario, Background, BeforeEachScenario }) => { diff --git a/packages/ocom/persistence/src/datasources/domain/user/staff-role/staff-role.domain-adapter.ts b/packages/ocom/persistence/src/datasources/domain/user/staff-role/staff-role.domain-adapter.ts index 7bbf2c918..1a94a9907 100644 --- a/packages/ocom/persistence/src/datasources/domain/user/staff-role/staff-role.domain-adapter.ts +++ b/packages/ocom/persistence/src/datasources/domain/user/staff-role/staff-role.domain-adapter.ts @@ -5,6 +5,7 @@ import type { StaffRoleFinancePermissions, StaffRolePermissions, StaffRolePropertyPermissions, + StaffRoleRolePermissions, StaffRoleServicePermissions, StaffRoleServiceTicketPermissions, StaffRoleTechAdminPermissions, @@ -152,10 +153,24 @@ export class StaffRolePermissionsAdapter implements Domain.Contexts.User.StaffRo if (!this.doc.userPermissions) { this.doc.userPermissions = { canManageUsers: false, + canAssignStaffRoles: false, + canViewStaffUsers: false, }; } return new StaffRoleUserPermissionsAdapter(this.doc.userPermissions); } + + get staffRolePermissions(): Domain.Contexts.User.StaffRole.StaffRoleRolePermissionsProps { + if (!this.doc.staffRolePermissions) { + this.doc.staffRolePermissions = { + canViewRoles: false, + canAddRole: false, + canEditRole: false, + canRemoveRole: false, + }; + } + return new StaffRoleRolePermissionsAdapter(this.doc.staffRolePermissions); + } } export class StaffRoleCommunityPermissionsAdapter implements Domain.Contexts.User.StaffRole.StaffRoleCommunityPermissionsProps { @@ -441,4 +456,58 @@ export class StaffRoleUserPermissionsAdapter implements Domain.Contexts.User.Sta set canManageUsers(value: boolean) { this.doc.canManageUsers = value; } + + get canAssignStaffRoles(): boolean { + return this.ensureValue(this.doc.canAssignStaffRoles); + } + set canAssignStaffRoles(value: boolean) { + this.doc.canAssignStaffRoles = value; + } + + get canViewStaffUsers(): boolean { + return this.ensureValue(this.doc.canViewStaffUsers); + } + set canViewStaffUsers(value: boolean) { + this.doc.canViewStaffUsers = value; + } +} + +class StaffRoleRolePermissionsAdapter implements Domain.Contexts.User.StaffRole.StaffRoleRolePermissionsProps { + public readonly doc: StaffRoleRolePermissions; + + constructor(permissions: StaffRoleRolePermissions) { + this.doc = permissions; + } + + get id(): string | undefined { + return this.doc.id?.toString(); + } + + get canViewRoles(): boolean { + return this.doc.canViewRoles; + } + set canViewRoles(value: boolean) { + this.doc.canViewRoles = value; + } + + get canAddRole(): boolean { + return this.doc.canAddRole; + } + set canAddRole(value: boolean) { + this.doc.canAddRole = value; + } + + get canEditRole(): boolean { + return this.doc.canEditRole; + } + set canEditRole(value: boolean) { + this.doc.canEditRole = value; + } + + get canRemoveRole(): boolean { + return this.doc.canRemoveRole; + } + set canRemoveRole(value: boolean) { + this.doc.canRemoveRole = value; + } } 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 1940529fc..375d9765c 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,14 +85,17 @@ test.for(feature, ({ Scenario, Background, BeforeEachScenario }) => { }; Object.assign(ModelMock, { findById: vi.fn((id: string) => ({ - exec: vi.fn(() => Promise.resolve(id === String(staffRoleDoc._id) ? staffRoleDoc : null)), + exec: vi.fn(() => (id === staffRoleDoc._id ? staffRoleDoc : null)), })), - findOne: vi.fn((query: { roleName?: string; isDefault?: boolean; enterpriseAppRole?: string }) => ({ + findOne: vi.fn((query: { roleName?: string; enterpriseAppRole?: string; isDefault?: boolean }) => ({ exec: vi.fn(() => { if (query.enterpriseAppRole !== undefined) { return query.enterpriseAppRole === staffRoleDoc.enterpriseAppRole && query.isDefault === staffRoleDoc.isDefault ? staffRoleDoc : null; } - return query.roleName === staffRoleDoc.roleName ? staffRoleDoc : null; + if (query.enterpriseAppRole && query.isDefault === true) { + return query.enterpriseAppRole === staffRoleDoc.enterpriseAppRole && staffRoleDoc.isDefault ? staffRoleDoc : null; + } + return null; }), })), prototype: {}, diff --git a/packages/ocom/persistence/src/datasources/domain/user/staff-role/staff-role.repository.ts b/packages/ocom/persistence/src/datasources/domain/user/staff-role/staff-role.repository.ts index cf7e555f3..e0e2acb49 100644 --- a/packages/ocom/persistence/src/datasources/domain/user/staff-role/staff-role.repository.ts +++ b/packages/ocom/persistence/src/datasources/domain/user/staff-role/staff-role.repository.ts @@ -1,3 +1,4 @@ +import { NotFoundError } from '@cellix/domain-seedwork/repository'; import { MongooseSeedwork } from '@cellix/mongoose-seedwork'; import type { StaffRole } from '@ocom/data-sources-mongoose-models/role/staff-role'; import { Domain } from '@ocom/domain'; @@ -13,7 +14,7 @@ export class StaffRoleRepository async getById(id: string): Promise> { const staffRole = await this.model.findById(id).exec(); if (!staffRole) { - throw new Error(`StaffRole with id ${id} not found`); + throw new NotFoundError(`StaffRole with id ${id} not found`); } return this.typeConverter.toDomain(staffRole, this.passport); } @@ -21,7 +22,7 @@ export class StaffRoleRepository async getByRoleName(roleName: string): Promise> { const staffRole = await this.model.findOne({ roleName }).exec(); if (!staffRole) { - throw new Error(`StaffRole with roleName ${roleName} not found`); + throw new NotFoundError(`StaffRole with roleName ${roleName} not found`); } return this.typeConverter.toDomain(staffRole, this.passport); } @@ -29,7 +30,7 @@ export class StaffRoleRepository async getDefaultRoleByEnterpriseAppRole(enterpriseAppRole: string): Promise> { const staffRole = await this.model.findOne({ isDefault: true, enterpriseAppRole }).exec(); if (!staffRole) { - throw new Error(`Default StaffRole with enterpriseAppRole ${enterpriseAppRole} not found`); + throw new NotFoundError(`Default StaffRole with enterpriseAppRole ${enterpriseAppRole} not found`); } return this.typeConverter.toDomain(staffRole, this.passport); } diff --git a/packages/ocom/persistence/src/datasources/domain/user/staff-user/staff-user.domain-adapter.ts b/packages/ocom/persistence/src/datasources/domain/user/staff-user/staff-user.domain-adapter.ts index f9865ef55..c230ad5b8 100644 --- a/packages/ocom/persistence/src/datasources/domain/user/staff-user/staff-user.domain-adapter.ts +++ b/packages/ocom/persistence/src/datasources/domain/user/staff-user/staff-user.domain-adapter.ts @@ -1,9 +1,10 @@ import { MongooseSeedwork } from '@cellix/mongoose-seedwork'; +import type { PropArray } from '@cellix/domain-seedwork/prop-array'; import { Domain } from '@ocom/domain'; import { StaffRoleDomainAdapter } from '../staff-role/staff-role.domain-adapter.ts'; import type { StaffRole } from '@ocom/data-sources-mongoose-models/role/staff-role'; -import type { StaffUser } from '@ocom/data-sources-mongoose-models/user/staff-user'; +import type { StaffUser, StaffUserActivityDetail } from '@ocom/data-sources-mongoose-models/user/staff-user'; export class StaffUserDomainAdapter extends MongooseSeedwork.MongooseDomainAdapter implements Domain.Contexts.User.StaffUser.StaffUserProps { get role(): Domain.Contexts.User.StaffRole.StaffRoleProps { @@ -101,6 +102,51 @@ export class StaffUserDomainAdapter extends MongooseSeedwork.MongooseDomainAdapt override get schemaVersion(): string { return this.doc.schemaVersion ?? '1.0.0'; } + + get activityLog(): PropArray { + return new MongooseSeedwork.MongoosePropArray(this.doc.activityLog, StaffUserActivityLogDomainAdapter); + } +} + +class StaffUserActivityLogDomainAdapter implements Domain.Contexts.User.StaffUser.StaffUserActivityLogProps { + public readonly doc: StaffUserActivityDetail; + + constructor(doc: StaffUserActivityDetail) { + this.doc = doc; + } + + get id(): string { + return this.doc.id?.valueOf() as string; + } + + get activityType(): string { + return this.doc.activityType; + } + set activityType(activityType: string) { + this.doc.activityType = activityType; + } + + get activityDescription(): string { + return this.doc.activityDescription; + } + set activityDescription(activityDescription: string) { + this.doc.activityDescription = activityDescription; + } + + get activityByStaffUserId(): string { + return this.doc.activityBy?.valueOf() as string; + } + set activityByStaffUserId(id: string) { + this.doc.set('activityBy', new MongooseSeedwork.ObjectId(id)); + } + + get createdAt(): Date { + return this.doc.createdAt; + } + + get updatedAt(): Date { + return this.doc.updatedAt; + } } export class StaffUserConverter extends MongooseSeedwork.MongoTypeConverter> { diff --git a/packages/ocom/persistence/src/datasources/readonly/index.test.ts b/packages/ocom/persistence/src/datasources/readonly/index.test.ts index 536162ec4..07f463f8b 100644 --- a/packages/ocom/persistence/src/datasources/readonly/index.test.ts +++ b/packages/ocom/persistence/src/datasources/readonly/index.test.ts @@ -3,6 +3,7 @@ import { fileURLToPath } from 'node:url'; import { describeFeature, loadFeature } from '@amiceli/vitest-cucumber'; import type { CommunityModelType } from '@ocom/data-sources-mongoose-models/community'; import type { MemberModelType } from '@ocom/data-sources-mongoose-models/member'; +import type { StaffRoleModelType } from '@ocom/data-sources-mongoose-models/role/staff-role'; import type { EndUserModelType } from '@ocom/data-sources-mongoose-models/user/end-user'; import type { StaffUserModelType } from '@ocom/data-sources-mongoose-models/user/staff-user'; import type { Domain } from '@ocom/domain'; @@ -32,6 +33,11 @@ function makeMockModelsContext() { create: vi.fn(), aggregate: vi.fn(), } as unknown as EndUserModelType, + StaffRole: { + findById: vi.fn(), + find: vi.fn(), + create: vi.fn(), + } as unknown as StaffRoleModelType, StaffUser: { findById: vi.fn(), findOne: vi.fn(), @@ -107,6 +113,8 @@ test.for(feature, ({ Scenario, Background, BeforeEachScenario }) => { And('the User property should have the correct structure', () => { expect(result.User).toHaveProperty('EndUser'); expect(result.User.EndUser).toHaveProperty('EndUserReadRepo'); + expect(result.User).toHaveProperty('StaffRole'); + expect(result.User.StaffRole).toHaveProperty('StaffRoleReadRepo'); expect(result.User).toHaveProperty('StaffUser'); expect(result.User.StaffUser).toHaveProperty('StaffUserReadRepo'); }); diff --git a/packages/ocom/persistence/src/datasources/readonly/index.ts b/packages/ocom/persistence/src/datasources/readonly/index.ts index 9342ba8ad..875d9dfce 100644 --- a/packages/ocom/persistence/src/datasources/readonly/index.ts +++ b/packages/ocom/persistence/src/datasources/readonly/index.ts @@ -4,6 +4,7 @@ import type * as Community from './community/community/index.ts'; import { CommunityContext } from './community/index.ts'; import type * as Member from './community/member/index.ts'; import type * as EndUser from './user/end-user/index.ts'; +import type * as StaffRole from './user/staff-role/index.ts'; import { UserContext } from './user/index.ts'; import type * as StaffUser from './user/staff-user/index.ts'; @@ -20,6 +21,9 @@ export interface ReadonlyDataSource { EndUser: { EndUserReadRepo: EndUser.EndUserReadRepository; }; + StaffRole: { + StaffRoleReadRepo: StaffRole.StaffRoleReadRepository; + }; StaffUser: { StaffUserReadRepo: StaffUser.StaffUserReadRepository; }; diff --git a/packages/ocom/persistence/src/datasources/readonly/user/index.ts b/packages/ocom/persistence/src/datasources/readonly/user/index.ts index ab40bc6e7..a6229b1d0 100644 --- a/packages/ocom/persistence/src/datasources/readonly/user/index.ts +++ b/packages/ocom/persistence/src/datasources/readonly/user/index.ts @@ -1,9 +1,11 @@ import type { Domain } from '@ocom/domain'; import type { ModelsContext } from '../../../index.ts'; import { EndUserReadRepositoryImpl } from './end-user/index.ts'; +import { StaffRoleReadRepositoryImpl } from './staff-role/index.ts'; import { StaffUserReadRepositoryImpl } from './staff-user/index.ts'; export const UserContext = (models: ModelsContext, passport: Domain.Passport) => ({ EndUser: EndUserReadRepositoryImpl(models, passport), + StaffRole: StaffRoleReadRepositoryImpl(models, passport), StaffUser: StaffUserReadRepositoryImpl(models, passport), }); diff --git a/packages/ocom/persistence/src/datasources/readonly/user/staff-role/features/staff-role.read-repository.feature b/packages/ocom/persistence/src/datasources/readonly/user/staff-role/features/staff-role.read-repository.feature new file mode 100644 index 000000000..f86998055 --- /dev/null +++ b/packages/ocom/persistence/src/datasources/readonly/user/staff-role/features/staff-role.read-repository.feature @@ -0,0 +1,35 @@ +Feature: StaffRoleReadRepository + + Scenario: Creating StaffRoleReadRepository throws when StaffRole model is missing + Given models context does not contain a StaffRole model + When I call getStaffRoleReadRepository with those models and a passport + Then it should throw an error with message "StaffRole model is not available in the mongoose context" + + Scenario: Creating StaffRoleReadRepository succeeds when StaffRole model is present + Given models context contains a StaffRole model + When I call getStaffRoleReadRepository with those models and a passport + Then I should receive a StaffRoleReadRepository instance + And the repository should have a getAll method + And the repository should have a getById method + + Scenario: getAll returns a list of entities when documents are found + Given StaffRole documents exist in the collection + When I call getAll + Then I should receive an array of StaffRoleEntityReference objects + And the converter toDomain should have been called for each document + + Scenario: getAll returns an empty array when no documents exist + Given no StaffRole documents exist in the collection + When I call getAll + Then I should receive an empty array + + Scenario: getById returns an entity when a document is found + Given a StaffRole document exists with id "role-001" + When I call getById with "role-001" + Then I should receive a StaffRoleEntityReference object + And the converter toDomain should have been called with the document and passport + + Scenario: getById returns null when no document is found + Given no StaffRole document exists with id "missing-id" + When I call getById with "missing-id" + Then I should receive null diff --git a/packages/ocom/persistence/src/datasources/readonly/user/staff-role/index.ts b/packages/ocom/persistence/src/datasources/readonly/user/staff-role/index.ts new file mode 100644 index 000000000..4ead818ad --- /dev/null +++ b/packages/ocom/persistence/src/datasources/readonly/user/staff-role/index.ts @@ -0,0 +1,11 @@ +import type { Domain } from '@ocom/domain'; +import type { ModelsContext } from '../../../../index.ts'; +import { getStaffRoleReadRepository } from './staff-role.read-repository.ts'; + +export type { StaffRoleReadRepository } from './staff-role.read-repository.ts'; + +export const StaffRoleReadRepositoryImpl = (models: ModelsContext, passport: Domain.Passport) => { + return { + StaffRoleReadRepo: getStaffRoleReadRepository(models, passport), + }; +}; diff --git a/packages/ocom/persistence/src/datasources/readonly/user/staff-role/staff-role.read-repository.test.ts b/packages/ocom/persistence/src/datasources/readonly/user/staff-role/staff-role.read-repository.test.ts new file mode 100644 index 000000000..3f517d441 --- /dev/null +++ b/packages/ocom/persistence/src/datasources/readonly/user/staff-role/staff-role.read-repository.test.ts @@ -0,0 +1,185 @@ +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { describeFeature, loadFeature } from '@amiceli/vitest-cucumber'; +import { expect, vi } from 'vitest'; + +import type { Domain } from '@ocom/domain'; +import type { StaffRole, StaffRoleModelType } from '@ocom/data-sources-mongoose-models/role/staff-role'; +import type { ModelsContext } from '../../../../index.ts'; +import { StaffRoleConverter } from '../../../domain/user/staff-role/staff-role.domain-adapter.ts'; +import { getStaffRoleReadRepository } from './staff-role.read-repository.ts'; +import type { StaffRoleReadRepository } from './staff-role.read-repository.ts'; + +const test = { for: describeFeature }; + +vi.mock('../../../domain/user/staff-role/staff-role.domain-adapter.ts', () => ({ + StaffRoleConverter: vi.fn(), +})); + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const feature = await loadFeature(path.resolve(__dirname, 'features/staff-role.read-repository.feature')); + +function makeMockPassport() { + return {} as unknown as Domain.Passport; +} + +function makeMockStaffRoleDocument(overrides: Partial = {}) { + return { + _id: 'role-001', + id: 'role-001', + roleName: 'Admin', + isDefault: false, + roleType: 'staff', + ...overrides, + } as unknown as StaffRole; +} + +function makeMockModelForFind(docs: StaffRole[]) { + return { + find: vi.fn().mockReturnValue({ + exec: vi.fn().mockResolvedValue(docs), + }), + findById: vi.fn().mockReturnValue({ + exec: vi.fn().mockResolvedValue(docs[0] ?? null), + }), + } as unknown as StaffRoleModelType; +} + +function makeMockModelFindById(doc: StaffRole | null) { + return { + find: vi.fn().mockReturnValue({ + exec: vi.fn().mockResolvedValue([]), + }), + findById: vi.fn().mockReturnValue({ + exec: vi.fn().mockResolvedValue(doc), + }), + } as unknown as StaffRoleModelType; +} + +test.for(feature, ({ Scenario, BeforeEachScenario }) => { + let models: ModelsContext; + let passport: Domain.Passport; + let repository: StaffRoleReadRepository; + let mockDoc: StaffRole; + let result: Domain.Contexts.User.StaffRole.StaffRoleEntityReference | Domain.Contexts.User.StaffRole.StaffRoleEntityReference[] | null | unknown; + let mockConverter: { toDomain: ReturnType }; + let thrownError: unknown; + + BeforeEachScenario(() => { + passport = makeMockPassport(); + mockDoc = makeMockStaffRoleDocument(); + thrownError = undefined; + result = undefined; + + mockConverter = { + toDomain: vi.fn((_doc: StaffRole, _passport: Domain.Passport) => ({ + id: mockDoc.id, + roleName: mockDoc.roleName, + })), + }; + + vi.mocked(StaffRoleConverter).mockImplementation(function MockStaffRoleConverter() { + return mockConverter as unknown as StaffRoleConverter; + }); + }); + + Scenario('Creating StaffRoleReadRepository throws when StaffRole model is missing', ({ Given, When, Then }) => { + Given('models context does not contain a StaffRole model', () => { + models = {} as ModelsContext; + }); + When('I call getStaffRoleReadRepository with those models and a passport', () => { + try { + repository = getStaffRoleReadRepository(models, passport); + } catch (err) { + thrownError = err; + } + }); + Then('it should throw an error with message "StaffRole model is not available in the mongoose context"', () => { + expect(thrownError).toBeInstanceOf(Error); + expect((thrownError as Error).message).toBe('StaffRole model is not available in the mongoose context'); + }); + }); + + Scenario('Creating StaffRoleReadRepository succeeds when StaffRole model is present', ({ Given, When, Then, And }) => { + Given('models context contains a StaffRole model', () => { + models = { StaffRole: makeMockModelForFind([mockDoc]) } as unknown as ModelsContext; + }); + When('I call getStaffRoleReadRepository with those models and a passport', () => { + repository = getStaffRoleReadRepository(models, passport); + }); + Then('I should receive a StaffRoleReadRepository instance', () => { + expect(repository).toBeDefined(); + }); + And('the repository should have a getAll method', () => { + expect(typeof repository.getAll).toBe('function'); + }); + And('the repository should have a getById method', () => { + expect(typeof repository.getById).toBe('function'); + }); + }); + + Scenario('getAll returns a list of entities when documents are found', ({ Given, When, Then, And }) => { + const secondDoc = makeMockStaffRoleDocument({ _id: 'role-002', id: 'role-002', roleName: 'User' } as unknown as Partial); + + Given('StaffRole documents exist in the collection', () => { + models = { StaffRole: makeMockModelForFind([mockDoc, secondDoc]) } as unknown as ModelsContext; + repository = getStaffRoleReadRepository(models, passport); + }); + When('I call getAll', async () => { + result = await repository.getAll(); + }); + Then('I should receive an array of StaffRoleEntityReference objects', () => { + expect(Array.isArray(result)).toBe(true); + expect((result as unknown[]).length).toBe(2); + }); + And('the converter toDomain should have been called for each document', () => { + expect(mockConverter.toDomain).toHaveBeenCalledTimes(2); + expect(mockConverter.toDomain).toHaveBeenCalledWith(mockDoc, passport); + expect(mockConverter.toDomain).toHaveBeenCalledWith(secondDoc, passport); + }); + }); + + Scenario('getAll returns an empty array when no documents exist', ({ Given, When, Then }) => { + Given('no StaffRole documents exist in the collection', () => { + models = { StaffRole: makeMockModelForFind([]) } as unknown as ModelsContext; + repository = getStaffRoleReadRepository(models, passport); + }); + When('I call getAll', async () => { + result = await repository.getAll(); + }); + Then('I should receive an empty array', () => { + expect(Array.isArray(result)).toBe(true); + expect((result as unknown[]).length).toBe(0); + }); + }); + + Scenario('getById returns an entity when a document is found', ({ Given, When, Then, And }) => { + Given('a StaffRole document exists with id "role-001"', () => { + models = { StaffRole: makeMockModelFindById(mockDoc) } as unknown as ModelsContext; + repository = getStaffRoleReadRepository(models, passport); + }); + When('I call getById with "role-001"', async () => { + result = await repository.getById('role-001'); + }); + Then('I should receive a StaffRoleEntityReference object', () => { + expect(result).toBeDefined(); + expect(result).not.toBeNull(); + }); + And('the converter toDomain should have been called with the document and passport', () => { + expect(mockConverter.toDomain).toHaveBeenCalledWith(mockDoc, passport); + }); + }); + + Scenario('getById returns null when no document is found', ({ Given, When, Then }) => { + Given('no StaffRole document exists with id "missing-id"', () => { + models = { StaffRole: makeMockModelFindById(null) } as unknown as ModelsContext; + repository = getStaffRoleReadRepository(models, passport); + }); + When('I call getById with "missing-id"', async () => { + result = await repository.getById('missing-id'); + }); + Then('I should receive null', () => { + expect(result).toBeNull(); + }); + }); +}); diff --git a/packages/ocom/persistence/src/datasources/readonly/user/staff-role/staff-role.read-repository.ts b/packages/ocom/persistence/src/datasources/readonly/user/staff-role/staff-role.read-repository.ts new file mode 100644 index 000000000..b8b2fdf43 --- /dev/null +++ b/packages/ocom/persistence/src/datasources/readonly/user/staff-role/staff-role.read-repository.ts @@ -0,0 +1,41 @@ +import type { StaffRoleModelType } from '@ocom/data-sources-mongoose-models/role/staff-role'; +import type { Domain } from '@ocom/domain'; +import type { ModelsContext } from '../../../../index.ts'; +import { StaffRoleConverter } from '../../../domain/user/staff-role/staff-role.domain-adapter.ts'; + +export interface StaffRoleReadRepository { + getAll: () => Promise; + getById: (id: string) => Promise; +} + +class StaffRoleReadRepositoryImpl implements StaffRoleReadRepository { + private readonly model: StaffRoleModelType; + private readonly converter: StaffRoleConverter; + private readonly passport: Domain.Passport; + + constructor(models: ModelsContext, passport: Domain.Passport) { + if (!models.StaffRole) { + throw new Error('StaffRole model is not available in the mongoose context'); + } + this.model = models.StaffRole; + this.converter = new StaffRoleConverter(); + this.passport = passport; + } + + async getAll(): Promise { + const docs = await this.model.find({}).exec(); + return docs.map((doc) => this.converter.toDomain(doc, this.passport)); + } + + async getById(id: string): Promise { + const doc = await this.model.findById(id).exec(); + if (!doc) { + return null; + } + return this.converter.toDomain(doc, this.passport); + } +} + +export const getStaffRoleReadRepository = (models: ModelsContext, passport: Domain.Passport): StaffRoleReadRepository => { + return new StaffRoleReadRepositoryImpl(models, passport); +}; diff --git a/packages/ocom/persistence/src/datasources/readonly/user/staff-user/features/staff-user.read-repository.feature b/packages/ocom/persistence/src/datasources/readonly/user/staff-user/features/staff-user.read-repository.feature index 9aa56131b..d0776be89 100644 --- a/packages/ocom/persistence/src/datasources/readonly/user/staff-user/features/staff-user.read-repository.feature +++ b/packages/ocom/persistence/src/datasources/readonly/user/staff-user/features/staff-user.read-repository.feature @@ -10,6 +10,29 @@ Feature: StaffUserReadRepository When I call getStaffUserReadRepository with those models and a passport Then I should receive a StaffUserReadRepository instance And the repository should have a getByExternalId method + And the repository should have a getByEmail method + And the repository should have a getAll method + + Scenario: getAll returns all converted entities when documents exist + Given two StaffUser documents exist in the collection + When I call getAll + Then I should receive an array of two StaffUserEntityReference objects + And the converter toDomain should have been called once for each document + + Scenario: getAll returns an empty array when no documents exist + Given no StaffUser documents exist in the collection + When I call getAll + Then I should receive an empty array + + Scenario: getByExternalId passes the correct filter to findOne + Given a StaffUser document exists with externalId "ext-filter-test" + When I call getByExternalId with "ext-filter-test" + Then findOne should have been called with the externalId filter + + Scenario: getByEmail passes the correct filter to findOne + Given a StaffUser document exists with email "filter@example.com" + When I call getByEmail with "filter@example.com" + Then findOne should have been called with the email filter Scenario: getByExternalId returns entity when document is found Given a StaffUser document exists with externalId "ext-abc" @@ -21,3 +44,14 @@ Feature: StaffUserReadRepository Given no StaffUser document exists with externalId "missing-ext" When I call getByExternalId with "missing-ext" Then I should receive null + + Scenario: getByEmail returns entity when document is found + Given a StaffUser document exists with email "alice@example.com" + When I call getByEmail with "alice@example.com" + Then I should receive a StaffUserEntityReference object + And the converter toDomain should have been called with the document and passport + + Scenario: getByEmail returns null when no document is found + Given no StaffUser document exists with email "missing@example.com" + When I call getByEmail with "missing@example.com" + Then I should receive null diff --git a/packages/ocom/persistence/src/datasources/readonly/user/staff-user/staff-user.read-repository.test.ts b/packages/ocom/persistence/src/datasources/readonly/user/staff-user/staff-user.read-repository.test.ts index f12d6498b..9bd5f9932 100644 --- a/packages/ocom/persistence/src/datasources/readonly/user/staff-user/staff-user.read-repository.test.ts +++ b/packages/ocom/persistence/src/datasources/readonly/user/staff-user/staff-user.read-repository.test.ts @@ -50,6 +50,21 @@ function makeMockModel(doc: StaffUser | null) { } as unknown as StaffUserModelType; } +function makeMockModelMulti(docs: StaffUser[]) { + return { + find: vi.fn().mockReturnValue({ + populate: vi.fn().mockReturnValue({ + exec: vi.fn().mockResolvedValue(docs), + }), + }), + findOne: vi.fn().mockReturnValue({ + populate: vi.fn().mockReturnValue({ + exec: vi.fn().mockResolvedValue(docs[0] ?? null), + }), + }), + } as unknown as StaffUserModelType; +} + test.for(feature, ({ Scenario, BeforeEachScenario }) => { let models: ModelsContext; let passport: Domain.Passport; @@ -107,6 +122,83 @@ test.for(feature, ({ Scenario, BeforeEachScenario }) => { And('the repository should have a getByExternalId method', () => { expect(typeof repository.getByExternalId).toBe('function'); }); + And('the repository should have a getByEmail method', () => { + expect(typeof repository.getByEmail).toBe('function'); + }); + And('the repository should have a getAll method', () => { + expect(typeof repository.getAll).toBe('function'); + }); + }); + + // ─── getAll ─────────────────────────────────────────────────────────────── + + Scenario('getAll returns all converted entities when documents exist', ({ Given, When, Then, And }) => { + let doc1: StaffUser; + let doc2: StaffUser; + Given('two StaffUser documents exist in the collection', () => { + doc1 = { ...makeMockStaffUserDocument(), id: 'id-1', externalId: 'ext-1' } as unknown as StaffUser; + doc2 = { ...makeMockStaffUserDocument(), id: 'id-2', externalId: 'ext-2' } as unknown as StaffUser; + models = { StaffUser: makeMockModelMulti([doc1, doc2]) } as unknown as ModelsContext; + mockConverter.toDomain.mockReturnValueOnce({ id: 'id-1', externalId: 'ext-1' }).mockReturnValueOnce({ id: 'id-2', externalId: 'ext-2' }); + repository = getStaffUserReadRepository(models, passport); + }); + When('I call getAll', async () => { + result = await repository.getAll(); + }); + Then('I should receive an array of two StaffUserEntityReference objects', () => { + expect(Array.isArray(result)).toBe(true); + expect((result as unknown[]).length).toBe(2); + }); + And('the converter toDomain should have been called once for each document', () => { + expect(mockConverter.toDomain).toHaveBeenCalledTimes(2); + expect(mockConverter.toDomain).toHaveBeenCalledWith(doc1, passport); + expect(mockConverter.toDomain).toHaveBeenCalledWith(doc2, passport); + }); + }); + + Scenario('getAll returns an empty array when no documents exist', ({ Given, When, Then }) => { + Given('no StaffUser documents exist in the collection', () => { + models = { StaffUser: makeMockModelMulti([]) } as unknown as ModelsContext; + repository = getStaffUserReadRepository(models, passport); + }); + When('I call getAll', async () => { + result = await repository.getAll(); + }); + Then('I should receive an empty array', () => { + expect(result).toEqual([]); + }); + }); + + // ─── filter verification ────────────────────────────────────────────────── + + Scenario('getByExternalId passes the correct filter to findOne', ({ Given, When, Then }) => { + let mockModel: StaffUserModelType; + Given('a StaffUser document exists with externalId "ext-filter-test"', () => { + mockModel = makeMockModel(mockStaffUserDoc); + models = { StaffUser: mockModel } as unknown as ModelsContext; + repository = getStaffUserReadRepository(models, passport); + }); + When('I call getByExternalId with "ext-filter-test"', async () => { + result = await repository.getByExternalId('ext-filter-test'); + }); + Then('findOne should have been called with the externalId filter', () => { + expect(mockModel.findOne).toHaveBeenCalledWith({ externalId: 'ext-filter-test' }); + }); + }); + + Scenario('getByEmail passes the correct filter to findOne', ({ Given, When, Then }) => { + let mockModel: StaffUserModelType; + Given('a StaffUser document exists with email "filter@example.com"', () => { + mockModel = makeMockModel(mockStaffUserDoc); + models = { StaffUser: mockModel } as unknown as ModelsContext; + repository = getStaffUserReadRepository(models, passport); + }); + When('I call getByEmail with "filter@example.com"', async () => { + result = await repository.getByEmail('filter@example.com'); + }); + Then('findOne should have been called with the email filter', () => { + expect(mockModel.findOne).toHaveBeenCalledWith({ email: 'filter@example.com' }); + }); }); Scenario('getByExternalId returns entity when document is found', ({ Given, When, Then, And }) => { @@ -138,4 +230,34 @@ test.for(feature, ({ Scenario, BeforeEachScenario }) => { expect(result).toBeNull(); }); }); + + Scenario('getByEmail returns entity when document is found', ({ Given, When, Then, And }) => { + Given('a StaffUser document exists with email "alice@example.com"', () => { + models = { StaffUser: makeMockModel(mockStaffUserDoc) } as unknown as ModelsContext; + repository = getStaffUserReadRepository(models, passport); + }); + When('I call getByEmail with "alice@example.com"', async () => { + result = await repository.getByEmail('alice@example.com'); + }); + Then('I should receive a StaffUserEntityReference object', () => { + expect(result).toBeDefined(); + expect(result).not.toBeNull(); + }); + And('the converter toDomain should have been called with the document and passport', () => { + expect(mockConverter.toDomain).toHaveBeenCalledWith(mockStaffUserDoc, passport); + }); + }); + + Scenario('getByEmail returns null when no document is found', ({ Given, When, Then }) => { + Given('no StaffUser document exists with email "missing@example.com"', () => { + models = { StaffUser: makeMockModel(null) } as unknown as ModelsContext; + repository = getStaffUserReadRepository(models, passport); + }); + When('I call getByEmail with "missing@example.com"', async () => { + result = await repository.getByEmail('missing@example.com'); + }); + Then('I should receive null', () => { + expect(result).toBeNull(); + }); + }); }); diff --git a/packages/ocom/persistence/src/datasources/readonly/user/staff-user/staff-user.read-repository.ts b/packages/ocom/persistence/src/datasources/readonly/user/staff-user/staff-user.read-repository.ts index 0824f8934..4571f56f4 100644 --- a/packages/ocom/persistence/src/datasources/readonly/user/staff-user/staff-user.read-repository.ts +++ b/packages/ocom/persistence/src/datasources/readonly/user/staff-user/staff-user.read-repository.ts @@ -4,7 +4,9 @@ import type { ModelsContext } from '../../../../index.ts'; import { StaffUserConverter } from '../../../domain/user/staff-user/staff-user.domain-adapter.ts'; export interface StaffUserReadRepository { + getAll: () => Promise; getByExternalId: (externalId: string) => Promise; + getByEmail: (email: string) => Promise; } class StaffUserReadRepositoryImpl implements StaffUserReadRepository { @@ -21,6 +23,11 @@ class StaffUserReadRepositoryImpl implements StaffUserReadRepository { this.passport = passport; } + async getAll(): Promise { + const docs = await this.model.find({}).populate('role').exec(); + return docs.map((doc) => this.converter.toDomain(doc, this.passport)); + } + async getByExternalId(externalId: string): Promise { const doc = await this.model.findOne({ externalId }).populate('role').exec(); if (!doc) { @@ -28,6 +35,14 @@ class StaffUserReadRepositoryImpl implements StaffUserReadRepository { } return this.converter.toDomain(doc, this.passport); } + + async getByEmail(email: string): Promise { + const doc = await this.model.findOne({ email }).populate('role').exec(); + if (!doc) { + return null; + } + return this.converter.toDomain(doc, this.passport); + } } export const getStaffUserReadRepository = (models: ModelsContext, passport: Domain.Passport): StaffUserReadRepository => { diff --git a/packages/ocom/service-token-validation/src/index.feature b/packages/ocom/service-token-validation/src/index.feature index 94462c6f8..fd76e3972 100644 --- a/packages/ocom/service-token-validation/src/index.feature +++ b/packages/ocom/service-token-validation/src/index.feature @@ -1,43 +1,72 @@ Feature: ServiceTokenValidation Scenario: Constructing ServiceTokenValidation with valid portal tokens - Given valid portal tokens mapping + Given valid portal tokens mapping for two portals When the ServiceTokenValidation is constructed with these tokens - Then it should create OpenID configurations from environment variables - And it should initialize the VerifiedTokenService with the configurations + Then it should pass the configuration map to VerifiedTokenService + And it should pass the default refresh interval to VerifiedTokenService + And it should store the VerifiedTokenService instance - Scenario: Constructing ServiceTokenValidation with missing optional environment variables - Given portal tokens mapping with missing optional environment variables + Scenario: Constructing ServiceTokenValidation with missing optional environment variables uses defaults + Given portal tokens mapping with only required environment variables set When the ServiceTokenValidation is constructed with these tokens - Then it should use default values for missing optional environment variables - And it should initialize the VerifiedTokenService with default configurations + Then the config clockTolerance should default to "5 minutes" + And the config ignoreIssuer should default to false - Scenario: Constructing ServiceTokenValidation with missing environment variables - Given portal tokens mapping with missing environment variables + Scenario: Constructing ServiceTokenValidation when ignoreIssuer is explicitly set to true + Given portal tokens mapping with OIDC_IGNORE_ISSUER set to "true" + When the ServiceTokenValidation is constructed with these tokens + Then the config ignoreIssuer should be true + + Scenario: Constructing ServiceTokenValidation with a custom refresh interval + Given valid portal tokens mapping for one portal + When the ServiceTokenValidation is constructed with a custom refresh interval of 30000 + Then it should pass the custom refresh interval 30000 to VerifiedTokenService + + Scenario: Constructing ServiceTokenValidation with a missing required environment variable + Given portal tokens mapping that references a missing environment variable prefix When the ServiceTokenValidation is constructed - Then it should throw an error for missing required environment variables + Then it should throw an error indicating the environment variable is not set Scenario: Starting up the ServiceTokenValidation Given a ServiceTokenValidation instance with valid configuration When startUp is called - Then it should start the underlying VerifiedTokenService - And it should return the service instance - - Scenario: Verifying JWT with ServiceTokenValidation - Given a ServiceTokenValidation instance that is started - And a valid JWT token - When verifyJwt is called with the token - Then it should try verification with each configured provider - And it should return the verification result when successful - - Scenario: Verifying invalid JWT with ServiceTokenValidation - Given a ServiceTokenValidation instance that is started - And an invalid JWT token - When verifyJwt is called with the invalid token - Then it should return null indicating verification failed - - Scenario: Shutting down the ServiceTokenValidation - Given a started ServiceTokenValidation instance + Then it should call start on the underlying VerifiedTokenService + And it should resolve with the service instance itself + + Scenario: verifyJwt succeeds on the second provider after a retryable error on the first + Given a ServiceTokenValidation instance configured with two portals + And the first portal raises a retryable JWSSignatureVerificationFailed error + And the second portal resolves with a valid JWT payload + When verifyJwt is called with a bearer token + Then it should call getVerifiedJwt for both portal1 and portal2 + And it should return the verifiedJwt and openIdConfigKey from the second portal + + Scenario: verifyJwt propagates a non-retryable error + Given a ServiceTokenValidation instance configured with one portal + And the portal raises a non-retryable TypeError + When verifyJwt is called with a bearer token + Then it should rethrow the non-retryable error + + Scenario: verifyJwt returns null when a provider returns a result with no payload + Given a ServiceTokenValidation instance configured with one portal + And the portal resolves with a result that has no payload + When verifyJwt is called with a bearer token + Then it should return null + + Scenario: verifyJwt returns null when all providers return null + Given a ServiceTokenValidation instance configured with one portal + And the portal resolves with null + When verifyJwt is called with a bearer token + Then it should return null + + Scenario: Shutting down when a timer is running clears the interval and logs + Given a ServiceTokenValidation instance with a running timer + When shutDown is called + Then it should clear the timer interval + And it should log "ServiceTokenValidation stopped" + + Scenario: Shutting down when no timer is running still logs + Given a ServiceTokenValidation instance with no timer running When shutDown is called - Then it should stop the underlying VerifiedTokenService - And it should log that the service stopped \ No newline at end of file + Then it should log "ServiceTokenValidation stopped" \ No newline at end of file diff --git a/packages/ocom/service-token-validation/src/index.test.ts b/packages/ocom/service-token-validation/src/index.test.ts index 166f8f461..fb7c2abb0 100644 --- a/packages/ocom/service-token-validation/src/index.test.ts +++ b/packages/ocom/service-token-validation/src/index.test.ts @@ -1,320 +1,316 @@ import path from 'node:path'; import { fileURLToPath } from 'node:url'; import { describeFeature, loadFeature } from '@amiceli/vitest-cucumber'; -import { afterEach, expect, type Mock, vi } from 'vitest'; +import { expect, type Mock, vi } from 'vitest'; import { ServiceTokenValidation } from './index.ts'; import { VerifiedTokenService } from './verified-token-service.ts'; // Mock VerifiedTokenService const test = { for: describeFeature }; + vi.mock('./verified-token-service.ts', () => ({ VerifiedTokenService: vi.fn(), })); -// Mock console.log const mockConsoleLog = vi.spyOn(console, 'log').mockImplementation(() => undefined); const __dirname = path.dirname(fileURLToPath(import.meta.url)); const feature = await loadFeature(path.resolve(__dirname, 'index.feature')); +// ─── Helpers ───────────────────────────────────────────────────────────────── + +function setPortalEnv(prefix: string, opts: { endpoint: string; audience: string; issuer: string; clockTolerance?: string; ignoreIssuer?: string }) { + vi.stubEnv(`${prefix}_OIDC_ENDPOINT`, opts.endpoint); + vi.stubEnv(`${prefix}_OIDC_AUDIENCE`, opts.audience); + vi.stubEnv(`${prefix}_OIDC_ISSUER`, opts.issuer); + if (opts.clockTolerance !== undefined) vi.stubEnv(`${prefix}_OIDC_CLOCK_TOLERANCE`, opts.clockTolerance); + if (opts.ignoreIssuer !== undefined) vi.stubEnv(`${prefix}_OIDC_IGNORE_ISSUER`, opts.ignoreIssuer); +} + +function makeBaseEnv(prefix: string) { + setPortalEnv(prefix, { + endpoint: `https://${prefix.toLowerCase()}.com/.well-known/jwks.json`, + audience: `${prefix.toLowerCase()}-aud`, + issuer: `https://${prefix.toLowerCase()}.com`, + }); +} + +function makeMockVerifiedTokenService() { + const mockGetVerifiedJwt = vi.fn(); + const mock = { + openIdConfigs: new Map(), + refreshInterval: 1000 * 60 * 5, + keyStoreCollection: new Map(), + refreshCollection: vi.fn(), + start: vi.fn(), + getVerifiedJwt: mockGetVerifiedJwt as unknown as VerifiedTokenService['getVerifiedJwt'], + timerInstance: undefined as NodeJS.Timeout | undefined, + } as VerifiedTokenService; + return { mock, mockGetVerifiedJwt }; +} + +// ─── Tests ─────────────────────────────────────────────────────────────────── + test.for(feature, ({ Scenario, BeforeEachScenario }) => { let service: ServiceTokenValidation; let mockVerifiedTokenService: VerifiedTokenService; - let mockGetVerifiedJwt: Mock<(bearerToken: string, configKey: string) => Promise> | null>>; - let originalEnv: NodeJS.ProcessEnv; + let mockGetVerifiedJwt: Mock; + let verifyJwtResult: Awaited> | undefined; + let thrownError: unknown; + let startUpResult: unknown; BeforeEachScenario(() => { - // Reset mocks vi.clearAllMocks(); + vi.unstubAllEnvs(); mockConsoleLog.mockClear(); + thrownError = undefined; + verifyJwtResult = undefined; + startUpResult = undefined; - // Store original environment - originalEnv = { ...process.env }; - - // Setup mock VerifiedTokenService - mockGetVerifiedJwt = vi.fn(); - mockVerifiedTokenService = { - openIdConfigs: new Map(), - refreshInterval: 1000 * 60 * 5, - keyStoreCollection: new Map(), - refreshCollection: vi.fn(), - start: vi.fn(), - getVerifiedJwt: mockGetVerifiedJwt as unknown as VerifiedTokenService['getVerifiedJwt'], - timerInstance: setInterval(() => undefined, 1000), - } as VerifiedTokenService; + const { mock, mockGetVerifiedJwt: getJwt } = makeMockVerifiedTokenService(); + mockVerifiedTokenService = mock; + mockGetVerifiedJwt = getJwt; vi.mocked(VerifiedTokenService).mockImplementation(function MockVerifiedTokenService() { return mockVerifiedTokenService; }); }); - afterEach(() => { - // Restore original environment - process.env = originalEnv; - }); + // ─── Constructor ────────────────────────────────────────────────────────── Scenario('Constructing ServiceTokenValidation with valid portal tokens', ({ Given, When, Then, And }) => { - Given('valid portal tokens mapping', () => { - // Set up environment variables - // biome-ignore lint:useLiteralKeys - process.env['PORTAL1_OIDC_ENDPOINT'] = 'https://portal1.com/.well-known/jwks.json'; - // biome-ignore lint:useLiteralKeys - process.env['PORTAL1_OIDC_AUDIENCE'] = 'audience1'; - // biome-ignore lint:useLiteralKeys - process.env['PORTAL1_OIDC_ISSUER'] = 'https://portal1.com'; - // biome-ignore lint:useLiteralKeys - process.env['PORTAL2_OIDC_ENDPOINT'] = 'https://portal2.com/.well-known/jwks.json'; - // biome-ignore lint:useLiteralKeys - process.env['PORTAL2_OIDC_AUDIENCE'] = 'audience2'; - // biome-ignore lint:useLiteralKeys - process.env['PORTAL2_OIDC_ISSUER'] = 'https://portal2.com'; + Given('valid portal tokens mapping for two portals', () => { + makeBaseEnv('PORTAL1'); + makeBaseEnv('PORTAL2'); }); - When('the ServiceTokenValidation is constructed with these tokens', () => { - // Ensure environment variables are set (they should be from Given, but let's be safe) - // biome-ignore lint:useLiteralKeys - process.env['PORTAL1_OIDC_ENDPOINT'] = 'https://portal1.com/.well-known/jwks.json'; - // biome-ignore lint:useLiteralKeys - process.env['PORTAL1_OIDC_AUDIENCE'] = 'audience1'; - // biome-ignore lint:useLiteralKeys - process.env['PORTAL1_OIDC_ISSUER'] = 'https://portal1.com'; - // biome-ignore lint:useLiteralKeys - process.env['PORTAL2_OIDC_ENDPOINT'] = 'https://portal2.com/.well-known/jwks.json'; - // biome-ignore lint:useLiteralKeys - process.env['PORTAL2_OIDC_AUDIENCE'] = 'audience2'; - // biome-ignore lint:useLiteralKeys - process.env['PORTAL2_OIDC_ISSUER'] = 'https://portal2.com'; - - const portalTokens = new Map([ - ['portal1', 'PORTAL1'], - ['portal2', 'PORTAL2'], - ]); - service = new ServiceTokenValidation(portalTokens); - }); - - Then('it should create OpenID configurations from environment variables', () => { - expect(VerifiedTokenService).toHaveBeenCalledWith( - expect.any(Map), - 1000 * 60 * 5, // default refresh interval + service = new ServiceTokenValidation( + new Map([ + ['portal1', 'PORTAL1'], + ['portal2', 'PORTAL2'], + ]), ); }); - - And('it should initialize the VerifiedTokenService with the configurations', () => { - // biome-ignore lint:useLiteralKeys - expect(service['tokenVerifier']).toBe(mockVerifiedTokenService); + Then('it should pass the configuration map to VerifiedTokenService', () => { + const [configs] = vi.mocked(VerifiedTokenService).mock.calls[0] as [Map]; + expect(configs).toBeInstanceOf(Map); + expect(configs.has('portal1')).toBe(true); + expect(configs.has('portal2')).toBe(true); + }); + And('it should pass the default refresh interval to VerifiedTokenService', () => { + expect(VerifiedTokenService).toHaveBeenCalledWith(expect.any(Map), 1000 * 60 * 5); + }); + And('it should store the VerifiedTokenService instance', () => { + expect(VerifiedTokenService).toHaveBeenCalledOnce(); }); }); - Scenario('Constructing ServiceTokenValidation with missing optional environment variables', ({ Given, When, Then, And }) => { - Given('portal tokens mapping with missing optional environment variables', () => { - // Clear all environment variables first - // biome-ignore lint:useLiteralKeys - delete process.env['PORTAL1_OIDC_ENDPOINT']; - // biome-ignore lint:useLiteralKeys - delete process.env['PORTAL1_OIDC_AUDIENCE']; - // biome-ignore lint:useLiteralKeys - delete process.env['PORTAL1_OIDC_ISSUER']; - // biome-ignore lint:useLiteralKeys - delete process.env['PORTAL1_OIDC_CLOCK_TOLERANCE']; - // biome-ignore lint:useLiteralKeys - delete process.env['PORTAL1_OIDC_IGNORE_ISSUER']; - - // Set only required environment variables - // biome-ignore lint:useLiteralKeys - process.env['PORTAL1_OIDC_ENDPOINT'] = 'https://portal1.com/.well-known/jwks.json'; - // biome-ignore lint:useLiteralKeys - process.env['PORTAL1_OIDC_AUDIENCE'] = 'audience1'; - // biome-ignore lint:useLiteralKeys - process.env['PORTAL1_OIDC_ISSUER'] = 'https://portal1.com'; - // Explicitly don't set PORTAL1_OIDC_CLOCK_TOLERANCE and PORTAL1_OIDC_IGNORE_ISSUER + Scenario('Constructing ServiceTokenValidation with missing optional environment variables uses defaults', ({ Given, When, Then, And }) => { + Given('portal tokens mapping with only required environment variables set', () => { + // Only stub the required vars; optional vars intentionally absent + makeBaseEnv('PORTAL1'); }); - When('the ServiceTokenValidation is constructed with these tokens', () => { - // Don't reset environment variables here - use what's set in Given - const portalTokens = new Map([['portal1', 'PORTAL1']]); - service = new ServiceTokenValidation(portalTokens); + service = new ServiceTokenValidation(new Map([['portal1', 'PORTAL1']])); }); - - Then('it should use default values for missing optional environment variables', () => { - expect(VerifiedTokenService).toHaveBeenCalledWith( - expect.any(Map), - 1000 * 60 * 5, // default refresh interval - ); - // Verify that the config was created with default values - const callArgs = vi.mocked(VerifiedTokenService).mock.calls[0]; - if (callArgs) { - const configs = callArgs[0] as Map; - const config = configs.get('portal1') as { clockTolerance: string; ignoreIssuer: boolean }; - expect(config.clockTolerance).toBe('5 minutes'); // default value - expect(config.ignoreIssuer).toBe(false); // 'false' === 'true' is false - console.log('Default values test passed - clockTolerance:', config.clockTolerance, 'ignoreIssuer:', config.ignoreIssuer); - } + Then('the config clockTolerance should default to "5 minutes"', () => { + const [configs] = vi.mocked(VerifiedTokenService).mock.calls[0] as unknown as [Map]; + expect(configs.get('portal1')?.clockTolerance).toBe('5 minutes'); }); + And('the config ignoreIssuer should default to false', () => { + const [configs] = vi.mocked(VerifiedTokenService).mock.calls[0] as unknown as [Map]; + expect(configs.get('portal1')?.ignoreIssuer).toBe(false); + }); + }); - And('it should initialize the VerifiedTokenService with default configurations', () => { - // biome-ignore lint:useLiteralKeys - expect(service['tokenVerifier']).toBe(mockVerifiedTokenService); + Scenario('Constructing ServiceTokenValidation when ignoreIssuer is explicitly set to true', ({ Given, When, Then }) => { + Given('portal tokens mapping with OIDC_IGNORE_ISSUER set to "true"', () => { + makeBaseEnv('PORTAL1'); + vi.stubEnv('PORTAL1_OIDC_IGNORE_ISSUER', 'true'); + }); + When('the ServiceTokenValidation is constructed with these tokens', () => { + service = new ServiceTokenValidation(new Map([['portal1', 'PORTAL1']])); + }); + Then('the config ignoreIssuer should be true', () => { + const [configs] = vi.mocked(VerifiedTokenService).mock.calls[0] as unknown as [Map]; + expect(configs.get('portal1')?.ignoreIssuer).toBe(true); }); }); - Scenario('Constructing ServiceTokenValidation with missing environment variables', ({ Given, When, Then }) => { - Given('portal tokens mapping with missing environment variables', () => { - // Don't set up environment variables - they should be missing + Scenario('Constructing ServiceTokenValidation with a custom refresh interval', ({ Given, When, Then }) => { + Given('valid portal tokens mapping for one portal', () => { + makeBaseEnv('PORTAL1'); }); + When('the ServiceTokenValidation is constructed with a custom refresh interval of 30000', () => { + service = new ServiceTokenValidation(new Map([['portal1', 'PORTAL1']]), 30000); + }); + Then('it should pass the custom refresh interval 30000 to VerifiedTokenService', () => { + expect(VerifiedTokenService).toHaveBeenCalledWith(expect.any(Map), 30000); + }); + }); + Scenario('Constructing ServiceTokenValidation with a missing required environment variable', ({ Given, When, Then }) => { + Given('portal tokens mapping that references a missing environment variable prefix', () => { + // MISSING_ prefix env vars are not stubbed — absence is the test condition + }); When('the ServiceTokenValidation is constructed', () => { - const portalTokens = new Map([['portal1', 'MISSING']]); - - expect(() => { - service = new ServiceTokenValidation(portalTokens); - }).toThrow('Environment variable MISSING_OIDC_ENDPOINT not set'); + try { + service = new ServiceTokenValidation(new Map([['portal1', 'MISSING']])); + } catch (e) { + thrownError = e; + } }); - - Then('it should throw an error for missing required environment variables', () => { - // Error is already thrown in When step + Then('it should throw an error indicating the environment variable is not set', () => { + expect(thrownError).toBeInstanceOf(Error); + expect((thrownError as Error).message).toBe('Environment variable MISSING_OIDC_ENDPOINT not set'); }); }); + // ─── startUp ───────────────────────────────────────────────────────────── + Scenario('Starting up the ServiceTokenValidation', ({ Given, When, Then, And }) => { Given('a ServiceTokenValidation instance with valid configuration', () => { - // Set up environment variables - // biome-ignore lint:useLiteralKeys - process.env['PORTAL1_OIDC_ENDPOINT'] = 'https://portal1.com/.well-known/jwks.json'; - // biome-ignore lint:useLiteralKeys - process.env['PORTAL1_OIDC_AUDIENCE'] = 'audience1'; - // biome-ignore lint:useLiteralKeys - process.env['PORTAL1_OIDC_ISSUER'] = 'https://portal1.com'; - - const portalTokens = new Map([['portal1', 'PORTAL1']]); - service = new ServiceTokenValidation(portalTokens); + makeBaseEnv('PORTAL1'); + service = new ServiceTokenValidation(new Map([['portal1', 'PORTAL1']])); }); - When('startUp is called', async () => { - const result = await service.startUp(); - expect(result).toBe(service); + startUpResult = await service.startUp(); }); - - Then('it should start the underlying VerifiedTokenService', () => { - expect(mockVerifiedTokenService.start).toHaveBeenCalled(); + Then('it should call start on the underlying VerifiedTokenService', () => { + expect(mockVerifiedTokenService.start).toHaveBeenCalledOnce(); }); - - And('it should return the service instance', () => { - // Result check is in When step + And('it should resolve with the service instance itself', () => { + expect(startUpResult).toBe(service); }); }); - Scenario('Verifying JWT with ServiceTokenValidation', ({ Given, When, Then, And }) => { - Given('a ServiceTokenValidation instance that is started', () => { - // Set up environment variables - // biome-ignore lint:useLiteralKeys - process.env['PORTAL1_OIDC_ENDPOINT'] = 'https://portal1.com/.well-known/jwks.json'; - // biome-ignore lint:useLiteralKeys - process.env['PORTAL1_OIDC_AUDIENCE'] = 'audience1'; - // biome-ignore lint:useLiteralKeys - process.env['PORTAL1_OIDC_ISSUER'] = 'https://portal1.com'; - // biome-ignore lint:useLiteralKeys - process.env['PORTAL2_OIDC_ENDPOINT'] = 'https://portal2.com/.well-known/jwks.json'; - // biome-ignore lint:useLiteralKeys - process.env['PORTAL2_OIDC_AUDIENCE'] = 'audience2'; - // biome-ignore lint:useLiteralKeys - process.env['PORTAL2_OIDC_ISSUER'] = 'https://portal2.com'; - - const portalTokens = new Map([ - ['portal1', 'PORTAL1'], - ['portal2', 'PORTAL2'], - ]); - service = new ServiceTokenValidation(portalTokens); - - // Mock successful verification on second attempt - mockGetVerifiedJwt - .mockRejectedValueOnce(Object.assign(new Error('signature verification failed'), { name: 'JWSSignatureVerificationFailed' })) // First provider fails with signature mismatch - .mockResolvedValueOnce({ - // Second provider succeeds - payload: { sub: 'user123', aud: 'audience2' }, - protectedHeader: { alg: 'RS256' }, - key: {} as never, - }); + // ─── verifyJwt ──────────────────────────────────────────────────────────── + + Scenario('verifyJwt succeeds on the second provider after a retryable error on the first', ({ Given, And, When, Then }) => { + Given('a ServiceTokenValidation instance configured with two portals', () => { + makeBaseEnv('PORTAL1'); + makeBaseEnv('PORTAL2'); + service = new ServiceTokenValidation( + new Map([ + ['portal1', 'PORTAL1'], + ['portal2', 'PORTAL2'], + ]), + ); }); - - And('a valid JWT token', () => { - // Token is provided in When step + And('the first portal raises a retryable JWSSignatureVerificationFailed error', () => { + mockGetVerifiedJwt.mockRejectedValueOnce(Object.assign(new Error('signature mismatch'), { name: 'JWSSignatureVerificationFailed' })); }); - - When('verifyJwt is called with the token', async () => { - const result = await service.verifyJwt('valid.jwt.token'); - expect(result).toEqual({ - verifiedJwt: { sub: 'user123', aud: 'audience2' }, - openIdConfigKey: 'portal2', + And('the second portal resolves with a valid JWT payload', () => { + mockGetVerifiedJwt.mockResolvedValueOnce({ + payload: { sub: 'user123', aud: 'portal2-aud' }, + protectedHeader: { alg: 'RS256' }, + key: {} as never, }); }); - - Then('it should try verification with each configured provider', () => { + When('verifyJwt is called with a bearer token', async () => { + verifyJwtResult = await service.verifyJwt('test.jwt.token'); + }); + Then('it should call getVerifiedJwt for both portal1 and portal2', () => { expect(mockVerifiedTokenService.getVerifiedJwt).toHaveBeenCalledTimes(2); - expect(mockVerifiedTokenService.getVerifiedJwt).toHaveBeenCalledWith('valid.jwt.token', 'portal1'); - expect(mockVerifiedTokenService.getVerifiedJwt).toHaveBeenCalledWith('valid.jwt.token', 'portal2'); + expect(mockVerifiedTokenService.getVerifiedJwt).toHaveBeenCalledWith('test.jwt.token', 'portal1'); + expect(mockVerifiedTokenService.getVerifiedJwt).toHaveBeenCalledWith('test.jwt.token', 'portal2'); }); - - And('it should return the verification result when successful', () => { - // Result check is in When step + And('it should return the verifiedJwt and openIdConfigKey from the second portal', () => { + expect(verifyJwtResult).toEqual({ + verifiedJwt: { sub: 'user123', aud: 'portal2-aud' }, + openIdConfigKey: 'portal2', + }); }); }); - Scenario('Verifying invalid JWT with ServiceTokenValidation', ({ Given, When, Then, And }) => { - Given('a ServiceTokenValidation instance that is started', () => { - // Set up environment variables - // biome-ignore lint:useLiteralKeys - process.env['PORTAL1_OIDC_ENDPOINT'] = 'https://portal1.com/.well-known/jwks.json'; - // biome-ignore lint:useLiteralKeys - process.env['PORTAL1_OIDC_AUDIENCE'] = 'audience1'; - // biome-ignore lint:useLiteralKeys - process.env['PORTAL1_OIDC_ISSUER'] = 'https://portal1.com'; - - const portalTokens = new Map([['portal1', 'PORTAL1']]); - service = new ServiceTokenValidation(portalTokens); - - // Mock verification failure - mockGetVerifiedJwt.mockResolvedValue(null); + Scenario('verifyJwt propagates a non-retryable error', ({ Given, And, When, Then }) => { + Given('a ServiceTokenValidation instance configured with one portal', () => { + makeBaseEnv('PORTAL1'); + service = new ServiceTokenValidation(new Map([['portal1', 'PORTAL1']])); }); - - And('an invalid JWT token', () => { - // Token is provided in When step + And('the portal raises a non-retryable TypeError', () => { + mockGetVerifiedJwt.mockRejectedValueOnce(new TypeError('unexpected failure')); + }); + When('verifyJwt is called with a bearer token', async () => { + try { + verifyJwtResult = await service.verifyJwt('test.jwt.token'); + } catch (e) { + thrownError = e; + } + }); + Then('it should rethrow the non-retryable error', () => { + expect(thrownError).toBeInstanceOf(TypeError); + expect((thrownError as TypeError).message).toBe('unexpected failure'); }); + }); - When('verifyJwt is called with the invalid token', async () => { - const result = await service.verifyJwt('invalid.jwt.token'); - expect(result).toBeNull(); + Scenario('verifyJwt returns null when a provider returns a result with no payload', ({ Given, And, When, Then }) => { + Given('a ServiceTokenValidation instance configured with one portal', () => { + makeBaseEnv('PORTAL1'); + service = new ServiceTokenValidation(new Map([['portal1', 'PORTAL1']])); + }); + And('the portal resolves with a result that has no payload', () => { + mockGetVerifiedJwt.mockResolvedValueOnce({ + payload: undefined, + protectedHeader: { alg: 'RS256' }, + key: {} as never, + } as never); + }); + When('verifyJwt is called with a bearer token', async () => { + verifyJwtResult = await service.verifyJwt('test.jwt.token'); }); + Then('it should return null', () => { + expect(verifyJwtResult).toBeNull(); + }); + }); - Then('it should return null indicating verification failed', () => { - // Result check is in When step + Scenario('verifyJwt returns null when all providers return null', ({ Given, And, When, Then }) => { + Given('a ServiceTokenValidation instance configured with one portal', () => { + makeBaseEnv('PORTAL1'); + service = new ServiceTokenValidation(new Map([['portal1', 'PORTAL1']])); + }); + And('the portal resolves with null', () => { + // biome-ignore lint/suspicious/noExplicitAny: simulating null return from mock + mockGetVerifiedJwt.mockResolvedValueOnce(null as any); + }); + When('verifyJwt is called with a bearer token', async () => { + verifyJwtResult = await service.verifyJwt('test.jwt.token'); + }); + Then('it should return null', () => { + expect(verifyJwtResult).toBeNull(); }); }); - Scenario('Shutting down the ServiceTokenValidation', ({ Given, When, Then, And }) => { - Given('a started ServiceTokenValidation instance', () => { - // Set up environment variables - // biome-ignore lint:useLiteralKeys - process.env['PORTAL1_OIDC_ENDPOINT'] = 'https://portal1.com/.well-known/jwks.json'; - // biome-ignore lint:useLiteralKeys - process.env['PORTAL1_OIDC_AUDIENCE'] = 'audience1'; - // biome-ignore lint:useLiteralKeys - process.env['PORTAL1_OIDC_ISSUER'] = 'https://portal1.com'; + // ─── shutDown ───────────────────────────────────────────────────────────── - const portalTokens = new Map([['portal1', 'PORTAL1']]); - service = new ServiceTokenValidation(portalTokens); + Scenario('Shutting down when a timer is running clears the interval and logs', ({ Given, When, Then, And }) => { + Given('a ServiceTokenValidation instance with a running timer', () => { + makeBaseEnv('PORTAL1'); + service = new ServiceTokenValidation(new Map([['portal1', 'PORTAL1']])); + mockVerifiedTokenService.timerInstance = setInterval(() => undefined, 60_000); }); - When('shutDown is called', async () => { await service.shutDown(); }); - - Then('it should stop the underlying VerifiedTokenService', () => { - // The shutdown method clears the timer instance from VerifiedTokenService - expect(mockVerifiedTokenService.timerInstance).toBeDefined(); + Then('it should clear the timer interval', () => { + expect(mockConsoleLog).toHaveBeenCalledWith('ServiceTokenValidation stopped'); }); + And('it should log "ServiceTokenValidation stopped"', () => { + expect(mockConsoleLog).toHaveBeenCalledOnce(); + }); + }); - And('it should log that the service stopped', () => { + Scenario('Shutting down when no timer is running still logs', ({ Given, When, Then }) => { + Given('a ServiceTokenValidation instance with no timer running', () => { + makeBaseEnv('PORTAL1'); + service = new ServiceTokenValidation(new Map([['portal1', 'PORTAL1']])); + mockVerifiedTokenService.timerInstance = undefined; + }); + When('shutDown is called', async () => { + await service.shutDown(); + }); + Then('it should log "ServiceTokenValidation stopped"', () => { expect(mockConsoleLog).toHaveBeenCalledWith('ServiceTokenValidation stopped'); }); }); diff --git a/packages/ocom/ui-community-route-accounts/.storybook/vitest.setup.ts b/packages/ocom/ui-community-route-accounts/.storybook/vitest.setup.ts deleted file mode 100644 index 0f9f425df..000000000 --- a/packages/ocom/ui-community-route-accounts/.storybook/vitest.setup.ts +++ /dev/null @@ -1,6 +0,0 @@ -import * as a11yAddonAnnotations from '@storybook/addon-a11y/preview'; -import { setProjectAnnotations } from '@storybook/react-vite'; -import * as projectAnnotations from './preview.tsx'; - -// This is an important step to apply the right configuration when testing your stories. -setProjectAnnotations([a11yAddonAnnotations, projectAnnotations]); diff --git a/packages/ocom/ui-community-route-admin/.storybook/vitest.setup.ts b/packages/ocom/ui-community-route-admin/.storybook/vitest.setup.ts deleted file mode 100644 index 0f9f425df..000000000 --- a/packages/ocom/ui-community-route-admin/.storybook/vitest.setup.ts +++ /dev/null @@ -1,6 +0,0 @@ -import * as a11yAddonAnnotations from '@storybook/addon-a11y/preview'; -import { setProjectAnnotations } from '@storybook/react-vite'; -import * as projectAnnotations from './preview.tsx'; - -// This is an important step to apply the right configuration when testing your stories. -setProjectAnnotations([a11yAddonAnnotations, projectAnnotations]); diff --git a/packages/ocom/ui-community-route-root/.storybook/vitest.setup.ts b/packages/ocom/ui-community-route-root/.storybook/vitest.setup.ts deleted file mode 100644 index 0f9f425df..000000000 --- a/packages/ocom/ui-community-route-root/.storybook/vitest.setup.ts +++ /dev/null @@ -1,6 +0,0 @@ -import * as a11yAddonAnnotations from '@storybook/addon-a11y/preview'; -import { setProjectAnnotations } from '@storybook/react-vite'; -import * as projectAnnotations from './preview.tsx'; - -// This is an important step to apply the right configuration when testing your stories. -setProjectAnnotations([a11yAddonAnnotations, projectAnnotations]); diff --git a/packages/ocom/ui-community-route-root/package.json b/packages/ocom/ui-community-route-root/package.json index dcd183d8b..a8322893e 100644 --- a/packages/ocom/ui-community-route-root/package.json +++ b/packages/ocom/ui-community-route-root/package.json @@ -32,7 +32,7 @@ "@storybook/addon-docs": "catalog:", "@storybook/addon-vitest": "catalog:", "@storybook/react-vite": "catalog:", - "@storybook/react": "10.4.2", + "@storybook/react": "catalog:", "@types/react": "^19.1.11", "@types/react-dom": "^19.1.6", "jsdom": "catalog:", diff --git a/packages/ocom/ui-community-shared/.storybook/vitest.setup.ts b/packages/ocom/ui-community-shared/.storybook/vitest.setup.ts deleted file mode 100644 index 0f9f425df..000000000 --- a/packages/ocom/ui-community-shared/.storybook/vitest.setup.ts +++ /dev/null @@ -1,6 +0,0 @@ -import * as a11yAddonAnnotations from '@storybook/addon-a11y/preview'; -import { setProjectAnnotations } from '@storybook/react-vite'; -import * as projectAnnotations from './preview.tsx'; - -// This is an important step to apply the right configuration when testing your stories. -setProjectAnnotations([a11yAddonAnnotations, projectAnnotations]); diff --git a/packages/ocom/ui-community-shared/package.json b/packages/ocom/ui-community-shared/package.json index 4d37779cf..5ed161480 100644 --- a/packages/ocom/ui-community-shared/package.json +++ b/packages/ocom/ui-community-shared/package.json @@ -34,7 +34,7 @@ "@storybook/addon-docs": "catalog:", "@storybook/addon-vitest": "catalog:", "@storybook/react-vite": "catalog:", - "@storybook/react": "10.4.2", + "@storybook/react": "catalog:", "@types/react": "^19.1.11", "@types/react-dom": "^19.1.6", "jsdom": "catalog:", diff --git a/packages/ocom/ui-shared/.storybook/vitest.setup.ts b/packages/ocom/ui-shared/.storybook/vitest.setup.ts deleted file mode 100644 index 0bfd23a31..000000000 --- a/packages/ocom/ui-shared/.storybook/vitest.setup.ts +++ /dev/null @@ -1,7 +0,0 @@ -import * as a11yAddonAnnotations from '@storybook/addon-a11y/preview'; -import { setProjectAnnotations } from '@storybook/react-vite'; -import * as projectAnnotations from './preview.tsx'; - -// This is an important step to apply the right configuration when testing your stories. -// More info at: https://storybook.js.org/docs/api/portable-stories/portable-stories-vitest#setprojectannotations -setProjectAnnotations([a11yAddonAnnotations, projectAnnotations]); diff --git a/packages/ocom/ui-shared/package.json b/packages/ocom/ui-shared/package.json index 60a772609..bc21554fa 100644 --- a/packages/ocom/ui-shared/package.json +++ b/packages/ocom/ui-shared/package.json @@ -50,7 +50,7 @@ "@storybook/addon-docs": "catalog:", "@storybook/addon-vitest": "catalog:", "@storybook/react-vite": "catalog:", - "@storybook/react": "10.4.2", + "@storybook/react": "catalog:", "@types/react": "^19.1.11", "@types/react-dom": "^19.1.6", "@vitest/browser": "catalog:", diff --git a/packages/ocom/ui-staff-route-user-management/.storybook/main.ts b/packages/ocom/ui-staff-route-user-management/.storybook/main.ts new file mode 100644 index 000000000..055dca4e5 --- /dev/null +++ b/packages/ocom/ui-staff-route-user-management/.storybook/main.ts @@ -0,0 +1,16 @@ +import { dirname, join } from 'node:path'; +import type { StorybookConfig } from '@storybook/react-vite'; + +function getAbsolutePath(value: string) { + return dirname(require.resolve(join(value, 'package.json'))); +} + +const config: StorybookConfig = { + stories: ['../src/**/*.stories.@(js|jsx|mjs|ts|tsx)'], + addons: [getAbsolutePath('@chromatic-com/storybook'), getAbsolutePath('@storybook/addon-docs'), getAbsolutePath('@storybook/addon-a11y'), getAbsolutePath('@storybook/addon-vitest')], + framework: { + name: getAbsolutePath('@storybook/react-vite'), + options: {}, + }, +}; +export default config; diff --git a/packages/ocom/ui-staff-route-user-management/.storybook/preview.tsx b/packages/ocom/ui-staff-route-user-management/.storybook/preview.tsx new file mode 100644 index 000000000..2f9935493 --- /dev/null +++ b/packages/ocom/ui-staff-route-user-management/.storybook/preview.tsx @@ -0,0 +1,35 @@ +import { MockedProvider } from '@apollo/client/testing'; +import type { Decorator, Preview } from '@storybook/react'; +import { MemoryRouter } from 'react-router-dom'; +import 'antd/dist/reset.css'; + +export const decorators: Decorator[] = [ + (Story, context) => { + const initialEntries = context.parameters?.memoryRouter?.initialEntries ?? ['/']; + const apolloMocks = context.parameters?.apolloMocks ?? []; + + return ( + + + + + + ); + }, +]; + +const preview: Preview = { + parameters: { + controls: { + matchers: { + color: /(background|color)$/i, + date: /Date$/, + }, + }, + }, +}; + +export default preview; diff --git a/packages/ocom/ui-staff-route-user-management/package.json b/packages/ocom/ui-staff-route-user-management/package.json index d119ebd9c..885fc0165 100644 --- a/packages/ocom/ui-staff-route-user-management/package.json +++ b/packages/ocom/ui-staff-route-user-management/package.json @@ -10,14 +10,17 @@ "prebuild": "pnpm run lint", "build": "tsgo --noEmit", "lint": "biome lint", + "storybook": "storybook dev --port 6007", + "build-storybook": "storybook build", "test": "vitest run --silent --reporter=dot", "test:watch": "vitest" }, "dependencies": { "@ant-design/icons": "catalog:", + "@apollo/client": "^3.13.9", "@graphql-typed-document-node/core": "^3.2.0", "@ocom/ui-staff-shared": "workspace:*", - "@graphql-typed-document-node/core": "^3.2.0", + "antd": "catalog:", "react": "catalog:", "react-dom": "catalog:", "react-router-dom": "catalog:" @@ -25,9 +28,16 @@ "devDependencies": { "@cellix/config-typescript": "workspace:*", "@cellix/config-vitest": "workspace:*", + "@chromatic-com/storybook": "^5.2.1", + "@storybook/react": "catalog:", + "@storybook/addon-a11y": "catalog:", + "@storybook/addon-docs": "catalog:", + "@storybook/addon-vitest": "catalog:", + "@storybook/react-vite": "catalog:", "@types/react": "^19.1.11", "@types/react-dom": "^19.1.6", "jsdom": "catalog:", + "storybook": "catalog:", "vite": "catalog:", "vitest": "catalog:", "typescript": "catalog:" diff --git a/packages/ocom/ui-staff-route-user-management/src/components/staff-role-create.container.graphql b/packages/ocom/ui-staff-route-user-management/src/components/staff-role-create.container.graphql new file mode 100644 index 000000000..6c4d46b7e --- /dev/null +++ b/packages/ocom/ui-staff-route-user-management/src/components/staff-role-create.container.graphql @@ -0,0 +1,15 @@ +mutation StaffRoleCreate($input: StaffRoleCreateInput!) { + staffRoleCreate(input: $input) { + status { + success + errorMessage + } + staffRole { + id + roleName + enterpriseAppRole + createdAt + updatedAt + } + } +} diff --git a/packages/ocom/ui-staff-route-user-management/src/components/staff-role-create.container.tsx b/packages/ocom/ui-staff-route-user-management/src/components/staff-role-create.container.tsx new file mode 100644 index 000000000..2be9f968f --- /dev/null +++ b/packages/ocom/ui-staff-route-user-management/src/components/staff-role-create.container.tsx @@ -0,0 +1,143 @@ +import { useMutation } from '@apollo/client'; +import { StaffAuthContext } from '@ocom/ui-staff-shared'; +import { App } from 'antd'; +import type React from 'react'; +import { useContext } from 'react'; +import { Navigate, useNavigate } from 'react-router-dom'; +import { StaffRoleCreateDocument, StaffRolesForSelectDocument, StaffRolesListDocument, type StaffRolesForSelectQuery, type StaffRolesListQuery } from '../generated.tsx'; +import { StaffRoleCreate, type StaffRoleFormValues } from './staff-role-create.tsx'; + +const EnterpriseAppRoleNames = { + CaseManager: 'Staff.CaseManager', + ServiceLineOwner: 'Staff.ServiceLineOwner', + Finance: 'Staff.Finance', + TechAdmin: 'Staff.TechAdmin', +} as const; + +function getAllowedEnterpriseAppRoles(enterpriseAppRole: string | undefined): string[] { + switch (enterpriseAppRole) { + case EnterpriseAppRoleNames.TechAdmin: + return Object.values(EnterpriseAppRoleNames); + case EnterpriseAppRoleNames.ServiceLineOwner: + return [EnterpriseAppRoleNames.ServiceLineOwner, EnterpriseAppRoleNames.CaseManager]; + case EnterpriseAppRoleNames.CaseManager: + return [EnterpriseAppRoleNames.CaseManager]; + case EnterpriseAppRoleNames.Finance: + return [EnterpriseAppRoleNames.Finance]; + default: + return []; + } +} + +export const StaffRoleCreateContainer: React.FC = () => { + const navigate = useNavigate(); + const { message } = App.useApp(); + const auth = useContext(StaffAuthContext); + const availableEnterpriseAppRoles = getAllowedEnterpriseAppRoles(auth?.enterpriseAppRole); + const showTechAdminPermissions = auth?.permissions?.canManageTechAdmin === true; + const canCreateRole = + auth?.permissions?.canAddRole === true || + auth?.permissions?.canManageStaffRolesAndPermissions === true || + auth?.permissions?.canManageTechAdmin === true; + + const [staffRoleCreate, { loading }] = useMutation(StaffRoleCreateDocument, { + update: (cache, { data }) => { + const newRole = data?.staffRoleCreate.staffRole; + if (!newRole) return; + const updateRolesList = (existing: StaffRolesListQuery | null): StaffRolesListQuery | null => { + if (!existing) return { staffRoles: [newRole] }; + if (existing.staffRoles.some((role) => String(role.id) === String(newRole.id))) return existing; + return { staffRoles: [...existing.staffRoles, newRole] }; + }; + const updateRolesSelect = (existing: StaffRolesForSelectQuery | null): StaffRolesForSelectQuery | null => { + if (!existing) return { staffRoles: [newRole] }; + if (existing.staffRoles.some((role) => String(role.id) === String(newRole.id))) return existing; + return { staffRoles: [...existing.staffRoles, newRole] }; + }; + cache.updateQuery({ query: StaffRolesListDocument }, updateRolesList); + cache.updateQuery({ query: StaffRolesForSelectDocument }, updateRolesSelect); + }, + }); + + if (!canCreateRole) { + return ( + + ); + } + + const handleSubmit = async (values: StaffRoleFormValues) => { + try { + const result = await staffRoleCreate({ + variables: { + input: { + roleName: values.roleName, + enterpriseAppRole: values.enterpriseAppRole || null, + permissions: { + communityPermissions: { + canManageCommunities: values.canManageCommunities, + canManageStaffRolesAndPermissions: values.canManageStaffRolesAndPermissions, + canManageAllCommunities: values.canManageAllCommunities, + canDeleteCommunities: values.canDeleteCommunities, + canChangeCommunityOwner: values.canChangeCommunityOwner, + canReIndexSearchCollections: values.canReIndexSearchCollections, + }, + userPermissions: { + canManageUsers: values.canManageUsers, + canAssignStaffRoles: values.canAssignStaffRoles, + canViewStaffUsers: values.canViewStaffUsers, + }, + staffRolePermissions: { + canViewRoles: values.canViewRoles, + canAddRole: values.canAddRole, + canEditRole: values.canEditRole, + canRemoveRole: values.canRemoveRole, + }, + financePermissions: { + canManageFinance: values.canManageFinance, + canViewGLBatchSummaries: values.canViewGLBatchSummaries, + canViewFinanceConfigs: values.canViewFinanceConfigs, + canCreateFinanceConfigs: values.canCreateFinanceConfigs, + }, + ...(showTechAdminPermissions + ? { + techAdminPermissions: { + canManageTechAdmin: values.canManageTechAdmin, + canViewDatabaseExplorer: values.canViewDatabaseExplorer, + canViewBlobExplorer: values.canViewBlobExplorer, + canViewQueueDashboard: values.canViewQueueDashboard, + canSendQueueMessages: values.canSendQueueMessages, + }, + } + : {}), + }, + }, + }, + }); + if (result.data?.staffRoleCreate.status.success) { + message.success('Role created successfully'); + navigate('..'); + } else { + message.error(result.data?.staffRoleCreate.status.errorMessage ?? 'Failed to create role'); + } + } catch (_err) { + message.error('Failed to create role'); + } + }; + + const handleCancel = () => { + navigate('..'); + }; + + return ( + + ); +}; diff --git a/packages/ocom/ui-staff-route-user-management/src/components/staff-role-create.stories.tsx b/packages/ocom/ui-staff-route-user-management/src/components/staff-role-create.stories.tsx new file mode 100644 index 000000000..256a5f219 --- /dev/null +++ b/packages/ocom/ui-staff-route-user-management/src/components/staff-role-create.stories.tsx @@ -0,0 +1,70 @@ +import type { Meta, StoryObj } from '@storybook/react'; +import { expect, userEvent, within } from 'storybook/test'; +import { StaffRoleCreate } from './staff-role-create.tsx'; + +const ALL_ENTERPRISE_APP_ROLES = ['Staff.TechAdmin', 'Staff.ServiceLineOwner', 'Staff.CaseManager', 'Staff.Finance']; + +const meta: Meta = { + title: 'UserManagement/Components/StaffRoleCreate', + component: StaffRoleCreate, + parameters: { layout: 'padded' }, +}; + +export default meta; +type Story = StoryObj; + +export const Default: Story = { + args: { + onSubmit: (values) => console.log('Submit:', values), + onCancel: () => console.log('Cancel clicked'), + availableEnterpriseAppRoles: ALL_ENTERPRISE_APP_ROLES, + showTechAdminPermissions: true, + }, +}; + +export const CaseManagerView: Story = { + args: { + onSubmit: (values) => console.log('Submit:', values), + onCancel: () => console.log('Cancel clicked'), + availableEnterpriseAppRoles: ['Staff.CaseManager'], + showTechAdminPermissions: false, + }, +}; + +export const ServiceLineOwnerView: Story = { + args: { + onSubmit: (values) => console.log('Submit:', values), + onCancel: () => console.log('Cancel clicked'), + availableEnterpriseAppRoles: ['Staff.ServiceLineOwner', 'Staff.CaseManager'], + showTechAdminPermissions: false, + }, +}; + +export const WithLoading: Story = { + args: { + onSubmit: (values) => console.log('Submit:', values), + onCancel: () => console.log('Cancel clicked'), + loading: true, + availableEnterpriseAppRoles: ALL_ENTERPRISE_APP_ROLES, + showTechAdminPermissions: true, + }, +}; + +export const PermissionHierarchy: Story = { + args: { + onSubmit: (values) => console.log('Submit:', values), + onCancel: () => console.log('Cancel clicked'), + availableEnterpriseAppRoles: ALL_ENTERPRISE_APP_ROLES, + showTechAdminPermissions: false, + }, + play: async ({ canvasElement }) => { + const canvas = within(canvasElement); + const addRole = canvas.getByRole('checkbox', { name: /can add staff role/i }); + const viewRoles = canvas.getByRole('checkbox', { name: /can view staff roles/i }); + + await userEvent.click(addRole); + + expect(addRole).toBeChecked(); + expect(viewRoles).toBeChecked(); + }, +}; diff --git a/packages/ocom/ui-staff-route-user-management/src/components/staff-role-create.tsx b/packages/ocom/ui-staff-route-user-management/src/components/staff-role-create.tsx new file mode 100644 index 000000000..f4613977b --- /dev/null +++ b/packages/ocom/ui-staff-route-user-management/src/components/staff-role-create.tsx @@ -0,0 +1,234 @@ +import { Button, Checkbox, Divider, Form, Input, Select, Space, Typography } from 'antd'; +import type React from 'react'; + +const { Title } = Typography; + +export interface StaffRoleFormValues { + roleName: string; + enterpriseAppRole: string; + canManageCommunities: boolean; + canManageStaffRolesAndPermissions: boolean; + canManageAllCommunities: boolean; + canDeleteCommunities: boolean; + canChangeCommunityOwner: boolean; + canReIndexSearchCollections: boolean; + canManageUsers: boolean; + canAssignStaffRoles: boolean; + canViewStaffUsers: boolean; + canViewRoles: boolean; + canAddRole: boolean; + canEditRole: boolean; + canRemoveRole: boolean; + canManageFinance: boolean; + canViewGLBatchSummaries: boolean; + canViewFinanceConfigs: boolean; + canCreateFinanceConfigs: boolean; + canManageTechAdmin: boolean; + canViewDatabaseExplorer: boolean; + canViewBlobExplorer: boolean; + canViewQueueDashboard: boolean; + canSendQueueMessages: boolean; +} + +interface StaffRoleCreateProps { + onSubmit: (values: StaffRoleFormValues) => void; + onCancel: () => void; + loading?: boolean; + availableEnterpriseAppRoles?: string[]; + showTechAdminPermissions?: boolean; + initialValues?: Partial; + mode?: 'create' | 'edit'; +} + +type PermissionFieldKey = keyof Omit; + +const PERMISSION_GROUPS: Array<{ + title: string; + techAdminOnly?: boolean; + topLevelKey: PermissionFieldKey; + fields: Array<{ key: PermissionFieldKey; label: string }>; +}> = [ + { + title: 'Community Permissions', + topLevelKey: 'canManageCommunities', + fields: [ + { key: 'canManageCommunities', label: 'Can Manage Communities' }, + { key: 'canManageStaffRolesAndPermissions', label: 'Can Manage Staff Roles and Permissions' }, + { key: 'canManageAllCommunities', label: 'Can Manage All Communities' }, + { key: 'canDeleteCommunities', label: 'Can Delete Communities' }, + { key: 'canChangeCommunityOwner', label: 'Can Change Community Owner' }, + { key: 'canReIndexSearchCollections', label: 'Can Reindex Search Collections' }, + ], + }, + { + title: 'User', + topLevelKey: 'canManageUsers', + fields: [ + { key: 'canManageUsers', label: 'Can Manage Users' }, + { key: 'canAssignStaffRoles', label: 'Can Assign Staff Roles' }, + { key: 'canViewStaffUsers', label: 'Can View Staff Users' }, + ], + }, + { + title: 'Staff Roles', + topLevelKey: 'canViewRoles', + fields: [ + { key: 'canViewRoles', label: 'Can View Staff Roles' }, + { key: 'canAddRole', label: 'Can Add Staff Role' }, + { key: 'canEditRole', label: 'Can Edit Staff Role' }, + { key: 'canRemoveRole', label: 'Can Remove Staff Role' }, + ], + }, + { + title: 'Finance', + topLevelKey: 'canManageFinance', + fields: [ + { key: 'canManageFinance', label: 'Can Manage Finance' }, + { key: 'canViewGLBatchSummaries', label: 'Can View GL Batch Summaries' }, + { key: 'canViewFinanceConfigs', label: 'Can View Finance Configs' }, + { key: 'canCreateFinanceConfigs', label: 'Can Create Finance Configs' }, + ], + }, + { + title: 'Tech Admin', + techAdminOnly: true, + topLevelKey: 'canManageTechAdmin', + fields: [ + { key: 'canManageTechAdmin', label: 'Can Manage Tech Admin' }, + { key: 'canViewDatabaseExplorer', label: 'Can View Database Explorer' }, + { key: 'canViewBlobExplorer', label: 'Can View Blob Explorer' }, + { key: 'canViewQueueDashboard', label: 'Can View Queue Dashboard' }, + { key: 'canSendQueueMessages', label: 'Can Send Queue Messages' }, + ], + }, +]; + +const normalizePermissionHierarchy = (values: StaffRoleFormValues): StaffRoleFormValues => { + const normalized = { ...values }; + + for (const group of PERMISSION_GROUPS) { + const shouldEnableTopLevel = group.fields.slice(1).some(({ key }) => normalized[key]); + if (shouldEnableTopLevel) { + normalized[group.topLevelKey] = true; + } + } + + return normalized; +}; + +const DEFAULT_VALUES: StaffRoleFormValues = { + roleName: '', + enterpriseAppRole: '', + canManageCommunities: false, + canManageStaffRolesAndPermissions: false, + canManageAllCommunities: false, + canDeleteCommunities: false, + canChangeCommunityOwner: false, + canReIndexSearchCollections: false, + canManageUsers: false, + canAssignStaffRoles: false, + canViewStaffUsers: false, + canViewRoles: false, + canAddRole: false, + canEditRole: false, + canRemoveRole: false, + canManageFinance: false, + canViewGLBatchSummaries: false, + canViewFinanceConfigs: false, + canCreateFinanceConfigs: false, + canManageTechAdmin: false, + canViewDatabaseExplorer: false, + canViewBlobExplorer: false, + canViewQueueDashboard: false, + canSendQueueMessages: false, +}; + +export const StaffRoleCreate: React.FC = ({ onSubmit, onCancel, loading, availableEnterpriseAppRoles, showTechAdminPermissions, initialValues, mode = 'create' }) => { + const [form] = Form.useForm(); + + const defaultValues: StaffRoleFormValues = { + ...normalizePermissionHierarchy({ ...DEFAULT_VALUES, ...initialValues }), + }; + + const isEdit = mode === 'edit'; + const enterpriseAppRoleOptions = (availableEnterpriseAppRoles ?? []).map((r) => ({ value: r, label: r })); + + const handleValuesChange = (_changedValues: Partial, allValues: StaffRoleFormValues) => { + const normalizedValues = normalizePermissionHierarchy(allValues); + const hasHierarchyChange = PERMISSION_GROUPS.some((group) => { + const topLevelIsFalse = normalizedValues[group.topLevelKey] !== allValues[group.topLevelKey]; + const childSelected = group.fields.slice(1).some(({ key }) => allValues[key]); + return topLevelIsFalse && childSelected; + }); + + if (hasHierarchyChange) { + form.setFieldsValue(normalizedValues); + } + }; + + return ( + + {isEdit ? 'Edit Staff Role' : 'Create Staff Role'} +
+ + + + + ({ value: r.id, label: r.roleName }))} + placeholder={currentRoleName ? `${currentRoleName}` : 'No role assigned'} + /> + + {isEditingOwnRole && ( +
+
+ )} + + +
+ Activity Log + + dataSource={activityLog.slice().sort((a, b) => (new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime()))} + columns={activityLogColumns} + rowKey={(record) => `${record.activityType}-${record.createdAt}-${record.activityByStaffUserId}`} + pagination={{ pageSize: 10, showSizeChanger: false }} + locale={{ emptyText: 'No activity recorded' }} + size="small" + /> +
+ + ); +}; diff --git a/packages/ocom/ui-staff-route-user-management/src/components/staff-users-list.container.graphql b/packages/ocom/ui-staff-route-user-management/src/components/staff-users-list.container.graphql new file mode 100644 index 000000000..a87b8d325 --- /dev/null +++ b/packages/ocom/ui-staff-route-user-management/src/components/staff-users-list.container.graphql @@ -0,0 +1,16 @@ +query StaffUsersList { + staffUsers { + ...StaffUsersListFields + } +} + +fragment StaffUsersListFields on StaffUser { + id + displayName + email + createdAt + role { + id + roleName + } +} diff --git a/packages/ocom/ui-staff-route-user-management/src/components/staff-users-list.container.tsx b/packages/ocom/ui-staff-route-user-management/src/components/staff-users-list.container.tsx new file mode 100644 index 000000000..217c8efe3 --- /dev/null +++ b/packages/ocom/ui-staff-route-user-management/src/components/staff-users-list.container.tsx @@ -0,0 +1,40 @@ +import { useQuery } from '@apollo/client'; +import { StaffAuthContext } from '@ocom/ui-staff-shared'; +import type React from 'react'; +import { useContext } from 'react'; +import { useNavigate } from 'react-router-dom'; +import { StaffUsersListDocument } from '../generated.tsx'; +import { StaffUsersList } from './staff-users-list.tsx'; + +export const StaffUsersListContainer: React.FC = () => { + const navigate = useNavigate(); + const auth = useContext(StaffAuthContext); + const perms = auth?.permissions; + const canEdit = + perms?.canAssignStaffRoles === true || + perms?.canManageUsers === true || + perms?.canManageStaffRolesAndPermissions === true || + perms?.canManageTechAdmin === true; + const { data, loading } = useQuery(StaffUsersListDocument, { + fetchPolicy: 'cache-and-network', + }); + + const handleEdit = (id: string) => { + navigate(id); + }; + + return ( + ({ + id: String(u.id), + displayName: u.displayName, + email: u.email, + role: u.role ? { id: String(u.role.id), roleName: u.role.roleName } : null, + createdAt: u.createdAt ? String(u.createdAt) : '', + }) )} + onEdit={handleEdit} + loading={loading} + canEdit={canEdit} + /> + ); +}; diff --git a/packages/ocom/ui-staff-route-user-management/src/components/staff-users-list.stories.tsx b/packages/ocom/ui-staff-route-user-management/src/components/staff-users-list.stories.tsx new file mode 100644 index 000000000..7687f8a38 --- /dev/null +++ b/packages/ocom/ui-staff-route-user-management/src/components/staff-users-list.stories.tsx @@ -0,0 +1,57 @@ +import type { Meta, StoryObj } from '@storybook/react'; +import { expect, within } from 'storybook/test'; +import { type StaffUser, StaffUsersList } from './staff-users-list.tsx'; + +const mockUsers: StaffUser[] = [ + { + id: '1', + displayName: 'Alice Admin', + email: 'alice@example.com', + role: { id: 'r1', roleName: 'Tech Admin' }, + createdAt: '2024-01-01T00:00:00Z', + }, + { + id: '2', + displayName: 'Bob Manager', + email: 'bob@example.com', + role: null, + createdAt: '2024-02-01T00:00:00Z', + }, +]; + +const meta: Meta = { + title: 'UserManagement/Components/StaffUsersList', + component: StaffUsersList, + parameters: { layout: 'padded' }, +}; + +export default meta; +type Story = StoryObj; + +export const Default: Story = { + args: { + data: mockUsers, + onEdit: (id) => console.log('Edit user:', id), + canEdit: true, + }, + play: ({ canvasElement }: { canvasElement: HTMLElement }) => { + const canvas = within(canvasElement); + expect(canvas.getByText('Staff Users (2)')).toBeInTheDocument(); + expect(canvas.getByText('Alice Admin')).toBeInTheDocument(); + expect(canvas.getByText('Bob Manager')).toBeInTheDocument(); + expect(canvas.getByText('Tech Admin')).toBeInTheDocument(); + expect(canvas.getByText('No Role')).toBeInTheDocument(); + }, +}; + +export const EmptyState: Story = { + args: { + data: [], + onEdit: (id) => console.log('Edit user:', id), + canEdit: true, + }, + play: ({ canvasElement }: { canvasElement: HTMLElement }) => { + const canvas = within(canvasElement); + expect(canvas.getByText('Staff Users (0)')).toBeInTheDocument(); + }, +}; diff --git a/packages/ocom/ui-staff-route-user-management/src/components/staff-users-list.tsx b/packages/ocom/ui-staff-route-user-management/src/components/staff-users-list.tsx new file mode 100644 index 000000000..443bfa2f4 --- /dev/null +++ b/packages/ocom/ui-staff-route-user-management/src/components/staff-users-list.tsx @@ -0,0 +1,71 @@ +import type { TableColumnsType } from 'antd'; +import { Button, Space, Table, Typography } from 'antd'; +import type React from 'react'; + +const { Title } = Typography; + +export interface StaffUser { + id: string; + displayName: string; + email: string; + role?: { id: string; roleName: string } | null; + createdAt: string; +} + +interface StaffUsersListProps { + data: StaffUser[]; + onEdit: (id: string) => void; + canEdit?: boolean; + loading?: boolean; +} + +export const StaffUsersList: React.FC = ({ data, onEdit, canEdit = false, loading }) => { + const columns: TableColumnsType = [ + { title: 'Display Name', dataIndex: 'displayName', key: 'displayName' }, + { title: 'Email', dataIndex: 'email', key: 'email' }, + { + title: 'Role', + key: 'role', + render: (_: unknown, record: StaffUser) => record.role?.roleName ?? 'No Role', + }, + { + title: 'Created At', + dataIndex: 'createdAt', + key: 'createdAt', + render: (date: string) => (date ? new Date(date).toLocaleDateString() : 'N/A'), + }, + { + title: 'Action', + key: 'action', + render: (_: unknown, record: StaffUser) => ( + canEdit ? ( + + ) : null + ), + }, + ]; + + return ( + +
+ Staff Users ({data.length}) +
+ + + ); +}; diff --git a/packages/ocom/ui-staff-route-user-management/src/index.tsx b/packages/ocom/ui-staff-route-user-management/src/index.tsx index f2c3911df..1c60eb065 100644 --- a/packages/ocom/ui-staff-route-user-management/src/index.tsx +++ b/packages/ocom/ui-staff-route-user-management/src/index.tsx @@ -1,6 +1,6 @@ -import { PlaceholderPage } from '@ocom/ui-staff-shared'; import type React from 'react'; -import { Route, Routes } from 'react-router-dom'; +import { Navigate, Route, Routes } from 'react-router-dom'; +import { UserManagementPage } from './pages/user-management.tsx'; import { SectionLayout } from './section-layout.tsx'; export const Root: React.FC = () => { @@ -13,22 +13,15 @@ export const Root: React.FC = () => { } /> - } + element={} /> diff --git a/packages/ocom/ui-staff-route-user-management/src/pages/staff-roles.stories.tsx b/packages/ocom/ui-staff-route-user-management/src/pages/staff-roles.stories.tsx new file mode 100644 index 000000000..f7ffbaeb9 --- /dev/null +++ b/packages/ocom/ui-staff-route-user-management/src/pages/staff-roles.stories.tsx @@ -0,0 +1,62 @@ +import type { Meta, StoryObj } from '@storybook/react'; +import { Route, Routes } from 'react-router-dom'; +import { StaffRoleCreateDocument, StaffRolesListDocument } from '../generated.tsx'; +import { StaffRolesPage } from './staff-roles.tsx'; + +const mockStaffRoles = [ + { id: 'r1', roleName: 'Case Manager', enterpriseAppRole: 'Staff.CaseManager', createdAt: '2024-01-01T00:00:00.000Z', updatedAt: '2024-01-15T00:00:00.000Z' }, + { id: 'r2', roleName: 'Finance', enterpriseAppRole: 'Staff.Finance', createdAt: '2024-01-02T00:00:00.000Z', updatedAt: '2024-01-15T00:00:00.000Z' }, +]; + +const listMock = { + request: { query: StaffRolesListDocument }, + result: { data: { staffRoles: mockStaffRoles } }, +}; + +const createMock = { + request: { query: StaffRoleCreateDocument, variables: { input: { roleName: 'New Role' } } }, + result: { data: { staffRoleCreate: { status: { success: true, errorMessage: null }, staffRole: { id: 'r3', roleName: 'New Role', enterpriseAppRole: '' } } } }, +}; + +const meta: Meta = { + title: 'UserManagement/Pages/StaffRolesPage', + component: StaffRolesPage, + parameters: { + layout: 'padded', + memoryRouter: { + initialEntries: ['/'], + }, + apolloMocks: [listMock, createMock], + }, +}; + +export default meta; +type Story = StoryObj; + +export const Default: Story = { + render: () => ( + + } + /> + + ), +}; + +export const CreateView: Story = { + parameters: { + memoryRouter: { + initialEntries: ['/create'], + }, + apolloMocks: [listMock, createMock], + }, + render: () => ( + + } + /> + + ), +}; diff --git a/packages/ocom/ui-staff-route-user-management/src/pages/staff-roles.tsx b/packages/ocom/ui-staff-route-user-management/src/pages/staff-roles.tsx new file mode 100644 index 000000000..35f60fd6b --- /dev/null +++ b/packages/ocom/ui-staff-route-user-management/src/pages/staff-roles.tsx @@ -0,0 +1,46 @@ +import type React from 'react'; +import { useContext } from 'react'; +import { Navigate, Route, Routes } from 'react-router-dom'; +import { StaffAuthContext } from '@ocom/ui-staff-shared'; +import { StaffRoleCreateContainer } from '../components/staff-role-create.container.tsx'; +import { StaffRoleEditContainer } from '../components/staff-role-edit.container.tsx'; +import { StaffRolesListContainer } from '../components/staff-roles-list.container.tsx'; + +export const StaffRolesPage: React.FC = () => { + const auth = useContext(StaffAuthContext); + const perms = auth?.permissions; + const canViewRoles = + perms?.canViewRoles === true || + perms?.canAddRole === true || + perms?.canEditRole === true || + perms?.canRemoveRole === true || + perms?.canManageStaffRolesAndPermissions === true || + perms?.canManageTechAdmin === true; + const canViewStaffUsers = perms?.canViewStaffUsers === true || perms?.canManageUsers === true || perms?.canManageTechAdmin === true; + + if (!canViewRoles) { + return ( + + ); + } + + return ( + + } + /> + } + /> + } + /> + + ); +}; diff --git a/packages/ocom/ui-staff-route-user-management/src/pages/staff-users.stories.tsx b/packages/ocom/ui-staff-route-user-management/src/pages/staff-users.stories.tsx new file mode 100644 index 000000000..b48aad2f6 --- /dev/null +++ b/packages/ocom/ui-staff-route-user-management/src/pages/staff-users.stories.tsx @@ -0,0 +1,40 @@ +import type { Meta, StoryObj } from '@storybook/react'; +import { Route, Routes } from 'react-router-dom'; +import { StaffUsersListDocument } from '../generated.tsx'; +import { StaffUsersPage } from './staff-users.tsx'; + +const mockStaffUsers = [ + { id: '1', displayName: 'Alice Admin', email: 'alice@example.com', createdAt: '2024-01-01T00:00:00.000Z', role: { id: 'r1', roleName: 'Case Manager' } }, + { id: '2', displayName: 'Bob Staff', email: 'bob@example.com', createdAt: '2024-02-01T00:00:00.000Z', role: null }, +]; + +const meta: Meta = { + title: 'UserManagement/Pages/StaffUsersPage', + component: StaffUsersPage, + parameters: { + layout: 'padded', + memoryRouter: { + initialEntries: ['/'], + }, + apolloMocks: [ + { + request: { query: StaffUsersListDocument }, + result: { data: { staffUsers: mockStaffUsers } }, + }, + ], + }, +}; + +export default meta; +type Story = StoryObj; + +export const Default: Story = { + render: () => ( + + } + /> + + ), +}; diff --git a/packages/ocom/ui-staff-route-user-management/src/pages/staff-users.tsx b/packages/ocom/ui-staff-route-user-management/src/pages/staff-users.tsx new file mode 100644 index 000000000..7f7980e68 --- /dev/null +++ b/packages/ocom/ui-staff-route-user-management/src/pages/staff-users.tsx @@ -0,0 +1,41 @@ +import type React from 'react'; +import { useContext } from 'react'; +import { Navigate, Route, Routes } from 'react-router-dom'; +import { StaffAuthContext } from '@ocom/ui-staff-shared'; +import { StaffUserDetailContainer } from '../components/staff-user-detail.container.tsx'; +import { StaffUsersListContainer } from '../components/staff-users-list.container.tsx'; + +export const StaffUsersPage: React.FC = () => { + const auth = useContext(StaffAuthContext); + const perms = auth?.permissions; + const canViewStaffUsers = perms?.canViewStaffUsers === true || perms?.canManageUsers === true || perms?.canManageTechAdmin === true; + const canViewRoles = + perms?.canViewRoles === true || + perms?.canAddRole === true || + perms?.canEditRole === true || + perms?.canRemoveRole === true || + perms?.canManageStaffRolesAndPermissions === true || + perms?.canManageTechAdmin === true; + + if (!canViewStaffUsers) { + return ( + + ); + } + + return ( + + } + /> + } + /> + + ); +}; diff --git a/packages/ocom/ui-staff-route-user-management/src/pages/user-management.stories.tsx b/packages/ocom/ui-staff-route-user-management/src/pages/user-management.stories.tsx new file mode 100644 index 000000000..56ea7b59e --- /dev/null +++ b/packages/ocom/ui-staff-route-user-management/src/pages/user-management.stories.tsx @@ -0,0 +1,44 @@ +import type { Meta, StoryObj } from '@storybook/react'; +import { Route, Routes } from 'react-router-dom'; +import { UserManagementPage } from './user-management.tsx'; + +const meta: Meta = { + title: 'UserManagement/Pages/UserManagementPage', + component: UserManagementPage, + parameters: { + layout: 'padded', + memoryRouter: { + initialEntries: ['/staff-users'], + }, + }, +}; + +export default meta; +type Story = StoryObj; + +export const StaffUsersTab: Story = { + render: () => ( + + } + /> + + ), +}; + +export const StaffRolesTab: Story = { + parameters: { + memoryRouter: { + initialEntries: ['/staff-roles'], + }, + }, + render: () => ( + + } + /> + + ), +}; diff --git a/packages/ocom/ui-staff-route-user-management/src/pages/user-management.tsx b/packages/ocom/ui-staff-route-user-management/src/pages/user-management.tsx new file mode 100644 index 000000000..230a35c30 --- /dev/null +++ b/packages/ocom/ui-staff-route-user-management/src/pages/user-management.tsx @@ -0,0 +1,66 @@ +import { SafetyOutlined, UserOutlined } from '@ant-design/icons'; +import { SubPageLayout, VerticalTabs } from '@ocom/ui-staff-shared'; +import { StaffAuthContext } from '@ocom/ui-staff-shared'; +import type React from 'react'; +import { useContext } from 'react'; +import { Navigate } from 'react-router-dom'; +import { StaffRolesPage } from './staff-roles.tsx'; +import { StaffUsersPage } from './staff-users.tsx'; + +export const UserManagementPage: React.FC = () => { + const auth = useContext(StaffAuthContext); + const perms = auth?.permissions; + const canViewStaffUsers = perms?.canViewStaffUsers === true || perms?.canManageUsers === true || perms?.canManageStaffRolesAndPermissions === true || perms?.canManageTechAdmin === true; + const canViewRoles = + perms?.canViewRoles === true || + perms?.canAddRole === true || + perms?.canEditRole === true || + perms?.canRemoveRole === true || + perms?.canManageStaffRolesAndPermissions === true || + perms?.canManageTechAdmin === true; + + const pages = [ + ...(canViewStaffUsers + ? [ + { + id: 'staff-users', + link: 'staff-users', + path: 'staff-users/*', + title: 'Staff Users', + icon: , + element: , + }, + ] + : []), + ...(canViewRoles + ? [ + { + id: 'staff-roles', + link: 'staff-roles', + path: 'staff-roles/*', + title: 'Staff Roles', + icon: , + element: , + }, + ] + : []), + ]; + + if (pages.length === 0) { + return ( + + ); + } + + return ( + User Management} + > + + + ); +}; diff --git a/packages/ocom/ui-staff-route-user-management/vitest.config.ts b/packages/ocom/ui-staff-route-user-management/vitest.config.ts index 17bec4371..0b6d005dc 100644 --- a/packages/ocom/ui-staff-route-user-management/vitest.config.ts +++ b/packages/ocom/ui-staff-route-user-management/vitest.config.ts @@ -1,12 +1,10 @@ -import { baseConfig } from '@cellix/config-vitest'; -import { defineConfig, mergeConfig } from 'vitest/config'; +import { createStorybookVitestConfig, getDirnameFromImportMetaUrl } from '@cellix/config-vitest'; +import { defineConfig } from 'vitest/config'; -export default mergeConfig( - baseConfig, - defineConfig({ - test: { - environment: 'jsdom', - passWithNoTests: true, - }, +const dirname = getDirnameFromImportMetaUrl(import.meta.url); + +export default defineConfig( + createStorybookVitestConfig(dirname, { + additionalCoverageExclude: ['src/index.tsx'], }), ); diff --git a/packages/ocom/ui-staff-shared/package.json b/packages/ocom/ui-staff-shared/package.json index 48e35ae0b..9f91ceb8e 100644 --- a/packages/ocom/ui-staff-shared/package.json +++ b/packages/ocom/ui-staff-shared/package.json @@ -30,8 +30,8 @@ "@cellix/config-vitest": "workspace:*", "@types/react": "^19.1.11", "@types/react-dom": "^19.1.6", - "@storybook/react": "^9.1.9", - "storybook": "catalog:", + "@storybook/react": "catalog:", + "storybook": "catalog:", "jsdom": "catalog:", "vite": "catalog:", "vitest": "catalog:", diff --git a/packages/ocom/ui-staff-shared/src/require-role.tsx b/packages/ocom/ui-staff-shared/src/require-role.tsx index 71f2b6d02..ae363ad57 100644 --- a/packages/ocom/ui-staff-shared/src/require-role.tsx +++ b/packages/ocom/ui-staff-shared/src/require-role.tsx @@ -18,9 +18,18 @@ const STAFF_USER_CURRENT_QUERY = gql` permissions { communityPermissions { canManageCommunities + canManageStaffRolesAndPermissions } userPermissions { canManageUsers + canAssignStaffRoles + canViewStaffUsers + } + staffRolePermissions { + canViewRoles + canAddRole + canEditRole + canRemoveRole } financePermissions { canManageFinance @@ -38,8 +47,9 @@ interface StaffUserCurrentQueryResult { staffUserCurrent: { role?: { permissions: { - communityPermissions: { canManageCommunities: boolean }; - userPermissions: { canManageUsers: boolean }; + communityPermissions: { canManageCommunities: boolean; canManageStaffRolesAndPermissions: boolean }; + userPermissions: { canManageUsers: boolean; canAssignStaffRoles: boolean; canViewStaffUsers: boolean }; + staffRolePermissions: { canViewRoles: boolean; canAddRole: boolean; canEditRole: boolean; canRemoveRole: boolean }; financePermissions: { canManageFinance: boolean }; techAdminPermissions: { canManageTechAdmin: boolean }; }; @@ -61,9 +71,16 @@ export const RequireRole: FC = ({ roles, permKey, children }) const permissions: NonNullable | undefined = rolePermissions ? { canManageCommunities: rolePermissions.communityPermissions.canManageCommunities, + canManageStaffRolesAndPermissions: rolePermissions.communityPermissions.canManageStaffRolesAndPermissions, canManageUsers: rolePermissions.userPermissions.canManageUsers, + canAssignStaffRoles: rolePermissions.userPermissions.canAssignStaffRoles, + canViewStaffUsers: rolePermissions.userPermissions.canViewStaffUsers, canManageFinance: rolePermissions.financePermissions.canManageFinance, canManageTechAdmin: rolePermissions.techAdminPermissions.canManageTechAdmin, + canViewRoles: rolePermissions.staffRolePermissions.canViewRoles, + canAddRole: rolePermissions.staffRolePermissions.canAddRole, + canEditRole: rolePermissions.staffRolePermissions.canEditRole, + canRemoveRole: rolePermissions.staffRolePermissions.canRemoveRole, } : undefined; const isAuthorized = permKey !== undefined && permissions?.[permKey] === true; diff --git a/packages/ocom/ui-staff-shared/src/section-layout.stories.tsx b/packages/ocom/ui-staff-shared/src/section-layout.stories.tsx index 541a668ba..b682807ed 100644 --- a/packages/ocom/ui-staff-shared/src/section-layout.stories.tsx +++ b/packages/ocom/ui-staff-shared/src/section-layout.stories.tsx @@ -90,7 +90,7 @@ describe('SectionLayout merging behaviour', () => { await new Promise((r) => setTimeout(r, 10)); expect(container.textContent).not.toContain('Communities'); - expect(container.textContent).not.toContain('Users'); + expect(container.textContent).toContain('Users'); expect(container.textContent).toContain('Finance'); expect(container.textContent).not.toContain('Tech Admin'); }); diff --git a/packages/ocom/ui-staff-shared/src/section-layout.tsx b/packages/ocom/ui-staff-shared/src/section-layout.tsx index 45cc05295..400f31983 100644 --- a/packages/ocom/ui-staff-shared/src/section-layout.tsx +++ b/packages/ocom/ui-staff-shared/src/section-layout.tsx @@ -74,10 +74,19 @@ export const SectionLayout: React.FC = (props) => { // Build default page layouts from backend permissions. const perms = auth?.permissions; const canManageCommunities = perms?.canManageCommunities === true; + const canManageStaffRolesAndPermissions = perms?.canManageStaffRolesAndPermissions === true; const canManageUsers = perms?.canManageUsers === true; + const canAssignStaffRoles = perms?.canAssignStaffRoles === true; + const canViewStaffUsers = perms?.canViewStaffUsers === true; const canManageFinance = perms?.canManageFinance === true; const canManageTechAdmin = perms?.canManageTechAdmin === true; + const canViewRoles = perms?.canViewRoles === true; + const canAddRole = perms?.canAddRole === true; + const canEditRole = perms?.canEditRole === true; + const canRemoveRole = perms?.canRemoveRole === true; const nestedParentProps = canManageCommunities ? { parent: 'ROOT' as const } : {}; + const canAccessUserManagement = + canManageUsers || canAssignStaffRoles || canViewStaffUsers || canManageStaffRolesAndPermissions || canViewRoles || canAddRole || canEditRole || canRemoveRole || canManageTechAdmin; // Construct default page layouts ensuring a ROOT entry always exists so MenuComponent renders. // If Communities is allowed, keep the historic behaviour: Communities is ROOT and others are its children. @@ -87,7 +96,7 @@ export const SectionLayout: React.FC = (props) => { if (canManageCommunities) { // Communities as canonical root, others as children defaultPageLayouts.push({ path: '/staff/community-management', title: 'Communities', icon: , id: 'ROOT' }); - if (canManageUsers) defaultPageLayouts.push({ path: '/staff/user-management/*', title: 'Users', icon: , id: 'users', ...nestedParentProps }); + if (canAccessUserManagement) defaultPageLayouts.push({ path: '/staff/user-management/*', title: 'Users', icon: , id: 'users', ...nestedParentProps }); if (canManageFinance) defaultPageLayouts.push({ path: '/staff/finance/*', title: 'Finance', icon: , id: 'finance', ...nestedParentProps }); if (canManageTechAdmin) defaultPageLayouts.push({ path: '/staff/tech/*', title: 'Tech Admin', icon: , id: 'tech', ...nestedParentProps }); } else { @@ -95,9 +104,9 @@ export const SectionLayout: React.FC = (props) => { if (canManageFinance) { defaultPageLayouts.push({ path: '/staff/finance/*', title: 'Finance', icon: , id: 'ROOT' }); // add others as children if present - if (canManageUsers) defaultPageLayouts.push({ path: '/staff/user-management/*', title: 'Users', icon: , id: 'users', parent: 'ROOT' }); + if (canAccessUserManagement) defaultPageLayouts.push({ path: '/staff/user-management/*', title: 'Users', icon: , id: 'users', parent: 'ROOT' }); if (canManageTechAdmin) defaultPageLayouts.push({ path: '/staff/tech/*', title: 'Tech Admin', icon: , id: 'tech', parent: 'ROOT' }); - } else if (canManageUsers) { + } else if (canAccessUserManagement) { defaultPageLayouts.push({ path: '/staff/user-management/*', title: 'Users', icon: , id: 'ROOT' }); if (canManageTechAdmin) defaultPageLayouts.push({ path: '/staff/tech/*', title: 'Tech Admin', icon: , id: 'tech', parent: 'ROOT' }); } else if (canManageTechAdmin) { diff --git a/packages/ocom/ui-staff-shared/src/staff-app-roles.ts b/packages/ocom/ui-staff-shared/src/staff-app-roles.ts index d3f459698..021d089ad 100644 --- a/packages/ocom/ui-staff-shared/src/staff-app-roles.ts +++ b/packages/ocom/ui-staff-shared/src/staff-app-roles.ts @@ -13,7 +13,7 @@ export type StaffAppRole = (typeof StaffAppRoles)[keyof typeof StaffAppRoles]; */ export const staffRouteRoles = { '/staff/community-management': [StaffAppRoles.CaseManager, StaffAppRoles.ServiceLineOwner, StaffAppRoles.TechAdmin], - '/staff/user-management': [StaffAppRoles.CaseManager, StaffAppRoles.ServiceLineOwner, StaffAppRoles.TechAdmin], + '/staff/user-management': [StaffAppRoles.CaseManager, StaffAppRoles.ServiceLineOwner, StaffAppRoles.Finance, StaffAppRoles.TechAdmin], '/staff/finance': [StaffAppRoles.Finance, StaffAppRoles.TechAdmin], '/staff/tech': [StaffAppRoles.TechAdmin], } satisfies Record; diff --git a/packages/ocom/ui-staff-shared/src/staff-route-shell.tsx b/packages/ocom/ui-staff-shared/src/staff-route-shell.tsx index 0b16503c3..5c3130919 100644 --- a/packages/ocom/ui-staff-shared/src/staff-route-shell.tsx +++ b/packages/ocom/ui-staff-shared/src/staff-route-shell.tsx @@ -13,11 +13,19 @@ export type StaffAuth = { roles?: string[]; raw?: Record; onLogout?: () => Promise | void; + enterpriseAppRole?: string; permissions?: { canManageCommunities?: boolean; + canManageStaffRolesAndPermissions?: boolean; canManageUsers?: boolean; + canAssignStaffRoles?: boolean; + canViewStaffUsers?: boolean; canManageFinance?: boolean; canManageTechAdmin?: boolean; + canViewRoles?: boolean; + canAddRole?: boolean; + canEditRole?: boolean; + canRemoveRole?: boolean; }; }; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 27b3ecacc..98917bddd 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,7 +8,7 @@ catalogs: default: '@ant-design/icons': specifier: ^6.0.2 - version: 6.1.1 + version: 6.2.5 '@apollo/server': specifier: 5.5.0 version: 5.5.0 @@ -44,22 +44,25 @@ catalogs: version: 3.43.0 '@storybook/addon-a11y': specifier: ^10.4.2 - version: 10.4.2 + version: 10.4.4 '@storybook/addon-docs': specifier: ^10.4.2 - version: 10.4.2 + version: 10.4.4 '@storybook/addon-onboarding': specifier: ^10.4.2 - version: 10.4.2 + version: 10.4.4 '@storybook/addon-vitest': + specifier: ^10.4.2 + version: 10.4.3 + '@storybook/react': specifier: ^10.4.2 version: 10.4.2 '@storybook/react-vite': specifier: ^10.4.2 - version: 10.4.2 + version: 10.4.4 '@types/node': specifier: ^22.19.5 - version: 22.19.15 + version: 22.19.21 '@typescript/native-preview': specifier: 7.0.0-dev.20260428.1 version: 7.0.0-dev.20260428.1 @@ -77,10 +80,10 @@ catalogs: version: 6.3.5 archunit: specifier: ^2.1.63 - version: 2.1.63 + version: 2.3.0 graphql: specifier: ^16.10.0 - version: 16.12.0 + version: 16.14.2 jsdom: specifier: ^26.1.0 version: 26.1.0 @@ -89,16 +92,16 @@ catalogs: version: 6.18.0 mongodb-memory-server: specifier: ^10.1.4 - version: 10.3.0 + version: 10.4.3 mongoose: specifier: 8.17.0 version: 8.17.0 react: specifier: ^19.1.1 - version: 19.2.0 + version: 19.2.7 react-dom: specifier: ^19.1.1 - version: 19.2.0 + version: 19.2.7 react-router-dom: specifier: 7.15.1 version: 7.15.1 @@ -106,11 +109,11 @@ catalogs: specifier: 6.0.1 version: 6.0.1 storybook: - specifier: 10.4.2 + specifier: ^10.4.2 version: 10.4.2 tsx: specifier: ^4.21.0 - version: 4.21.0 + version: 4.22.4 typescript: specifier: 6.0.3 version: 6.0.3 @@ -193,7 +196,7 @@ importers: version: 6.5.0(vitest@4.1.8) '@ant-design/cli': specifier: ^6.3.5 - version: 6.3.5(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + version: 6.4.3 '@biomejs/biome': specifier: 2.4.10 version: 2.4.10 @@ -202,34 +205,34 @@ importers: version: link:packages/cellix/graphql-codegen '@graphql-codegen/cli': specifier: ^5.0.7 - version: 5.0.7(@parcel/watcher@2.5.1)(@types/node@22.19.15)(graphql@16.12.0)(typescript@6.0.3) + version: 5.0.7(@parcel/watcher@2.5.6)(@types/node@22.19.20)(graphql@16.14.2)(typescript@6.0.3) '@graphql-codegen/introspection': specifier: ^4.0.3 - version: 4.0.3(graphql@16.12.0) + version: 4.0.3(graphql@16.14.2) '@graphql-codegen/typed-document-node': specifier: ^5.1.2 - version: 5.1.2(graphql@16.12.0) + version: 5.1.2(graphql@16.14.2) '@graphql-codegen/typescript': specifier: ^4.1.6 - version: 4.1.6(graphql@16.12.0) + version: 4.1.6(graphql@16.14.2) '@graphql-codegen/typescript-operations': specifier: ^4.6.1 - version: 4.6.1(graphql@16.12.0) + version: 4.6.1(graphql@16.14.2) '@graphql-codegen/typescript-resolvers': specifier: ^4.5.1 - version: 4.5.2(graphql@16.12.0) + version: 4.5.2(graphql@16.14.2) '@parcel/watcher': specifier: ^2.5.1 - version: 2.5.1 + version: 2.5.6 '@playwright/test': specifier: 1.59.0 version: 1.59.0 '@sonar/scan': specifier: ^4.3.0 - version: 4.3.2 + version: 4.3.6 '@types/node': specifier: 'catalog:' - version: 22.19.15 + version: 22.19.20 '@typescript/native-preview': specifier: 'catalog:' version: 7.0.0-dev.20260428.1 @@ -238,7 +241,7 @@ importers: version: 4.1.8(vitest@4.1.8) azurite: specifier: ^3.35.0 - version: 3.35.0 + version: 3.35.0(@types/node@22.19.20) chrome-devtools-mcp: specifier: ^1.3.0 version: 1.3.0 @@ -250,16 +253,16 @@ importers: version: 9.1.7 knip: specifier: ^5.64.2 - version: 5.88.1(@types/node@22.19.15)(typescript@6.0.3) + version: 5.88.1(@types/node@22.19.20)(typescript@6.0.3) portless: specifier: 0.11.1 version: 0.11.1 rimraf: specifier: ^6.0.1 - version: 6.1.2 + version: 6.1.3 snyk: specifier: ^1.1300.2 - version: 1.1301.0 + version: 1.1305.1 ts-scope-trimmer-plugin: specifier: ^1.0.2 version: 1.0.4(typescript@6.0.3) @@ -271,7 +274,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)(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.8(@opentelemetry/api@1.9.0)(@types/node@22.19.20)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(jsdom@26.1.0)(vite@8.0.16(@types/node@22.19.20)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3)) apps/api: dependencies: @@ -338,7 +341,7 @@ importers: version: 4.1.8(vitest@4.1.8) archunit: specifier: 'catalog:' - version: 2.1.63 + version: 2.3.0 rimraf: specifier: 'catalog:' version: 6.0.1 @@ -350,34 +353,34 @@ 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)(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.8(@opentelemetry/api@1.9.0)(@types/node@25.9.2)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(jsdom@26.1.0)(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3)) apps/docs: dependencies: '@docusaurus/core': specifier: ^3.10.1 - version: 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.7)(react@19.2.0))(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@6.0.3) + version: 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@6.0.3) '@docusaurus/plugin-content-docs': specifier: ^3.10.1 - version: 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.7)(react@19.2.0))(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@6.0.3) + version: 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@6.0.3) '@docusaurus/preset-classic': specifier: ^3.10.1 - version: 3.10.1(@algolia/client-search@5.45.0)(@mdx-js/react@3.1.1(@types/react@19.2.7)(react@19.2.0))(@types/react@19.2.7)(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(search-insights@2.17.3)(typescript@6.0.3) + version: 3.10.1(@algolia/client-search@5.53.0)(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@types/react@19.2.17)(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(search-insights@2.17.3)(typescript@6.0.3) '@mdx-js/react': specifier: ^3.0.0 - version: 3.1.1(@types/react@19.2.7)(react@19.2.0) + version: 3.1.1(@types/react@19.2.17)(react@19.2.7) clsx: specifier: ^2.0.0 version: 2.1.1 prism-react-renderer: specifier: ^2.3.0 - version: 2.4.1(react@19.2.0) + version: 2.4.1(react@19.2.7) react: specifier: ^19.0.0 - version: 19.2.0 + version: 19.2.7 react-dom: specifier: ^19.0.0 - version: 19.2.0(react@19.2.0) + version: 19.2.7(react@19.2.7) devDependencies: '@cellix/config-typescript': specifier: workspace:* @@ -387,28 +390,28 @@ importers: version: link:../../packages/cellix/config-vitest '@docusaurus/module-type-aliases': specifier: ^3.10.1 - version: 3.10.1(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 3.10.1(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) '@docusaurus/tsconfig': specifier: ^3.10.1 version: 3.10.1 '@docusaurus/types': specifier: ^3.10.1 - version: 3.10.1(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 3.10.1(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) '@testing-library/jest-dom': specifier: ^6.6.3 version: 6.9.1 '@testing-library/react': specifier: ^16.2.0 - version: 16.3.0(@testing-library/dom@10.4.1)(@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) + version: 16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) '@types/react': specifier: ^19.1.11 - version: 19.2.7 + version: 19.2.17 '@types/react-dom': specifier: ^19.1.6 - version: 19.2.3(@types/react@19.2.7) + version: 19.2.3(@types/react@19.2.17) '@vitejs/plugin-react': specifier: ^6.0.1 - 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)) + version: 6.0.2(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3)) '@vitest/coverage-istanbul': specifier: 'catalog:' version: 4.1.8(vitest@4.1.8) @@ -420,7 +423,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)(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.8(@opentelemetry/api@1.9.0)(@types/node@25.9.2)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(jsdom@26.1.0)(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3)) apps/server-mongodb-memory-mock: dependencies: @@ -448,7 +451,7 @@ importers: version: 6.0.1 tsx: specifier: 'catalog:' - version: 4.21.0 + version: 4.22.4 typescript: specifier: 'catalog:' version: 6.0.3 @@ -476,28 +479,28 @@ importers: version: 6.0.1 tsx: specifier: 'catalog:' - version: 4.21.0 + version: 4.22.4 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)(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.8(@opentelemetry/api@1.9.0)(@types/node@25.9.2)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(jsdom@26.1.0)(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3)) apps/ui-community: dependencies: '@apollo/client': specifier: ^3.13.9 - version: 3.14.0(@types/react@19.2.7)(graphql-ws@6.0.6(graphql@16.12.0)(ws@8.21.0))(graphql@16.12.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 3.14.1(@types/react@19.2.17)(graphql-ws@6.0.8(graphql@16.14.2)(ws@8.21.0))(graphql@16.14.2)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) '@cellix/ui-core': specifier: workspace:* version: link:../../packages/cellix/ui-core '@dr.pogodin/react-helmet': specifier: ^3.0.2 - version: 3.0.4(react@19.2.0) + version: 3.2.2(react@19.2.7) '@graphql-typed-document-node/core': specifier: ^3.2.0 - version: 3.2.0(graphql@16.12.0) + version: 3.2.0(graphql@16.14.2) '@ocom/ui-community-route-accounts': specifier: workspace:* version: link:../../packages/ocom/ui-community-route-accounts @@ -512,25 +515,25 @@ importers: version: link:../../packages/ocom/ui-community-shared 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) + version: 6.3.5(luxon@3.7.2)(moment@2.30.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) apollo-link-rest: specifier: ^0.9.0 - version: 0.9.0(@apollo/client@3.14.0(@types/react@19.2.7)(graphql-ws@6.0.6(graphql@16.12.0)(ws@8.21.0))(graphql@16.12.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(graphql@16.12.0)(qs@6.15.2) + version: 0.9.0(@apollo/client@3.14.1(@types/react@19.2.17)(graphql-ws@6.0.8(graphql@16.14.2)(ws@8.21.0))(graphql@16.14.2)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(graphql@16.14.2)(qs@6.15.2) less: specifier: ^4.4.0 - version: 4.4.2 + version: 4.6.4 react: specifier: 'catalog:' - version: 19.2.0 + version: 19.2.7 react-dom: specifier: 'catalog:' - version: 19.2.0(react@19.2.0) + version: 19.2.7(react@19.2.7) react-oidc-context: specifier: ^3.3.0 - version: 3.3.0(oidc-client-ts@3.4.1)(react@19.2.0) + version: 3.3.1(oidc-client-ts@3.5.0)(react@19.2.7) react-router-dom: specifier: 'catalog:' - version: 7.15.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 7.15.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) devDependencies: '@cellix/config-typescript': specifier: workspace:* @@ -540,37 +543,34 @@ importers: version: link:../../packages/cellix/config-vitest '@chromatic-com/storybook': specifier: ^5.2.1 - version: 5.2.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)) + version: 5.2.1(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)) '@storybook/addon-a11y': specifier: 'catalog:' - 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)) + version: 10.4.3(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)) '@storybook/addon-docs': specifier: 'catalog:' - 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)) + version: 10.4.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(esbuild@0.28.1)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3))(webpack@5.107.2(esbuild@0.28.1)(postcss@8.5.10)) '@storybook/addon-onboarding': specifier: 'catalog:' - 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)) + version: 10.4.3(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)) '@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.3(@vitest/browser-playwright@4.1.8)(@vitest/browser@4.1.8(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3))(vitest@4.1.8))(@vitest/runner@4.1.8)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vitest@4.1.8) '@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) + version: 10.4.2(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(typescript@6.0.3) '@storybook/react-vite': specifier: 'catalog:' - version: 10.4.2(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(esbuild@0.28.1)(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)(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)) - '@testing-library/jest-dom': - specifier: ^6.6.4 - version: 6.9.1 + version: 10.4.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(esbuild@0.28.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3))(webpack@5.107.2(esbuild@0.28.1)(postcss@8.5.10)) '@types/react': specifier: ^19.1.8 - version: 19.2.7 + version: 19.2.17 '@types/react-dom': specifier: ^19.1.6 - version: 19.2.3(@types/react@19.2.7) + version: 19.2.3(@types/react@19.2.17) '@vitejs/plugin-react': specifier: ^6.0.1 - 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)) + version: 6.0.2(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3)) '@vitest/coverage-istanbul': specifier: 'catalog:' version: 4.1.8(vitest@4.1.8) @@ -582,43 +582,43 @@ importers: version: 26.1.0 rollup-plugin-visualizer: specifier: ^6.0.5 - version: 6.0.5(rolldown@1.0.3) + version: 6.0.11(rolldown@1.0.3) storybook: specifier: 'catalog:' - version: 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) + version: 10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) storybook-addon-apollo-client: specifier: ^9.0.0 - version: 9.0.0(@apollo/client@3.14.0(@types/react@19.2.7)(graphql-ws@6.0.6(graphql@16.12.0)(ws@8.21.0))(graphql@16.12.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(graphql@16.12.0)(react@19.2.0) + version: 9.0.0(@apollo/client@3.14.1(@types/react@19.2.17)(graphql-ws@6.0.8(graphql@16.14.2)(ws@8.21.0))(graphql@16.14.2)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(graphql@16.14.2)(react@19.2.7) tailwindcss: specifier: ^3.4.17 - version: 3.4.18(tsx@4.21.0)(yaml@2.8.3) + version: 3.4.19(tsx@4.22.4)(yaml@2.8.3) typescript: specifier: 'catalog:' version: 6.0.3 vite: specifier: 8.0.16 - 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) + version: 8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3) vite-plugin-node-polyfills: specifier: 'catalog:' - 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)) + version: 0.28.0(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(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)(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.8(@opentelemetry/api@1.9.0)(@types/node@25.9.2)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(jsdom@26.1.0)(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3)) apps/ui-staff: dependencies: '@apollo/client': specifier: ^3.13.9 - version: 3.14.0(@types/react@19.2.7)(graphql-ws@6.0.6(graphql@16.12.0)(ws@8.21.0))(graphql@16.12.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 3.14.1(@types/react@19.2.17)(graphql-ws@6.0.8(graphql@16.14.2)(ws@8.21.0))(graphql@16.14.2)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) '@cellix/ui-core': specifier: workspace:* version: link:../../packages/cellix/ui-core '@dr.pogodin/react-helmet': specifier: ^3.0.2 - version: 3.0.4(react@19.2.0) + version: 3.2.2(react@19.2.7) '@graphql-typed-document-node/core': specifier: ^3.2.0 - version: 3.2.0(graphql@16.12.0) + version: 3.2.0(graphql@16.14.2) '@ocom/ui-shared': specifier: workspace:* version: link:../../packages/ocom/ui-shared @@ -642,25 +642,25 @@ importers: version: link:../../packages/ocom/ui-staff-shared 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) + version: 6.3.5(luxon@3.7.2)(moment@2.30.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) apollo-link-rest: specifier: ^0.9.0 - version: 0.9.0(@apollo/client@3.14.0(@types/react@19.2.7)(graphql-ws@6.0.6(graphql@16.12.0)(ws@8.21.0))(graphql@16.12.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(graphql@16.12.0)(qs@6.15.2) + version: 0.9.0(@apollo/client@3.14.1(@types/react@19.2.17)(graphql-ws@6.0.8(graphql@16.14.2)(ws@8.21.0))(graphql@16.14.2)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(graphql@16.14.2)(qs@6.15.2) less: specifier: ^4.4.0 - version: 4.4.2 + version: 4.6.4 react: specifier: 'catalog:' - version: 19.2.0 + version: 19.2.7 react-dom: specifier: 'catalog:' - version: 19.2.0(react@19.2.0) + version: 19.2.7(react@19.2.7) react-oidc-context: specifier: ^3.3.0 - version: 3.3.0(oidc-client-ts@3.4.1)(react@19.2.0) + version: 3.3.1(oidc-client-ts@3.5.0)(react@19.2.7) react-router-dom: specifier: 'catalog:' - version: 7.15.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 7.15.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) devDependencies: '@cellix/config-typescript': specifier: workspace:* @@ -670,13 +670,13 @@ importers: version: link:../../packages/cellix/config-vitest '@types/react': specifier: ^19.1.8 - version: 19.2.7 + version: 19.2.17 '@types/react-dom': specifier: ^19.1.6 - version: 19.2.3(@types/react@19.2.7) + version: 19.2.3(@types/react@19.2.17) '@vitejs/plugin-react': specifier: ^6.0.1 - 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)) + version: 6.0.2(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3)) '@vitest/coverage-istanbul': specifier: 'catalog:' version: 4.1.8(vitest@4.1.8) @@ -688,22 +688,22 @@ importers: version: 26.1.0 rollup-plugin-visualizer: specifier: ^6.0.5 - version: 6.0.5(rolldown@1.0.3) + version: 6.0.11(rolldown@1.0.3) tailwindcss: specifier: ^3.4.17 - version: 3.4.18(tsx@4.21.0)(yaml@2.8.3) + version: 3.4.19(tsx@4.22.4)(yaml@2.8.3) typescript: specifier: 'catalog:' version: 6.0.3 vite: specifier: 8.0.16 - 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) + version: 8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3) vite-plugin-node-polyfills: specifier: 'catalog:' - 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)) + version: 0.28.0(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(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)(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.8(@opentelemetry/api@1.9.0)(@types/node@25.9.2)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(jsdom@26.1.0)(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3)) packages/cellix/api-services-spec: devDependencies: @@ -727,10 +727,10 @@ importers: version: link:../config-vitest '@types/node': specifier: 'catalog:' - version: 22.19.15 + version: 22.19.20 archunit: specifier: 'catalog:' - version: 2.1.63 + version: 2.3.0 rimraf: specifier: 'catalog:' version: 6.0.1 @@ -739,7 +739,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)(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.8(@opentelemetry/api@1.9.0)(@types/node@22.19.20)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(jsdom@26.1.0)(vite@8.0.16(@types/node@22.19.20)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3)) packages/cellix/config-rolldown: devDependencies: @@ -763,7 +763,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)(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.8(@opentelemetry/api@1.9.0)(@types/node@25.9.2)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(jsdom@26.1.0)(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3)) packages/cellix/config-typescript: {} @@ -774,16 +774,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.3(@vitest/browser-playwright@4.1.8)(@vitest/browser@4.1.8(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3))(vitest@4.1.8))(@vitest/runner@4.1.8)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vitest@4.1.8) '@vitest/browser-playwright': specifier: 'catalog:' - 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) + version: 4.1.8(playwright@1.59.0)(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3))(vitest@4.1.8) 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)(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.8(@opentelemetry/api@1.9.0)(@types/node@25.9.2)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(jsdom@26.1.0)(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3)) packages/cellix/domain-seedwork: devDependencies: @@ -804,7 +804,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)(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.8(@opentelemetry/api@1.9.0)(@types/node@25.9.2)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(jsdom@26.1.0)(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3)) packages/cellix/event-bus-seedwork-node: dependencies: @@ -838,19 +838,19 @@ importers: version: link:../graphql-core '@graphql-tools/merge': specifier: ^9.1.1 - version: 9.1.6(graphql@16.12.0) + version: 9.1.9(graphql@16.14.2) '@graphql-tools/schema': specifier: ^10.0.25 - version: 10.0.30(graphql@16.12.0) + version: 10.0.33(graphql@16.14.2) '@graphql-tools/utils': specifier: ^10.0.13 - version: 10.11.0(graphql@16.12.0) + version: 10.11.0(graphql@16.14.2) graphql: specifier: ^16.10.0 - version: 16.12.0 + version: 16.14.2 graphql-scalars: specifier: ^1.24.2 - version: 1.25.0(graphql@16.12.0) + version: 1.25.0(graphql@16.14.2) devDependencies: '@amiceli/vitest-cucumber': specifier: ^6.3.0 @@ -872,16 +872,16 @@ 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)(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.8(@opentelemetry/api@1.9.0)(@types/node@25.9.2)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(jsdom@26.1.0)(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3)) packages/cellix/graphql-core: dependencies: graphql: specifier: ^16.10.0 - version: 16.12.0 + version: 16.14.2 graphql-scalars: specifier: ^1.24.2 - version: 1.25.0(graphql@16.12.0) + version: 1.25.0(graphql@16.14.2) devDependencies: '@cellix/config-typescript': specifier: workspace:* @@ -900,7 +900,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)(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.8(@opentelemetry/api@1.9.0)(@types/node@25.9.2)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(jsdom@26.1.0)(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3)) packages/cellix/mongoose-seedwork: dependencies: @@ -925,7 +925,7 @@ importers: version: 6.18.0 mongodb-memory-server: specifier: ^10.1.4 - version: 10.3.0 + version: 10.4.3 mongoose: specifier: 'catalog:' version: 8.17.0 @@ -937,13 +937,13 @@ 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)(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.8(@opentelemetry/api@1.9.0)(@types/node@25.9.2)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(jsdom@26.1.0)(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3)) packages/cellix/server-mongodb-memory-mock-seedwork: dependencies: mongodb-memory-server: specifier: 'catalog:' - version: 10.3.0 + version: 10.4.3 mongoose: specifier: 'catalog:' version: 8.17.0 @@ -981,7 +981,7 @@ importers: version: link:../config-vitest '@types/express': specifier: ^5.0.3 - version: 5.0.5 + version: 5.0.6 '@vitest/coverage-istanbul': specifier: 'catalog:' version: 4.1.8(vitest@4.1.8) @@ -993,7 +993,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)(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.8(@opentelemetry/api@1.9.0)(@types/node@25.9.2)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(jsdom@26.1.0)(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3)) packages/cellix/service-blob-storage: dependencies: @@ -1002,7 +1002,7 @@ importers: version: 4.13.1 '@azure/storage-blob': specifier: ^12.31.0 - version: 12.31.0 + version: 12.32.0 '@cellix/api-services-spec': specifier: workspace:* version: link:../api-services-spec @@ -1024,19 +1024,19 @@ 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)(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.8(@opentelemetry/api@1.9.0)(@types/node@25.9.2)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(jsdom@26.1.0)(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3)) packages/cellix/ui-core: dependencies: antd: specifier: '>=6.0.0' - 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) + version: 6.4.3(luxon@3.7.2)(moment@2.30.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) react: specifier: '>=18.0.0' - version: 19.2.0 + version: 19.2.7 react-dom: specifier: '>=18.0.0' - version: 19.2.0(react@19.2.0) + version: 19.2.7(react@19.2.7) devDependencies: '@cellix/config-typescript': specifier: workspace:* @@ -1046,40 +1046,40 @@ importers: version: link:../config-vitest '@chromatic-com/storybook': specifier: ^5.2.1 - version: 5.2.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)) + version: 5.2.1(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)) '@storybook/addon-a11y': specifier: 'catalog:' - 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)) + version: 10.4.3(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)) '@storybook/addon-docs': specifier: 'catalog:' - 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)) + version: 10.4.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(esbuild@0.28.1)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3))(webpack@5.107.2(esbuild@0.28.1)) '@storybook/addon-onboarding': specifier: 'catalog:' - 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)) + version: 10.4.4(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)) '@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.4(@vitest/browser-playwright@4.1.8)(@vitest/browser@4.1.8(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3))(vitest@4.1.8))(@vitest/runner@4.1.8)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vitest@4.1.8) '@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) + version: 10.4.2(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(typescript@6.0.3) '@storybook/react-vite': specifier: 'catalog:' - version: 10.4.2(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(esbuild@0.28.1)(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)(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)) + version: 10.4.4(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(esbuild@0.28.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3))(webpack@5.107.2(esbuild@0.28.1)) '@testing-library/react': - specifier: ^16.3.0 - version: 16.3.0(@testing-library/dom@10.4.1)(@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) + specifier: ^16.2.0 + version: 16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) '@types/react': specifier: ^19.1.16 - version: 19.2.7 + version: 19.2.17 '@types/react-dom': specifier: ^19.1.6 - version: 19.2.3(@types/react@19.2.7) + version: 19.2.3(@types/react@19.2.17) '@vitest/browser': specifier: 'catalog:' - 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) + version: 4.1.8(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3))(vitest@4.1.8) '@vitest/browser-playwright': specifier: 'catalog:' - 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) + version: 4.1.8(playwright@1.59.0)(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3))(vitest@4.1.8) '@vitest/coverage-istanbul': specifier: 'catalog:' version: 4.1.8(vitest@4.1.8) @@ -1088,22 +1088,22 @@ importers: version: 26.1.0 react-oidc-context: specifier: ^3.3.0 - version: 3.3.0(oidc-client-ts@3.4.1)(react@19.2.0) + version: 3.3.1(oidc-client-ts@3.5.0)(react@19.2.7) react-router-dom: specifier: 'catalog:' - version: 7.15.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 7.15.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) rimraf: specifier: 'catalog:' version: 6.0.1 storybook: specifier: 'catalog:' - version: 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) + version: 10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) 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)(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.8(@opentelemetry/api@1.9.0)(@types/node@25.9.2)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(jsdom@26.1.0)(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3)) packages/ocom-verification/acceptance-api: dependencies: @@ -1127,7 +1127,7 @@ importers: version: 3.43.0 std-env: specifier: ^4.0.0 - version: 4.0.0 + version: 4.1.0 devDependencies: '@cellix/config-typescript': specifier: workspace:* @@ -1161,16 +1161,16 @@ importers: version: link:../../ocom/service-token-validation '@types/node': specifier: 'catalog:' - version: 22.19.15 + version: 22.19.21 c8: specifier: ^11.0.0 version: 11.0.0 rimraf: specifier: ^6.0.1 - version: 6.1.2 + version: 6.1.3 tsx: specifier: ^4.20.3 - version: 4.21.0 + version: 4.22.4 typescript: specifier: 'catalog:' version: 6.0.3 @@ -1179,13 +1179,13 @@ importers: dependencies: '@apollo/client': specifier: ^3.13.9 - version: 3.14.0(@types/react@19.2.7)(graphql-ws@6.0.6(graphql@16.12.0)(ws@8.21.0))(graphql@16.12.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 3.14.1(@types/react@19.2.17)(graphql-ws@6.0.8(graphql@16.14.2)(ws@8.21.0))(graphql@16.14.2)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) '@cucumber/cucumber': specifier: 'catalog:' version: 12.8.1 '@dr.pogodin/react-helmet': specifier: ^3.0.4 - version: 3.0.4(react@19.2.0) + version: 3.2.2(react@19.2.7) '@serenity-js/console-reporter': specifier: 'catalog:' version: 3.43.0 @@ -1200,22 +1200,22 @@ importers: version: 3.43.0 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) + version: 6.3.5(luxon@3.7.2)(moment@2.30.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) graphql: specifier: 'catalog:' - version: 16.12.0 + version: 16.14.2 react: specifier: ^19.1.0 - version: 19.2.0 + version: 19.2.7 react-dom: specifier: ^19.1.0 - version: 19.2.0(react@19.2.0) + version: 19.2.7(react@19.2.7) react-oidc-context: specifier: ^3.3.0 - version: 3.3.0(oidc-client-ts@3.4.1)(react@19.2.0) + version: 3.3.1(oidc-client-ts@3.5.0)(react@19.2.7) std-env: specifier: ^4.0.0 - version: 4.0.0 + version: 4.1.0 devDependencies: '@cellix/config-typescript': specifier: workspace:* @@ -1225,16 +1225,16 @@ importers: version: link:../verification-shared '@testing-library/react': specifier: ^16.3.0 - version: 16.3.0(@testing-library/dom@10.4.1)(@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) + version: 16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) '@types/node': specifier: 'catalog:' - version: 22.19.15 + version: 22.19.21 '@types/react': specifier: ^19.1.8 - version: 19.2.7 + version: 19.2.17 '@types/react-dom': specifier: ^19.1.6 - version: 19.2.3(@types/react@19.2.7) + version: 19.2.3(@types/react@19.2.17) c8: specifier: ^10.1.3 version: 10.1.3 @@ -1243,7 +1243,7 @@ importers: version: 26.1.0 tsx: specifier: ^4.20.3 - version: 4.21.0 + version: 4.22.4 typescript: specifier: 'catalog:' version: 6.0.3 @@ -1261,13 +1261,13 @@ importers: version: link:../../cellix/config-vitest '@types/node': specifier: 'catalog:' - version: 22.19.15 + version: 22.19.21 typescript: specifier: 'catalog:' 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)(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.8(@opentelemetry/api@1.9.0)(@types/node@22.19.21)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(jsdom@26.1.0)(vite@8.0.16(@types/node@22.19.21)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3)) packages/ocom-verification/e2e-tests: dependencies: @@ -1291,7 +1291,7 @@ importers: version: 3.43.0 std-env: specifier: ^4.0.0 - version: 4.0.0 + version: 4.1.0 devDependencies: '@cellix/config-typescript': specifier: workspace:* @@ -1301,16 +1301,16 @@ importers: version: link:../verification-shared '@types/node': specifier: 'catalog:' - version: 22.19.15 + version: 22.19.21 playwright: specifier: 1.59.0 version: 1.59.0 rimraf: specifier: ^6.0.1 - version: 6.1.2 + version: 6.1.3 tsx: specifier: ^4.20.3 - version: 4.21.0 + version: 4.22.4 typescript: specifier: 'catalog:' version: 6.0.3 @@ -1319,7 +1319,7 @@ importers: dependencies: '@apollo/server': specifier: 'catalog:' - version: 5.5.0(graphql@16.12.0) + version: 5.5.0(graphql@16.14.2) '@cellix/server-mongodb-memory-mock-seedwork': specifier: workspace:* version: link:../../cellix/server-mongodb-memory-mock-seedwork @@ -1340,16 +1340,16 @@ importers: version: link:../../ocom/service-mongoose '@testing-library/react': specifier: ^16.3.0 - version: 16.3.0(@testing-library/dom@10.4.1)(@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) + version: 16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) graphql: specifier: 'catalog:' - version: 16.12.0 + version: 16.14.2 graphql-depth-limit: specifier: ^1.1.0 - version: 1.1.0(graphql@16.12.0) + version: 1.1.0(graphql@16.14.2) graphql-middleware: specifier: ^6.1.35 - version: 6.1.35(graphql@16.12.0) + version: 6.1.35(graphql@16.14.2) mongodb: specifier: 'catalog:' version: 6.18.0 @@ -1365,7 +1365,7 @@ importers: version: 1.1.6 '@types/node': specifier: 'catalog:' - version: 22.19.15 + version: 22.19.21 playwright: specifier: 1.59.0 version: 1.59.0 @@ -1411,7 +1411,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)(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.8(@opentelemetry/api@1.9.0)(@types/node@25.9.2)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(jsdom@26.1.0)(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3)) packages/ocom/context-spec: dependencies: @@ -1467,7 +1467,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)(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.8(@opentelemetry/api@1.9.0)(@types/node@25.9.2)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(jsdom@26.1.0)(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3)) packages/ocom/domain: dependencies: @@ -1528,7 +1528,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)(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.8(@opentelemetry/api@1.9.0)(@types/node@25.9.2)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(jsdom@26.1.0)(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3)) packages/ocom/event-handler: dependencies: @@ -1556,7 +1556,7 @@ importers: version: link:../../cellix/graphql-core '@graphql-tools/merge': specifier: ^9.1.6 - version: 9.1.6(graphql@16.12.0) + version: 9.1.9(graphql@16.14.2) '@ocom/application-services': specifier: workspace:* version: link:../application-services @@ -1565,7 +1565,7 @@ importers: version: link:../domain graphql: specifier: 'catalog:' - version: 16.12.0 + version: 16.14.2 devDependencies: '@cellix/archunit-tests': specifier: workspace:* @@ -1590,13 +1590,13 @@ 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)(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.8(@opentelemetry/api@1.9.0)(@types/node@25.9.2)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(jsdom@26.1.0)(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3)) packages/ocom/graphql-handler: dependencies: '@apollo/server': specifier: 'catalog:' - version: 5.5.0(graphql@16.12.0) + version: 5.5.0(graphql@16.14.2) '@apollo/utils.withrequired': specifier: ^3.0.0 version: 3.0.0 @@ -1614,7 +1614,7 @@ importers: version: link:../service-apollo-server graphql: specifier: 'catalog:' - version: 16.12.0 + version: 16.14.2 devDependencies: '@cellix/config-typescript': specifier: workspace:* @@ -1633,7 +1633,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)(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.8(@opentelemetry/api@1.9.0)(@types/node@25.9.2)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(jsdom@26.1.0)(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3)) packages/ocom/persistence: dependencies: @@ -1682,7 +1682,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)(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.8(@opentelemetry/api@1.9.0)(@types/node@25.9.2)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(jsdom@26.1.0)(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3)) packages/ocom/rest: dependencies: @@ -1707,7 +1707,7 @@ importers: dependencies: '@apollo/server': specifier: 'catalog:' - version: 5.5.0(graphql@16.12.0) + version: 5.5.0(graphql@16.14.2) '@cellix/api-services-spec': specifier: workspace:* version: link:../../cellix/api-services-spec @@ -1716,13 +1716,13 @@ importers: version: 1.9.0 graphql: specifier: 'catalog:' - version: 16.12.0 + version: 16.14.2 graphql-depth-limit: specifier: ^1.1.0 - version: 1.1.0(graphql@16.12.0) + version: 1.1.0(graphql@16.14.2) graphql-middleware: specifier: ^6.1.35 - version: 6.1.35(graphql@16.12.0) + version: 6.1.35(graphql@16.14.2) devDependencies: '@cellix/config-typescript': specifier: workspace:* @@ -1744,7 +1744,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)(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.8(@opentelemetry/api@1.9.0)(@types/node@25.9.2)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(jsdom@26.1.0)(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3)) packages/ocom/service-blob-storage: dependencies: @@ -1769,7 +1769,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)(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.8(@opentelemetry/api@1.9.0)(@types/node@25.9.2)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(jsdom@26.1.0)(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3)) packages/ocom/service-mongoose: dependencies: @@ -1858,7 +1858,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)(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.8(@opentelemetry/api@1.9.0)(@types/node@25.9.2)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(jsdom@26.1.0)(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3)) packages/ocom/service-token-validation: dependencies: @@ -1886,28 +1886,28 @@ 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)(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.8(@opentelemetry/api@1.9.0)(@types/node@25.9.2)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(jsdom@26.1.0)(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3)) packages/ocom/ui-community-route-accounts: dependencies: '@ant-design/icons': specifier: 'catalog:' - version: 6.1.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 6.2.5(react-dom@19.2.7(react@19.2.7))(react@19.2.7) '@ant-design/pro-layout': specifier: ^7.22.7 - version: 7.22.7(antd@6.3.5(luxon@3.7.2)(moment@2.30.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 7.22.7(antd@6.3.5(luxon@3.7.2)(moment@2.30.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(react-dom@19.2.7(react@19.2.7))(react@19.2.7) '@apollo/client': specifier: ^3.13.9 - version: 3.14.0(@types/react@19.2.7)(graphql-ws@6.0.6(graphql@16.12.0)(ws@8.21.0))(graphql@16.12.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 3.14.1(@types/react@19.2.17)(graphql-ws@6.0.8(graphql@16.14.2)(ws@8.21.0))(graphql@16.14.2)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) '@cellix/ui-core': specifier: workspace:* version: link:../../cellix/ui-core '@dr.pogodin/react-helmet': specifier: ^3.0.2 - version: 3.0.4(react@19.2.0) + version: 3.2.2(react@19.2.7) '@graphql-typed-document-node/core': specifier: ^3.2.0 - version: 3.2.0(graphql@16.12.0) + version: 3.2.0(graphql@16.14.2) '@ocom/ui-community-shared': specifier: workspace:* version: link:../ui-community-shared @@ -1916,19 +1916,19 @@ importers: version: link:../ui-shared 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) + version: 6.3.5(luxon@3.7.2)(moment@2.30.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) react: specifier: 'catalog:' - version: 19.2.0 + version: 19.2.7 react-dom: specifier: 'catalog:' - version: 19.2.0(react@19.2.0) + version: 19.2.7(react@19.2.7) react-oidc-context: specifier: ^3.3.0 - version: 3.3.0(oidc-client-ts@3.4.1)(react@19.2.0) + version: 3.3.1(oidc-client-ts@3.5.0)(react@19.2.7) react-router-dom: specifier: 'catalog:' - version: 7.15.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 7.15.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) devDependencies: '@cellix/archunit-tests': specifier: workspace:* @@ -1941,67 +1941,67 @@ importers: version: link:../../cellix/config-vitest '@chromatic-com/storybook': specifier: ^5.2.1 - version: 5.2.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)) + version: 5.2.1(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)) '@ocom-verification/archunit-tests': specifier: workspace:* version: link:../../ocom-verification/archunit-tests '@storybook/addon-a11y': specifier: 'catalog:' - 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)) + version: 10.4.4(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)) '@storybook/addon-docs': specifier: 'catalog:' - 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)) + version: 10.4.4(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(esbuild@0.28.1)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3))(webpack@5.107.2(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.4(@vitest/browser-playwright@4.1.8)(@vitest/browser@4.1.8(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3))(vitest@4.1.8))(@vitest/runner@4.1.8)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vitest@4.1.8) '@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) + version: 10.4.2(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(typescript@6.0.3) '@storybook/react-vite': specifier: 'catalog:' - version: 10.4.2(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(esbuild@0.28.1)(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)(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)) + version: 10.4.4(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(esbuild@0.28.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3))(webpack@5.107.2(esbuild@0.28.1)) '@types/react': specifier: ^19.1.11 - version: 19.2.7 + version: 19.2.17 '@types/react-dom': specifier: ^19.1.6 - version: 19.2.3(@types/react@19.2.7) + version: 19.2.3(@types/react@19.2.17) jsdom: specifier: 'catalog:' version: 26.1.0 storybook: specifier: 'catalog:' - version: 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) + version: 10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) typescript: specifier: 'catalog:' version: 6.0.3 vite: specifier: 8.0.16 - 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) + version: 8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(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)(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.8(@opentelemetry/api@1.9.0)(@types/node@25.9.2)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(jsdom@26.1.0)(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3)) packages/ocom/ui-community-route-admin: dependencies: '@ant-design/icons': specifier: 'catalog:' - version: 6.1.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 6.2.5(react-dom@19.2.7(react@19.2.7))(react@19.2.7) '@ant-design/pro-layout': specifier: ^7.22.7 - version: 7.22.7(antd@6.3.5(luxon@3.7.2)(moment@2.30.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 7.22.7(antd@6.3.5(luxon@3.7.2)(moment@2.30.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(react-dom@19.2.7(react@19.2.7))(react@19.2.7) '@apollo/client': specifier: ^3.13.9 - version: 3.14.0(@types/react@19.2.7)(graphql-ws@6.0.6(graphql@16.12.0)(ws@8.21.0))(graphql@16.12.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 3.14.1(@types/react@19.2.17)(graphql-ws@6.0.8(graphql@16.14.2)(ws@8.21.0))(graphql@16.14.2)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) '@cellix/ui-core': specifier: workspace:* version: link:../../cellix/ui-core '@dr.pogodin/react-helmet': specifier: ^3.0.2 - version: 3.0.4(react@19.2.0) + version: 3.2.2(react@19.2.7) '@graphql-typed-document-node/core': specifier: ^3.2.0 - version: 3.2.0(graphql@16.12.0) + version: 3.2.0(graphql@16.14.2) '@ocom/ui-community-shared': specifier: workspace:* version: link:../ui-community-shared @@ -2010,19 +2010,19 @@ importers: version: link:../ui-shared 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) + version: 6.3.5(luxon@3.7.2)(moment@2.30.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) dayjs: specifier: ^1.11.19 - version: 1.11.19 + version: 1.11.21 react: specifier: 'catalog:' - version: 19.2.0 + version: 19.2.7 react-dom: specifier: 'catalog:' - version: 19.2.0(react@19.2.0) + version: 19.2.7(react@19.2.7) react-router-dom: specifier: 'catalog:' - version: 7.15.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 7.15.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) devDependencies: '@cellix/archunit-tests': specifier: workspace:* @@ -2035,46 +2035,46 @@ importers: version: link:../../cellix/config-vitest '@chromatic-com/storybook': specifier: ^5.2.1 - version: 5.2.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)) + version: 5.2.1(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)) '@ocom-verification/archunit-tests': specifier: workspace:* version: link:../../ocom-verification/archunit-tests '@storybook/addon-a11y': specifier: 'catalog:' - 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)) + version: 10.4.4(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)) '@storybook/addon-docs': specifier: 'catalog:' - 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)) + version: 10.4.4(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(esbuild@0.28.1)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3))(webpack@5.107.2(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.3(@vitest/browser-playwright@4.1.8)(@vitest/browser@4.1.8(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3))(vitest@4.1.8))(@vitest/runner@4.1.8)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vitest@4.1.8) '@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) + version: 10.4.2(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(typescript@6.0.3) '@storybook/react-vite': specifier: 'catalog:' - version: 10.4.2(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(esbuild@0.28.1)(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)(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)) + version: 10.4.4(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(esbuild@0.28.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3))(webpack@5.107.2(esbuild@0.28.1)) '@types/react': specifier: ^19.1.11 - version: 19.2.7 + version: 19.2.17 '@types/react-dom': specifier: ^19.1.6 - version: 19.2.3(@types/react@19.2.7) + version: 19.2.3(@types/react@19.2.17) jsdom: specifier: 'catalog:' version: 26.1.0 storybook: specifier: 'catalog:' - version: 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) + version: 10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) typescript: specifier: 'catalog:' version: 6.0.3 vite: specifier: 8.0.16 - 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) + version: 8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(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)(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.8(@opentelemetry/api@1.9.0)(@types/node@25.9.2)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(jsdom@26.1.0)(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3)) packages/ocom/ui-community-route-root: dependencies: @@ -2083,16 +2083,16 @@ importers: version: link:../ui-community-shared 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) + version: 6.3.5(luxon@3.7.2)(moment@2.30.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) react: specifier: 'catalog:' - version: 19.2.0 + version: 19.2.7 react-dom: specifier: 'catalog:' - version: 19.2.0(react@19.2.0) + version: 19.2.7(react@19.2.7) react-oidc-context: specifier: ^3.3.0 - version: 3.3.0(oidc-client-ts@3.4.1)(react@19.2.0) + version: 3.3.1(oidc-client-ts@3.5.0)(react@19.2.7) devDependencies: '@cellix/archunit-tests': specifier: workspace:* @@ -2105,80 +2105,80 @@ importers: version: link:../../cellix/config-vitest '@chromatic-com/storybook': specifier: ^5.2.1 - version: 5.2.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)) + version: 5.2.1(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)) '@ocom-verification/archunit-tests': specifier: workspace:* version: link:../../ocom-verification/archunit-tests '@storybook/addon-a11y': specifier: 'catalog:' - 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)) + version: 10.4.4(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)) '@storybook/addon-docs': specifier: 'catalog:' - 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)) + version: 10.4.4(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(esbuild@0.28.1)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3))(webpack@5.107.2(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.3(@vitest/browser-playwright@4.1.8)(@vitest/browser@4.1.8(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3))(vitest@4.1.8))(@vitest/runner@4.1.8)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vitest@4.1.8) '@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) + specifier: 'catalog:' + version: 10.4.2(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(typescript@6.0.3) '@storybook/react-vite': specifier: 'catalog:' - version: 10.4.2(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(esbuild@0.28.1)(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)(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)) + version: 10.4.4(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(esbuild@0.28.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3))(webpack@5.107.2(esbuild@0.28.1)) '@types/react': specifier: ^19.1.11 - version: 19.2.7 + version: 19.2.17 '@types/react-dom': specifier: ^19.1.6 - version: 19.2.3(@types/react@19.2.7) + version: 19.2.3(@types/react@19.2.17) jsdom: specifier: 'catalog:' version: 26.1.0 storybook: specifier: 'catalog:' - version: 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) + version: 10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) typescript: specifier: 'catalog:' version: 6.0.3 vite: specifier: 8.0.16 - 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) + version: 8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(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)(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.8(@opentelemetry/api@1.9.0)(@types/node@25.9.2)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(jsdom@26.1.0)(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3)) packages/ocom/ui-community-shared: dependencies: '@apollo/client': specifier: ^3.13.9 - version: 3.14.0(@types/react@19.2.7)(graphql-ws@6.0.6(graphql@16.12.0)(ws@8.21.0))(graphql@16.12.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 3.14.1(@types/react@19.2.17)(graphql-ws@6.0.8(graphql@16.14.2)(ws@8.21.0))(graphql@16.14.2)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) '@cellix/ui-core': specifier: workspace:* version: link:../../cellix/ui-core '@graphql-typed-document-node/core': specifier: ^3.2.0 - version: 3.2.0(graphql@16.12.0) + version: 3.2.0(graphql@16.14.2) '@ocom/ui-shared': specifier: workspace:* version: link:../ui-shared 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) + version: 6.3.5(luxon@3.7.2)(moment@2.30.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) dayjs: specifier: ^1.11.19 - version: 1.11.19 + version: 1.11.21 react: specifier: 'catalog:' - version: 19.2.0 + version: 19.2.7 react-dom: specifier: 'catalog:' - version: 19.2.0(react@19.2.0) + version: 19.2.7(react@19.2.7) react-router-dom: specifier: 'catalog:' - version: 7.15.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 7.15.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) devDependencies: '@ant-design/icons': specifier: 'catalog:' - version: 6.1.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 6.2.5(react-dom@19.2.7(react@19.2.7))(react@19.2.7) '@cellix/config-typescript': specifier: workspace:* version: link:../../cellix/config-typescript @@ -2187,76 +2187,76 @@ importers: version: link:../../cellix/config-vitest '@chromatic-com/storybook': specifier: ^5.2.1 - version: 5.2.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)) + version: 5.2.1(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)) '@storybook/addon-a11y': specifier: 'catalog:' - 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)) + version: 10.4.4(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)) '@storybook/addon-docs': specifier: 'catalog:' - 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)) + version: 10.4.4(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(esbuild@0.28.1)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3))(webpack@5.107.2(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.3(@vitest/browser-playwright@4.1.8)(@vitest/browser@4.1.8(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3))(vitest@4.1.8))(@vitest/runner@4.1.8)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vitest@4.1.8) '@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) + specifier: 'catalog:' + version: 10.4.2(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(typescript@6.0.3) '@storybook/react-vite': specifier: 'catalog:' - version: 10.4.2(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(esbuild@0.28.1)(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)(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)) + version: 10.4.4(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(esbuild@0.28.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3))(webpack@5.107.2(esbuild@0.28.1)) '@types/react': specifier: ^19.1.11 - version: 19.2.7 + version: 19.2.17 '@types/react-dom': specifier: ^19.1.6 - version: 19.2.3(@types/react@19.2.7) + version: 19.2.3(@types/react@19.2.17) jsdom: specifier: 'catalog:' version: 26.1.0 storybook: specifier: 'catalog:' - version: 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) + version: 10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) typescript: specifier: 'catalog:' version: 6.0.3 vite: specifier: 8.0.16 - 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) + version: 8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(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)(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.8(@opentelemetry/api@1.9.0)(@types/node@25.9.2)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(jsdom@26.1.0)(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3)) packages/ocom/ui-shared: dependencies: '@ant-design/icons': specifier: 'catalog:' - version: 6.1.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 6.2.5(react-dom@19.2.7(react@19.2.7))(react@19.2.7) '@apollo/client': specifier: ^3.13.9 - version: 3.14.0(@types/react@19.2.7)(graphql-ws@6.0.6(graphql@16.12.0)(ws@8.21.0))(graphql@16.12.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 3.14.1(@types/react@19.2.17)(graphql-ws@6.0.8(graphql@16.14.2)(ws@8.21.0))(graphql@16.14.2)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) '@cellix/ui-core': specifier: workspace:* version: link:../../cellix/ui-core '@graphql-typed-document-node/core': specifier: ^3.2.0 - version: 3.2.0(graphql@16.12.0) + version: 3.2.0(graphql@16.14.2) 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) + version: 6.3.5(luxon@3.7.2)(moment@2.30.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) graphql: specifier: 'catalog:' - version: 16.12.0 + version: 16.14.2 react: specifier: 'catalog:' - version: 19.2.0 + version: 19.2.7 react-dom: specifier: 'catalog:' - version: 19.2.0(react@19.2.0) + version: 19.2.7(react@19.2.7) react-oidc-context: specifier: ^3.3.0 - version: 3.3.0(oidc-client-ts@3.4.1)(react@19.2.0) + version: 3.3.1(oidc-client-ts@3.5.0)(react@19.2.7) react-router-dom: specifier: 'catalog:' - version: 7.15.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 7.15.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) devDependencies: '@cellix/archunit-tests': specifier: workspace:* @@ -2269,34 +2269,34 @@ importers: version: link:../../cellix/config-vitest '@chromatic-com/storybook': specifier: ^5.2.1 - version: 5.2.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)) + version: 5.2.1(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)) '@ocom-verification/archunit-tests': specifier: workspace:* version: link:../../ocom-verification/archunit-tests '@storybook/addon-a11y': specifier: 'catalog:' - 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)) + version: 10.4.4(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)) '@storybook/addon-docs': specifier: 'catalog:' - 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)) + version: 10.4.4(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(esbuild@0.28.1)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3))(webpack@5.107.2(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.3(@vitest/browser-playwright@4.1.8)(@vitest/browser@4.1.8(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3))(vitest@4.1.8))(@vitest/runner@4.1.8)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vitest@4.1.8) '@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) + specifier: 'catalog:' + version: 10.4.2(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(typescript@6.0.3) '@storybook/react-vite': specifier: 'catalog:' - version: 10.4.2(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(esbuild@0.28.1)(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)(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)) + version: 10.4.4(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(esbuild@0.28.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3))(webpack@5.107.2(esbuild@0.28.1)) '@types/react': specifier: ^19.1.11 - version: 19.2.7 + version: 19.2.17 '@types/react-dom': specifier: ^19.1.6 - version: 19.2.3(@types/react@19.2.7) + version: 19.2.3(@types/react@19.2.17) '@vitest/browser': specifier: 'catalog:' - 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) + version: 4.1.8(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3))(vitest@4.1.8) '@vitest/coverage-istanbul': specifier: 'catalog:' version: 4.1.8(vitest@4.1.8) @@ -2308,37 +2308,37 @@ importers: version: 6.0.1 storybook: specifier: 'catalog:' - version: 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) + version: 10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) storybook-addon-apollo-client: specifier: ^9.0.0 - version: 9.0.0(@apollo/client@3.14.0(@types/react@19.2.7)(graphql-ws@6.0.6(graphql@16.12.0)(ws@8.21.0))(graphql@16.12.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(graphql@16.12.0)(react@19.2.0) + version: 9.0.0(@apollo/client@3.14.1(@types/react@19.2.17)(graphql-ws@6.0.8(graphql@16.14.2)(ws@8.21.0))(graphql@16.14.2)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(graphql@16.14.2)(react@19.2.7) typescript: specifier: 'catalog:' version: 6.0.3 vite: specifier: 8.0.16 - 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) + version: 8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(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)(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.8(@opentelemetry/api@1.9.0)(@types/node@25.9.2)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(jsdom@26.1.0)(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3)) packages/ocom/ui-staff-route-community-management: dependencies: '@ant-design/icons': specifier: 'catalog:' - version: 6.1.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 6.2.5(react-dom@19.2.7(react@19.2.7))(react@19.2.7) '@ocom/ui-staff-shared': specifier: workspace:* version: link:../ui-staff-shared react: specifier: 'catalog:' - version: 19.2.0 + version: 19.2.7 react-dom: specifier: 'catalog:' - version: 19.2.0(react@19.2.0) + version: 19.2.7(react@19.2.7) react-router-dom: specifier: 'catalog:' - version: 7.15.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 7.15.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) devDependencies: '@cellix/config-typescript': specifier: workspace:* @@ -2348,10 +2348,10 @@ importers: version: link:../../cellix/config-vitest '@types/react': specifier: ^19.1.11 - version: 19.2.7 + version: 19.2.17 '@types/react-dom': specifier: ^19.1.6 - version: 19.2.3(@types/react@19.2.7) + version: 19.2.3(@types/react@19.2.17) jsdom: specifier: 'catalog:' version: 26.1.0 @@ -2360,28 +2360,28 @@ importers: version: 6.0.3 vite: specifier: 8.0.16 - 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) + version: 8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(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)(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.8(@opentelemetry/api@1.9.0)(@types/node@25.9.2)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(jsdom@26.1.0)(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3)) packages/ocom/ui-staff-route-finance: dependencies: '@ant-design/icons': specifier: 'catalog:' - version: 6.1.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 6.2.5(react-dom@19.2.7(react@19.2.7))(react@19.2.7) '@ocom/ui-staff-shared': specifier: workspace:* version: link:../ui-staff-shared react: specifier: 'catalog:' - version: 19.2.0 + version: 19.2.7 react-dom: specifier: 'catalog:' - version: 19.2.0(react@19.2.0) + version: 19.2.7(react@19.2.7) react-router-dom: specifier: 'catalog:' - version: 7.15.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 7.15.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) devDependencies: '@cellix/config-typescript': specifier: workspace:* @@ -2391,10 +2391,10 @@ importers: version: link:../../cellix/config-vitest '@types/react': specifier: ^19.1.11 - version: 19.2.7 + version: 19.2.17 '@types/react-dom': specifier: ^19.1.6 - version: 19.2.3(@types/react@19.2.7) + version: 19.2.3(@types/react@19.2.17) jsdom: specifier: 'catalog:' version: 26.1.0 @@ -2403,10 +2403,10 @@ importers: version: 6.0.3 vite: specifier: 8.0.16 - 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) + version: 8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(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)(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.8(@opentelemetry/api@1.9.0)(@types/node@25.9.2)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(jsdom@26.1.0)(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3)) packages/ocom/ui-staff-route-root: dependencies: @@ -2415,16 +2415,16 @@ importers: version: link:../ui-staff-shared 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) + version: 6.3.5(luxon@3.7.2)(moment@2.30.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) react: specifier: 'catalog:' - version: 19.2.0 + version: 19.2.7 react-dom: specifier: 'catalog:' - version: 19.2.0(react@19.2.0) + version: 19.2.7(react@19.2.7) react-oidc-context: specifier: ^3.3.0 - version: 3.3.0(oidc-client-ts@3.4.1)(react@19.2.0) + version: 3.3.1(oidc-client-ts@3.5.0)(react@19.2.7) devDependencies: '@cellix/config-typescript': specifier: workspace:* @@ -2434,10 +2434,10 @@ importers: version: link:../../cellix/config-vitest '@types/react': specifier: ^19.1.11 - version: 19.2.7 + version: 19.2.17 '@types/react-dom': specifier: ^19.1.6 - version: 19.2.3(@types/react@19.2.7) + version: 19.2.3(@types/react@19.2.17) jsdom: specifier: 'catalog:' version: 26.1.0 @@ -2446,28 +2446,28 @@ importers: version: 6.0.3 vite: specifier: 8.0.16 - 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) + version: 8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(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)(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.8(@opentelemetry/api@1.9.0)(@types/node@25.9.2)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(jsdom@26.1.0)(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3)) packages/ocom/ui-staff-route-tech-admin: dependencies: '@ant-design/icons': specifier: 'catalog:' - version: 6.1.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 6.2.5(react-dom@19.2.7(react@19.2.7))(react@19.2.7) '@ocom/ui-staff-shared': specifier: workspace:* version: link:../ui-staff-shared react: specifier: 'catalog:' - version: 19.2.0 + version: 19.2.7 react-dom: specifier: 'catalog:' - version: 19.2.0(react@19.2.0) + version: 19.2.7(react@19.2.7) react-router-dom: specifier: 'catalog:' - version: 7.15.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 7.15.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) devDependencies: '@cellix/config-typescript': specifier: workspace:* @@ -2477,10 +2477,10 @@ importers: version: link:../../cellix/config-vitest '@types/react': specifier: ^19.1.11 - version: 19.2.7 + version: 19.2.17 '@types/react-dom': specifier: ^19.1.6 - version: 19.2.3(@types/react@19.2.7) + version: 19.2.3(@types/react@19.2.17) jsdom: specifier: 'catalog:' version: 26.1.0 @@ -2489,31 +2489,37 @@ importers: version: 6.0.3 vite: specifier: 8.0.16 - 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) + version: 8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(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)(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.8(@opentelemetry/api@1.9.0)(@types/node@25.9.2)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(jsdom@26.1.0)(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3)) packages/ocom/ui-staff-route-user-management: dependencies: '@ant-design/icons': specifier: 'catalog:' - version: 6.1.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 6.2.5(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@apollo/client': + specifier: ^3.13.9 + version: 3.14.1(@types/react@19.2.17)(graphql-ws@6.0.8(graphql@16.14.2)(ws@8.21.0))(graphql@16.14.2)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) '@graphql-typed-document-node/core': specifier: ^3.2.0 - version: 3.2.0(graphql@16.12.0) + version: 3.2.0(graphql@16.14.2) '@ocom/ui-staff-shared': specifier: workspace:* version: link:../ui-staff-shared + antd: + specifier: 'catalog:' + version: 6.3.5(luxon@3.7.2)(moment@2.30.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) react: specifier: 'catalog:' - version: 19.2.0 + version: 19.2.7 react-dom: specifier: 'catalog:' - version: 19.2.0(react@19.2.0) + version: 19.2.7(react@19.2.7) react-router-dom: specifier: 'catalog:' - version: 7.15.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 7.15.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) devDependencies: '@cellix/config-typescript': specifier: workspace:* @@ -2521,54 +2527,75 @@ importers: '@cellix/config-vitest': specifier: workspace:* version: link:../../cellix/config-vitest + '@chromatic-com/storybook': + specifier: ^5.2.1 + version: 5.2.1(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)) + '@storybook/addon-a11y': + specifier: 'catalog:' + version: 10.4.4(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)) + '@storybook/addon-docs': + specifier: 'catalog:' + version: 10.4.4(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(esbuild@0.28.1)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3))(webpack@5.107.2(esbuild@0.28.1)) + '@storybook/addon-vitest': + specifier: 'catalog:' + version: 10.4.3(@vitest/browser-playwright@4.1.8)(@vitest/browser@4.1.8(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3))(vitest@4.1.8))(@vitest/runner@4.1.8)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vitest@4.1.8) + '@storybook/react': + specifier: 'catalog:' + version: 10.4.2(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(typescript@6.0.3) + '@storybook/react-vite': + specifier: 'catalog:' + version: 10.4.4(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(esbuild@0.28.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3))(webpack@5.107.2(esbuild@0.28.1)) '@types/react': specifier: ^19.1.11 - version: 19.2.7 + version: 19.2.17 '@types/react-dom': specifier: ^19.1.6 - version: 19.2.3(@types/react@19.2.7) + version: 19.2.3(@types/react@19.2.17) jsdom: specifier: 'catalog:' version: 26.1.0 + storybook: + specifier: 'catalog:' + version: 10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) typescript: specifier: 'catalog:' version: 6.0.3 vite: specifier: 8.0.16 - 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) + version: 8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(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)(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.8(@opentelemetry/api@1.9.0)(@types/node@25.9.2)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(jsdom@26.1.0)(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3)) packages/ocom/ui-staff-shared: dependencies: '@ant-design/icons': specifier: 'catalog:' - version: 6.1.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 6.2.5(react-dom@19.2.7(react@19.2.7))(react@19.2.7) '@apollo/client': specifier: ^3.13.9 - version: 3.14.0(@types/react@19.2.7)(graphql-ws@6.0.6(graphql@16.12.0)(ws@8.21.0))(graphql@16.12.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 3.14.1(@types/react@19.2.17)(graphql-ws@6.0.8(graphql@16.14.2)(ws@8.21.0))(graphql@16.14.2)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) '@cellix/ui-core': specifier: workspace:* version: link:../../cellix/ui-core '@graphql-typed-document-node/core': specifier: ^3.2.0 - version: 3.2.0(graphql@16.12.0) + version: 3.2.0(graphql@16.14.2) '@ocom/ui-shared': specifier: workspace:* version: link:../ui-shared 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) + version: 6.3.5(luxon@3.7.2)(moment@2.30.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) react: specifier: 'catalog:' - version: 19.2.0 + version: 19.2.7 react-dom: specifier: 'catalog:' - version: 19.2.0(react@19.2.0) + version: 19.2.7(react@19.2.7) react-router-dom: specifier: 'catalog:' - version: 7.15.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 7.15.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) devDependencies: '@cellix/config-typescript': specifier: workspace:* @@ -2577,132 +2604,120 @@ importers: specifier: workspace:* version: link:../../cellix/config-vitest '@storybook/react': - specifier: ^9.1.9 - version: 9.1.16(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) + specifier: 'catalog:' + version: 10.4.2(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(typescript@6.0.3) '@types/react': specifier: ^19.1.11 - version: 19.2.7 + version: 19.2.17 '@types/react-dom': specifier: ^19.1.6 - version: 19.2.3(@types/react@19.2.7) + version: 19.2.3(@types/react@19.2.17) jsdom: specifier: 'catalog:' version: 26.1.0 storybook: specifier: 'catalog:' - version: 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) + version: 10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) typescript: specifier: 'catalog:' version: 6.0.3 vite: specifier: 8.0.16 - 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) + version: 8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(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)(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.8(@opentelemetry/api@1.9.0)(@types/node@25.9.2)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(jsdom@26.1.0)(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3)) packages: - '@adobe/css-tools@4.4.4': - resolution: {integrity: sha512-Elp+iwUx5rN5+Y8xLt5/GRoG20WGoDCQ/1Fb+1LiGtvwbDavuSk0jhD/eZdckHAuzcDzccnkv+rEjyWfRx18gg==} - - '@ai-sdk/gateway@2.0.17': - resolution: {integrity: sha512-oVAG6q72KsjKlrYdLhWjRO7rcqAR8CjokAbYuyVZoCO4Uh2PH/VzZoxZav71w2ipwlXhHCNaInGYWNs889MMDA==} - engines: {node: '>=18'} - peerDependencies: - zod: ^3.25.76 || ^4.1.8 - - '@ai-sdk/provider-utils@3.0.18': - resolution: {integrity: sha512-ypv1xXMsgGcNKUP+hglKqtdDuMg68nWHucPPAhIENrbFAI+xCHiqPVN8Zllxyv1TNZwGWUghPxJXU+Mqps0YRQ==} - engines: {node: '>=18'} - peerDependencies: - zod: ^3.25.76 || ^4.1.8 - - '@ai-sdk/provider@2.0.0': - resolution: {integrity: sha512-6o7Y2SeO9vFKB8lArHXehNuusnpddKPk7xqL7T2/b+OvXMRIXUO1rR4wcv1hAFUAT9avGZshty3Wlua/XA7TvA==} - engines: {node: '>=18'} - - '@ai-sdk/react@2.0.105': - resolution: {integrity: sha512-d/nr3fuAsgLli7g9CcShqME+QdTN3S6vbtyL9ZT8iAWfR0xBKYuNrzX3a89vY49lnbdgAqB65l67hsVNCsmVIg==} - engines: {node: '>=18'} - peerDependencies: - react: ^18 || ^19 || ^19.0.0-rc - zod: ^3.25.76 || ^4.1.8 - peerDependenciesMeta: - zod: - optional: true + '@adobe/css-tools@4.5.0': + resolution: {integrity: sha512-6OzddxPio9UiWTCemp4N8cYLV2ZN1ncRnV1cVGtve7dhPOtRkleRyx32GQCYSwDYgaHU3USMm84tNsvKzRCa1Q==} - '@algolia/abtesting@1.11.0': - resolution: {integrity: sha512-a7oQ8dwiyoyVmzLY0FcuBqyqcNSq78qlcOtHmNBumRlHCSnXDcuoYGBGPN1F6n8JoGhviDDsIaF/oQrzTzs6Lg==} + '@algolia/abtesting@1.19.0': + resolution: {integrity: sha512-Lhnez3hhXHk25lfxLAMxvkP4fmN3+1RgADhD2ssMDBYuAsDVReeyP+3SGRx+ntq8ijMrLqUyfvO72TB6jsTteQ==} engines: {node: '>= 14.0.0'} '@algolia/autocomplete-core@1.19.2': resolution: {integrity: sha512-mKv7RyuAzXvwmq+0XRK8HqZXt9iZ5Kkm2huLjgn5JoCPtDy+oh9yxUMfDDaVCw0oyzZ1isdJBc7l9nuCyyR7Nw==} + '@algolia/autocomplete-core@1.19.8': + resolution: {integrity: sha512-3YEorYg44niXcm7gkft3nXYItHd44e8tmh4D33CTszPgP0QWkaLEaFywiNyJBo7UL/mqObA/G9RYuU7R8tN1IA==} + '@algolia/autocomplete-plugin-algolia-insights@1.19.2': resolution: {integrity: sha512-TjxbcC/r4vwmnZaPwrHtkXNeqvlpdyR+oR9Wi2XyfORkiGkLTVhX2j+O9SaCCINbKoDfc+c2PB8NjfOnz7+oKg==} peerDependencies: search-insights: '>= 1 < 3' + '@algolia/autocomplete-plugin-algolia-insights@1.19.8': + resolution: {integrity: sha512-ZvJWO8ZZJDpc1LNM2TTBdmQsZBLMR4rU5iNR2OYvEeFBiaf/0ESnRSSLQbryarJY4SVxtoz6A2ZtDMNM+iQEAA==} + peerDependencies: + search-insights: '>= 1 < 3' + '@algolia/autocomplete-shared@1.19.2': resolution: {integrity: sha512-jEazxZTVD2nLrC+wYlVHQgpBoBB5KPStrJxLzsIFl6Kqd1AlG9sIAGl39V5tECLpIQzB3Qa2T6ZPJ1ChkwMK/w==} peerDependencies: '@algolia/client-search': '>= 4.9.1 < 6' algoliasearch: '>= 4.9.1 < 6' - '@algolia/client-abtesting@5.45.0': - resolution: {integrity: sha512-WTW0VZA8xHMbzuQD5b3f41ovKZ0MNTIXkWfm0F2PU+XGcLxmxX15UqODzF2sWab0vSbi3URM1xLhJx+bXbd1eQ==} + '@algolia/autocomplete-shared@1.19.8': + resolution: {integrity: sha512-h5hf2t8ejF6vlOgvLaZzQbWs5SyH2z4PAWygNAvvD/2RI29hdQ54ldUGwqVuj9Srs+n8XUKTPUqb7fvhBhQrnQ==} + peerDependencies: + '@algolia/client-search': '>= 4.9.1 < 6' + algoliasearch: '>= 4.9.1 < 6' + + '@algolia/client-abtesting@5.53.0': + resolution: {integrity: sha512-0ZjA5Hcmaoz5Lj6OG0zhfIyeqzJZnLW2CRJA1W17UwMFGRtZAJ9yJKRvPEDA6gkpsIoQxORTSW6sWFiuYncPNQ==} engines: {node: '>= 14.0.0'} - '@algolia/client-analytics@5.45.0': - resolution: {integrity: sha512-I3g7VtvG/QJOH3tQO7E7zWTwBfK/nIQXShFLR8RvPgWburZ626JNj332M3wHCYcaAMivN9WJG66S2JNXhm6+Xg==} + '@algolia/client-analytics@5.53.0': + resolution: {integrity: sha512-kWNodP75iiEaOtemC9F/hlxNBG5E2QUjN1BusnE6m2b4l7Qh/BUO3fGCVsmKJI65VO4VKGGmT43ICvHtTcJ2JQ==} engines: {node: '>= 14.0.0'} - '@algolia/client-common@5.45.0': - resolution: {integrity: sha512-/nTqm1tLiPtbUr+8kHKyFiCOfhRfgC+JxLvOCq471gFZZOlsh6VtFRiKI60/zGmHTojFC6B0mD80PB7KeK94og==} + '@algolia/client-common@5.53.0': + resolution: {integrity: sha512-YPN45TXD9Wrse185t/Ta7nktZsqpv97oOjCzp2sblHnCL6rBc9TDeJAg1IGl2UpdwnSD05Zu/5wLB4watOUMyg==} engines: {node: '>= 14.0.0'} - '@algolia/client-insights@5.45.0': - resolution: {integrity: sha512-suQTx/1bRL1g/K2hRtbK3ANmbzaZCi13487sxxmqok+alBDKKw0/TI73ZiHjjFXM2NV52inwwcmW4fUR45206Q==} + '@algolia/client-insights@5.53.0': + resolution: {integrity: sha512-qAcYTDJE6m924FDDUQvdD6vh7DYaqOeSpFS74IP37/JRV0v4cGBauyxTF2WzDnokUylQDbqreoFIJZfg0Fitmw==} engines: {node: '>= 14.0.0'} - '@algolia/client-personalization@5.45.0': - resolution: {integrity: sha512-CId/dbjpzI3eoUhPU6rt/z4GrRsDesqFISEMOwrqWNSrf4FJhiUIzN42Ac+Gzg69uC0RnzRYy60K1y4Na5VSMw==} + '@algolia/client-personalization@5.53.0': + resolution: {integrity: sha512-fQaY+DkSJOpuUVUe8MQTwrdiKAqkJGhpDarB08duBn/sUv7Bkib6MDRQauCcWTWTe4HIW+EbwQP9R4kci1V/Yw==} engines: {node: '>= 14.0.0'} - '@algolia/client-query-suggestions@5.45.0': - resolution: {integrity: sha512-tjbBKfA8fjAiFtvl9g/MpIPiD6pf3fj7rirVfh1eMIUi8ybHP4ovDzIaE216vHuRXoePQVCkMd2CokKvYq1CLw==} + '@algolia/client-query-suggestions@5.53.0': + resolution: {integrity: sha512-o72tsiEZGfeS/dxL9IADfzcZWGEwKDEe5CvtrBuT//3JR+SHuTtHRI2ZTf7D7bcKagcbojvO8hnkHdfoakSlYg==} engines: {node: '>= 14.0.0'} - '@algolia/client-search@5.45.0': - resolution: {integrity: sha512-nxuCid+Nszs4xqwIMDw11pRJPes2c+Th1yup/+LtpjFH8QWXkr3SirNYSD3OXAeM060HgWWPLA8/Fxk+vwxQOA==} + '@algolia/client-search@5.53.0': + resolution: {integrity: sha512-Ds16IyPm/dNJPCU8OzApo2gwGrgWT5BYHhE3NFwZbpCveqyvPDB9sZDDkJ5DsdOGT2aC+R3i0/M1OVXF2qdgPg==} engines: {node: '>= 14.0.0'} '@algolia/events@4.0.1': resolution: {integrity: sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==} - '@algolia/ingestion@1.45.0': - resolution: {integrity: sha512-t+1doBzhkQTeOOjLHMlm4slmXBhvgtEGQhOmNpMPTnIgWOyZyESWdm+XD984qM4Ej1i9FRh8VttOGrdGnAjAng==} + '@algolia/ingestion@1.53.0': + resolution: {integrity: sha512-oNbT6z4NwD8Pou9VPINGlN/tlG1afESh2EbxqnP6rwl95xKVD/Zlciis1PpNeO/9U/rrajc1+7DcfKi03tX1KQ==} engines: {node: '>= 14.0.0'} - '@algolia/monitoring@1.45.0': - resolution: {integrity: sha512-IaX3ZX1A/0wlgWZue+1BNWlq5xtJgsRo7uUk/aSiYD7lPbJ7dFuZ+yTLFLKgbl4O0QcyHTj1/mSBj9ryF1Lizg==} + '@algolia/monitoring@1.53.0': + resolution: {integrity: sha512-G+KZb/yd+qAOFn/cEvTGeLxQm8aP3a0od50l3z/ylccY+/o4YG3TNcjU1tFQHW4mXC137GPyR7W70R0kRQDLnA==} engines: {node: '>= 14.0.0'} - '@algolia/recommend@5.45.0': - resolution: {integrity: sha512-1jeMLoOhkgezCCPsOqkScwYzAAc1Jr5T2hisZl0s32D94ZV7d1OHozBukgOjf8Dw+6Hgi6j52jlAdUWTtkX9Mg==} + '@algolia/recommend@5.53.0': + resolution: {integrity: sha512-6aVfYd55Un6IUgPLbo84WfgFZlS3L0vA1ttzXL5vahHewUJ8jYgd89TzlWRTeej7w70mb9RWsVlFYGmJ/diQww==} engines: {node: '>= 14.0.0'} - '@algolia/requester-browser-xhr@5.45.0': - resolution: {integrity: sha512-46FIoUkQ9N7wq4/YkHS5/W9Yjm4Ab+q5kfbahdyMpkBPJ7IBlwuNEGnWUZIQ6JfUZuJVojRujPRHMihX4awUMg==} + '@algolia/requester-browser-xhr@5.53.0': + resolution: {integrity: sha512-ke27DqgzCOlt+RbeEdCxtXxMQOnAOi8ujr2wid0DmDKzR95Kw/f9sBsuhBxtjevCqJRJszfRTLY0B1pbO6IhkA==} engines: {node: '>= 14.0.0'} - '@algolia/requester-fetch@5.45.0': - resolution: {integrity: sha512-XFTSAtCwy4HdBhSReN2rhSyH/nZOM3q3qe5ERG2FLbYId62heIlJBGVyAPRbltRwNlotlydbvSJ+SQ0ruWC2cw==} + '@algolia/requester-fetch@5.53.0': + resolution: {integrity: sha512-GngiOqt2Gq4oLno6yXQVj9om+qSO9SWAoduoTOEg79dKZ62brB8OOIvSJG/vDNoanYi6a7Al9uDZwXvi+bcVTg==} engines: {node: '>= 14.0.0'} - '@algolia/requester-node-http@5.45.0': - resolution: {integrity: sha512-8mTg6lHx5i44raCU52APsu0EqMsdm4+7Hch/e4ZsYZw0hzwkuaMFh826ngnkYf9XOl58nHoou63aZ874m8AbpQ==} + '@algolia/requester-node-http@5.53.0': + resolution: {integrity: sha512-6mF9LZMUk0QqWvrnxkxBqhswwz6Xfiwy6/gmTzL5HrlhdVG3ITAqGV2k3XmVThP1h0Ulc3VQwiNCD7/Nr4JNlQ==} engines: {node: '>= 14.0.0'} '@alloc/quick-lru@5.2.0': @@ -2715,9 +2730,9 @@ packages: peerDependencies: vitest: ^4.0.4 - '@ant-design/cli@6.3.5': - resolution: {integrity: sha512-d4goa6b9910ovOS46G1qcm2DAV10QcZf37Ady1tiHU5Exc0ZGD88k75FDadDDwEzks87S0k3NCXHQXmlSXoRDA==} - engines: {node: '>=18.0.0'} + '@ant-design/cli@6.4.3': + resolution: {integrity: sha512-/fYCNzEwztc8CwyT6Ufovj3SXsQ4jjYbxa7mdazkHrzdL2xpHmQwBdmzO90LZNmHGq2J+lRuz2DR7lcjKeuRkQ==} + engines: {node: '>=20.0.0'} hasBin: true '@ant-design/colors@7.2.1': @@ -2762,8 +2777,8 @@ packages: react: '>=16.0.0' react-dom: '>=16.0.0' - '@ant-design/icons@6.1.1': - resolution: {integrity: sha512-AMT4N2y++TZETNHiM77fs4a0uPVCJGuL5MTonk13Pvv7UN7sID1cNEZOc1qNqx6zLKAOilTEFAdAoAFKa0U//Q==} + '@ant-design/icons@6.2.5': + resolution: {integrity: sha512-0hKtoKqTjGFOndUyJLJmC9Cg6k4rEO7rLo6xmgbNJH+/ZX1C57RVals2v1j1knHl9n7Q+sBOveTvn931wLOCKw==} engines: {node: '>=8'} peerDependencies: react: '>=16.0.0' @@ -2801,8 +2816,8 @@ packages: peerDependencies: graphql: 14.x || 15.x || 16.x - '@apollo/client@3.14.0': - resolution: {integrity: sha512-0YQKKRIxiMlIou+SekQqdCo0ZTHxOcES+K8vKB53cIDpwABNR0P0yRzPgsbgcj3zRJniD93S/ontsnZsCLZrxQ==} + '@apollo/client@3.14.1': + resolution: {integrity: sha512-SgGX6E23JsZhUdG2anxiyHvEvvN6CUaI4ZfMsndZFeuHPXL3H0IsaiNAhLITSISbeyeYd+CBd9oERXQDdjXWZw==} peerDependencies: graphql: ^15.0.0 || ^16.0.0 graphql-ws: ^5.5.5 || ^6.0.3 @@ -2819,8 +2834,8 @@ packages: subscriptions-transport-ws: optional: true - '@apollo/protobufjs@1.2.7': - resolution: {integrity: sha512-Lahx5zntHPZia35myYDBRuF58tlwPskwHc5CWBZC/4bMKB6siTBWwtMrkqXcsNwQiFSzSx5hKdRPUmemrEp3Gg==} + '@apollo/protobufjs@1.2.8': + resolution: {integrity: sha512-r7xNeUqZX+eBBEmyvaPw0/cSz6zgf5jdH8mjUz8ynKpNs/GU7vi2T7sNcZINk2ZID7wwjG91FCgdpCrQuJ8rzA==} hasBin: true '@apollo/server-gateway-interface@2.0.0': @@ -2834,8 +2849,8 @@ packages: peerDependencies: graphql: ^16.11.0 - '@apollo/usage-reporting-protobuf@4.1.1': - resolution: {integrity: sha512-u40dIUePHaSKVshcedO7Wp+mPiZsaU6xjv9J+VyxpoU/zL6Jle+9zWeG98tr/+SZ0nZ4OXhrbb8SNr0rAPpIDA==} + '@apollo/usage-reporting-protobuf@4.1.2': + resolution: {integrity: sha512-aTnAD41RYz0d5dawlyR5Iclkgzx0Xb0njUJmEfvZ6pS4f4HU8wCYyctPpWat/HWp2PmRwDfX5R1k4uVcDKZ4xA==} '@apollo/utils.createhash@3.0.1': resolution: {integrity: sha512-CKrlySj4eQYftBE5MJ8IzKwIibQnftDT7yGfsJy5KSEEnLlPASX0UTpbKqkjlVEwPPd4mEwI7WOM7XNxEuO05A==} @@ -2897,17 +2912,16 @@ packages: resolution: {integrity: sha512-aaxeavfJ+RHboh7c2ofO5HHtQobGX4AgUujXP4CXpREHp9fQ9jPi6K9T1jrAKe7HIipoP0OJ1gd6JamSkFIpvA==} engines: {node: '>=16'} - '@ardatan/relay-compiler@12.0.3': - resolution: {integrity: sha512-mBDFOGvAoVlWaWqs3hm1AciGHSQE1rqFc/liZTyYz/Oek9yZdT5H26pH2zAFuEiTiBVPPyMuqf5VjOFPI2DGsQ==} - hasBin: true + '@ardatan/relay-compiler@13.0.1': + resolution: {integrity: sha512-afG3YPwuSA0E5foouZusz5GlXKs74dObv4cuWyLyfKsYFj2r7oGRNB28v18HvwuLSQtQFCi+DpIe0TZkgQDYyg==} peerDependencies: graphql: '*' '@asamuzakjp/css-color@3.2.0': resolution: {integrity: sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==} - '@azure-rest/core-client@2.5.1': - resolution: {integrity: sha512-EHaOXW0RYDKS5CFffnixdyRPak5ytiCtU7uXDcP/uiY+A6jFRwNGzzJBiznkCzvi5EYpY+YWinieqHb0oY916A==} + '@azure-rest/core-client@2.6.1': + resolution: {integrity: sha512-KzI10qnkWTsVS2yRBUdc8NLUJ1rOm+292mYs7Pe9wqAj/jv4bRskVm1l8XkKeVTN0OCQtrU5RG0Yhjbz1Wmg7g==} engines: {node: '>=20.0.0'} '@azure/abort-controller@1.1.0': @@ -2926,13 +2940,16 @@ packages: resolution: {integrity: sha512-Igm/S3fDYmnMq1uKS38Ae1/m37B3zigdlZw+kocwEhh5GjyKjPrXKO2J6rzpC1wAxrNil/jX9BJRqBshyjnF3g==} engines: {node: '>=18.0.0'} - '@azure/core-client@1.10.1': - resolution: {integrity: sha512-Nh5PhEOeY6PrnxNPsEHRr9eimxLwgLlpmguQaHKBinFYA/RU9+kOYVOQqOrTsCL+KSxrLLl1gD8Dk5BFW/7l/w==} + '@azure/core-client@1.10.2': + resolution: {integrity: sha512-1D2LpsU7y9xrqKjdIbsB7PlrRePw0xsVV8p+AKTlzITrWmscajryfJCdDJB/oGwvDI5HmRo04eMMADB67uwAwQ==} engines: {node: '>=20.0.0'} - '@azure/core-http-compat@2.3.1': - resolution: {integrity: sha512-az9BkXND3/d5VgdRRQVkiJb2gOmDU8Qcq4GvjtBmDICNiQ9udFmDk4ZpSB5Qq1OmtDJGlQAfBaS4palFsazQ5g==} + '@azure/core-http-compat@2.4.0': + resolution: {integrity: sha512-f1P96IB399YiN2ARYHP7EpZi3Bf3wH4SN2lGzrw7JVwm7bbsVYtf2iKSBwTywD2P62NOPZGHFSZi+6jjb75JuA==} engines: {node: '>=20.0.0'} + peerDependencies: + '@azure/core-client': ^1.10.0 + '@azure/core-rest-pipeline': ^1.22.0 '@azure/core-lro@2.7.2': resolution: {integrity: sha512-0YIpccoX8m/k00O7mDDMdJpbr6mf1yWo2dfmxt5A8XVZVVMz2SSKaEbMCeJRvgQ0IaSlqhjT47p4hVIRRy90xw==} @@ -2946,8 +2963,8 @@ packages: resolution: {integrity: sha512-VxLk4AHLyqcHsfKe4MZ6IQ+D+ShuByy+RfStKfSjxJoL3WBWq17VNmrz8aT8etKzqc2nAeIyLxScjpzsS4fz8w==} engines: {node: '>=18.0.0'} - '@azure/core-rest-pipeline@1.22.2': - resolution: {integrity: sha512-MzHym+wOi8CLUlKCQu12de0nwcq9k9Kuv43j4Wa++CsCpJwps2eeBQwD2Bu8snkxTtDKDx4GwjuR9E8yC8LNrg==} + '@azure/core-rest-pipeline@1.24.0': + resolution: {integrity: sha512-PpLsoDQ3AMmKZ0VU+0GrmqMxgp/sExjlVm4R+nLWngeoEGAzOIPVifaxKGU5gMv+nWELUoHfvrolWD+ZS/nFJg==} engines: {node: '>=20.0.0'} '@azure/core-tracing@1.3.1': @@ -2984,13 +3001,13 @@ packages: resolution: {integrity: sha512-U8hsyC9YPcEIzoaObJlRDvp7KiF0MGS7xcWbyJSVvXRkC/HXo1f0oYeBYmEvVgRfacw7GHf6D6yAoh9JHz6A5Q==} engines: {node: '>=18.0.0'} - '@azure/keyvault-common@2.0.0': - resolution: {integrity: sha512-wRLVaroQtOqfg60cxkzUkGKrKMsCP6uYXAOomOIysSMyt1/YM0eUn9LqieAWM8DLcU4+07Fio2YGpPeqUbpP9w==} - engines: {node: '>=18.0.0'} + '@azure/keyvault-common@2.1.0': + resolution: {integrity: sha512-aCDidWuKY06LWQ4x7/8TIXK6iRqTaRWRL3t7T+LC+j1b07HtoIsOxP/tU90G4jCSBn5TAyUTCtA4MS/y5Hudaw==} + engines: {node: '>=20.0.0'} - '@azure/keyvault-keys@4.10.0': - resolution: {integrity: sha512-eDT7iXoBTRZ2n3fLiftuGJFD+yjkiB1GNqzU2KbY1TLYeXeSPVTVgn2eJ5vmRTZ11978jy2Kg2wI7xa9Tyr8ag==} - engines: {node: '>=18.0.0'} + '@azure/keyvault-keys@4.10.2': + resolution: {integrity: sha512-VmUSLbXRAbSzDD8grXHGPaknYs0SKr3yuf6U+d4XMpX4XuVYskNqbTTwXce0zR1LyxfTZm9rWEBcvs3vdYwCmQ==} + engines: {node: '>=20.0.0'} '@azure/logger@1.3.0': resolution: {integrity: sha512-fCqPIfOcLE+CGqGPd66c8bZpwAji98tZ4JI9i/mlTNTlsIWslCfpg48s/ypyLxZTump5sypjrKn2/kY7q8oAbA==} @@ -3002,202 +3019,184 @@ packages: '@azure/ms-rest-js@1.11.2': resolution: {integrity: sha512-2AyQ1IKmLGKW7DU3/x3TsTBzZLcbC9YRI+yuDPuXAQrv3zar340K9wsxU413kHFIDjkWNCo9T0w5VtwcyWxhbQ==} + deprecated: This package has been deprecated in favor of the new Azure SDK packages from [Azure SDK for JavaScript](https://github.com/azure/azure-sdk-for-js). '@azure/msal-browser@3.30.0': resolution: {integrity: sha512-I0XlIGVdM4E9kYP5eTjgW8fgATdzwxJvQ6bm2PNiHaZhEuUz47NYw1xHthC9R+lXz4i9zbShS0VdLyxd7n0GGA==} engines: {node: '>=0.8.0'} - '@azure/msal-browser@5.10.1': - resolution: {integrity: sha512-hTbvOi9Ko2Jvn+G/fSmjzHf9WbNcf/o3epMtbeGx/pMwMrVAbi6OgCJVeCfsAb8IybSRpaCSc4EDRlYAhgngUQ==} + '@azure/msal-browser@5.12.0': + resolution: {integrity: sha512-eNf2aqx1C6I0yT1GEu5ukblFrmaBXGfe1bivpmlfqvK7giPZvoXLa404C8EfeHVsy6EIryfQuPRzuW1fPxWlHg==} engines: {node: '>=0.8.0'} '@azure/msal-common@14.16.1': resolution: {integrity: sha512-nyxsA6NA4SVKh5YyRpbSXiMr7oQbwark7JU9LMeg6tJYTSPyAGkdx61wPT4gyxZfxlSxMMEyAsWaubBlNyIa1w==} engines: {node: '>=0.8.0'} - '@azure/msal-common@16.6.1': - resolution: {integrity: sha512-VxKdEtUwDuLD0F1hOQP7kye0YadZxFJfv37Em440geEf/w9uggKnHpRrqwZJOdxmPUOdhZ9kyRtKuAJW8wUcRg==} + '@azure/msal-common@16.7.0': + resolution: {integrity: sha512-Jb8Y7pX6KM42SIT7KWP6YbY3+vLbwB5b5m+tpiiOzMU1QeyelQzs9lO8jv1e7/Uj9r7tg7VjPvW4T0KB1jF3UQ==} engines: {node: '>=0.8.0'} '@azure/msal-node@2.16.3': resolution: {integrity: sha512-CO+SE4weOsfJf+C5LM8argzvotrXw252/ZU6SM2Tz63fEblhH1uuVaaO4ISYFuN4Q6BhTo7I3qIdi8ydUQCqhw==} engines: {node: '>=16'} - '@azure/msal-node@5.2.1': - resolution: {integrity: sha512-tmQiQ2HvtzaeLqYGy3BemiPOSGPY4wCy1IW5zDWITKSs/s35WEd7Zij/hCxvUdAOzj6U3qnyaGbYXY91ortFEQ==} + '@azure/msal-node@5.2.3': + resolution: {integrity: sha512-YYX4TchEVddVBiybKvKhV9QO/q22jgewP+BVxKG7Uh115voPcviGlypbKERDsqQdAiSTJrwi80gcWFjYKdo8+Q==} engines: {node: '>=20'} - '@azure/opentelemetry-instrumentation-azure-sdk@1.0.0-beta.9': - resolution: {integrity: sha512-gNCFokEoQQEkhu2T8i1i+1iW2o9wODn2slu5tpqJmjV1W7qf9dxVv6GNXW1P1WC8wMga8BCc2t/oMhOK3iwRQg==} - engines: {node: '>=18.0.0'} + '@azure/opentelemetry-instrumentation-azure-sdk@1.0.0': + resolution: {integrity: sha512-Y8rZOIMXQY/GwNRL+uLVuwIn9aEa/KnnggyYUmFxC1MigmRJCNH5NxMmxKSpddXF9SW6Z1ijRd6Pptd2A5OhGw==} + engines: {node: '>=20.0.0'} - '@azure/storage-blob@12.31.0': - resolution: {integrity: sha512-DBgNv10aCSxopt92DkTDD0o9xScXeBqPKGmR50FPZQaEcH4JLQ+GEOGEDv19V5BMkB7kxr+m4h6il/cCDPvmHg==} + '@azure/storage-blob@12.32.0': + resolution: {integrity: sha512-80LzSNnFQye2LCCBFghAJS6jJQJ7N4bfgZ6qDMgVGRtugZ7TLDKQZ2hczMigmZH3jAcMRdma/IygsC5+0gT7Tw==} engines: {node: '>=20.0.0'} - '@azure/storage-common@12.3.0': - resolution: {integrity: sha512-/OFHhy86aG5Pe8dP5tsp+BuJ25JOAl9yaMU3WZbkeoiFMHFtJ7tu5ili7qEdBXNW9G5lDB19trwyI6V49F/8iQ==} + '@azure/storage-common@12.4.0': + resolution: {integrity: sha512-kNhJKMxQb374KOVt63CZnGIpDcrKNzJeyANLJymxE9mCJSdRGzb+Iv9oSIiCj6tNMLypr530b9ObOiA/5OvwOg==} engines: {node: '>=20.0.0'} - '@babel/code-frame@7.29.0': - resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==} + '@babel/code-frame@7.29.7': + resolution: {integrity: sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.29.0': - resolution: {integrity: sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==} + '@babel/compat-data@7.29.7': + resolution: {integrity: sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==} engines: {node: '>=6.9.0'} '@babel/core@7.29.6': resolution: {integrity: sha512-QdxmAo/ikZqqRGA8s43ww8lcql6naWRvEz0FFrl6MIlc7Gi6TroXnSdWa5U/kq6fzcpqpHesicQxFZIieZbyIA==} engines: {node: '>=6.9.0'} - '@babel/generator@7.28.5': - resolution: {integrity: sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==} - engines: {node: '>=6.9.0'} - - '@babel/generator@7.29.1': - resolution: {integrity: sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==} - engines: {node: '>=6.9.0'} - '@babel/generator@7.29.7': resolution: {integrity: sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==} engines: {node: '>=6.9.0'} - '@babel/helper-annotate-as-pure@7.27.3': - resolution: {integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==} + '@babel/helper-annotate-as-pure@7.29.7': + resolution: {integrity: sha512-OoK6239jHPuSQOoS0kfTVKn0b/rVTk0seKq4Gd2UMLtmOVLjDC0ki3e+c90Trqv2gMfvJFqkiljrr568+qddiw==} engines: {node: '>=6.9.0'} - '@babel/helper-compilation-targets@7.28.6': - resolution: {integrity: sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==} + '@babel/helper-compilation-targets@7.29.7': + resolution: {integrity: sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==} engines: {node: '>=6.9.0'} - '@babel/helper-create-class-features-plugin@7.28.5': - resolution: {integrity: sha512-q3WC4JfdODypvxArsJQROfupPBq9+lMwjKq7C33GhbFYJsufD0yd/ziwD+hJucLeWsnFPWZjsU2DNFqBPE7jwQ==} + '@babel/helper-create-class-features-plugin@7.29.7': + resolution: {integrity: sha512-IY3ZD9Tmooqr3TUhc3DUWxiuo8xx1DWLhd5M7hQ+ZWJamqM2BbalrBJb2MisSLoYorOj75U03qULCxQTY9r3hg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': 7.29.6 - '@babel/helper-create-regexp-features-plugin@7.28.5': - resolution: {integrity: sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw==} + '@babel/helper-create-regexp-features-plugin@7.29.7': + resolution: {integrity: sha512-907Uymvqgg1dwUA+7IGwFAOSYzQOuzPXKNJ1yxzwPffzkYFg2q2eHi1fIOs6sXkG9NbIUMunnUlkYsfRFNvomg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': 7.29.6 - '@babel/helper-define-polyfill-provider@0.6.5': - resolution: {integrity: sha512-uJnGFcPsWQK8fvjgGP5LZUZZsYGIoPeRjSF5PGwrelYgq7Q15/Ft9NGFp1zglwgIv//W0uG4BevRuSJRyylZPg==} + '@babel/helper-define-polyfill-provider@0.6.8': + resolution: {integrity: sha512-47UwBLPpQi1NoWzLuHNjRoHlYXMwIJoBf7MFou6viC/sIHWYygpvr0B6IAyh5sBdA2nr2LPIRww8lfaUVQINBA==} peerDependencies: '@babel/core': 7.29.6 - '@babel/helper-globals@7.28.0': - resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} + '@babel/helper-globals@7.29.7': + resolution: {integrity: sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==} engines: {node: '>=6.9.0'} - '@babel/helper-member-expression-to-functions@7.28.5': - resolution: {integrity: sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==} + '@babel/helper-member-expression-to-functions@7.29.7': + resolution: {integrity: sha512-j+7JYmk1JYDtACIGj0QJqqWZjoUpMoEikQGADMaHgCMCSDqd2+P32rfcibUNrGOMWrlzK1WJBdxrB3JJQZwWtg==} engines: {node: '>=6.9.0'} - '@babel/helper-module-imports@7.28.6': - resolution: {integrity: sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==} + '@babel/helper-module-imports@7.29.7': + resolution: {integrity: sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==} engines: {node: '>=6.9.0'} - '@babel/helper-module-transforms@7.28.6': - resolution: {integrity: sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==} + '@babel/helper-module-transforms@7.29.7': + resolution: {integrity: sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': 7.29.6 - '@babel/helper-optimise-call-expression@7.27.1': - resolution: {integrity: sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-plugin-utils@7.27.1': - resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==} + '@babel/helper-optimise-call-expression@7.29.7': + resolution: {integrity: sha512-+kmGVjcT9RGYzoDwdwEqEvGgKe3BYq+O1iGzjFubaNgZHwYHP6lsF2Yghf4kEuv9BV7tYDZ913aBW9am6YKong==} engines: {node: '>=6.9.0'} - '@babel/helper-plugin-utils@7.28.6': - resolution: {integrity: sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==} + '@babel/helper-plugin-utils@7.29.7': + resolution: {integrity: sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==} engines: {node: '>=6.9.0'} - '@babel/helper-remap-async-to-generator@7.27.1': - resolution: {integrity: sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==} + '@babel/helper-remap-async-to-generator@7.29.7': + resolution: {integrity: sha512-16AMiW26DbXWBbr3B8wNozKM0ydMLB892vaOaJW/fPJdnT8vJk5sdkQcU/isqUxyCE0cEoa8wZOcbgDuC4b6Og==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': 7.29.6 - '@babel/helper-replace-supers@7.27.1': - resolution: {integrity: sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==} + '@babel/helper-replace-supers@7.29.7': + resolution: {integrity: sha512-atfGXWSeCiF4DnKZIfmJfQRkSw9b9gNNXR1kqKjbhG4pGYCOnkp8OcTB8E3NXjBu8NpheSnOeNKz8KT7UNFTmQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': 7.29.6 - '@babel/helper-skip-transparent-expression-wrappers@7.27.1': - resolution: {integrity: sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==} - engines: {node: '>=6.9.0'} - - '@babel/helper-string-parser@7.27.1': - resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} + '@babel/helper-skip-transparent-expression-wrappers@7.29.7': + resolution: {integrity: sha512-brcMGQaVzIeUb+6/bs1Av0f8YuNNjKY2JyvfRCsFuFsdKccEQ5Ges2y74D74NZ1Rz8lKJ9ksJkfqwQFJ/iNEyQ==} engines: {node: '>=6.9.0'} '@babel/helper-string-parser@7.29.7': resolution: {integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.28.5': - resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} - engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.29.7': resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-option@7.27.1': - resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} + '@babel/helper-validator-option@7.29.7': + resolution: {integrity: sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==} engines: {node: '>=6.9.0'} - '@babel/helper-wrap-function@7.28.3': - resolution: {integrity: sha512-zdf983tNfLZFletc0RRXYrHrucBEg95NIFMkn6K9dbeMYnsgHaSBGcQqdsCSStG2PYwRre0Qc2NNSCXbG+xc6g==} + '@babel/helper-wrap-function@7.29.7': + resolution: {integrity: sha512-iES0Skag9ERIF68aXadpO6dbXa03mNWK3sEqJaMnLNs/eC3l0lkImdfoy6Y09/SfkpawdAB4RjQ7PVA7TcVGdw==} engines: {node: '>=6.9.0'} - '@babel/helpers@7.29.2': - resolution: {integrity: sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==} + '@babel/helpers@7.29.7': + resolution: {integrity: sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==} engines: {node: '>=6.9.0'} - '@babel/parser@7.29.2': - resolution: {integrity: sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==} - engines: {node: '>=6.0.0'} - hasBin: true - '@babel/parser@7.29.7': resolution: {integrity: sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==} engines: {node: '>=6.0.0'} hasBin: true - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.28.5': - resolution: {integrity: sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q==} + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.29.7': + resolution: {integrity: sha512-j8SrR0zLZrRsC09DlszEx8FpMiwukKffYXMK0d5LmOglO7vGG6sz/BR/20yHqWH+Lnn31JTt2PE3hIWNgM2J6w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': 7.29.6 + + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.29.7': + resolution: {integrity: sha512-r8j8escF+U2FUHo0KOhPUdMzUO+jp9fInva6+ACVAF3Y97Ev+5iNZwiqTghmzNeWwDkOPlYuTcfb1vDaoZKmAQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': 7.29.6 - '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1': - resolution: {integrity: sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==} + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.29.7': + resolution: {integrity: sha512-GE1TFSiuFeGsCxmYXZl8HwoPrVlwe4rHPFE8weieGKZqnDORK+Ar3vgWMgW+AOxQ6/2TgLSKx9p6W7O4rC6qgQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': 7.29.6 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1': - resolution: {integrity: sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==} + '@babel/plugin-bugfix-safari-rest-destructuring-rhs-array@7.29.7': + resolution: {integrity: sha512-oBNVCvnO5tND+xSopWvV8WNGfpTfgP4Zr/YXXSj8zfmcPktp5Ku/aZlsIowgSD4fjmgHn6sGmB9APVsU5zOdhA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': 7.29.6 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1': - resolution: {integrity: sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==} + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.29.7': + resolution: {integrity: sha512-QQt9qKHZ2sg/kivaLr7lnQr8HVrQDdBNSfCsTjiDxRuX/K5ORyKq+Bu8Xr0cDE3Dfkv0cw28Ve0EKyKMvulkOw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': 7.29.6 - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.3': - resolution: {integrity: sha512-b6YTX108evsvE4YgWyQ921ZAFFQm3Bn+CA3+ZXlNVnPhx+UfsVURoPjfGAPCjBgrqo30yX/C2nZGX96DxvR9Iw==} + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.29.7': + resolution: {integrity: sha512-pn6QacGLgvCcwc+syUhKE/qSjV2D1IHDB84RNxWYSt1mW3K/SCtjinZ2p0cETJxAWBjPy3K/1lHwG5BjjPxNlw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': 7.29.6 @@ -3213,26 +3212,26 @@ packages: peerDependencies: '@babel/core': 7.29.6 - '@babel/plugin-syntax-import-assertions@7.27.1': - resolution: {integrity: sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg==} + '@babel/plugin-syntax-import-assertions@7.29.7': + resolution: {integrity: sha512-/An1OCBN93thpBAGyfsK2pcf0jvju1SAtKkL2Ny++B5Sy6sqgzXDQH1cZxWbF96Wuk+bn41MDA9bLd4VVAw6rw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': 7.29.6 - '@babel/plugin-syntax-import-attributes@7.27.1': - resolution: {integrity: sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==} + '@babel/plugin-syntax-import-attributes@7.29.7': + resolution: {integrity: sha512-zGYcYfq/WmZ4V+kBIXQon9dSSc8ircGZqw9ZaNhhGj9nZkeBu1jHLBDQqYYi5WA9uawvA2sIMbry2nCFhf5Djg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': 7.29.6 - '@babel/plugin-syntax-jsx@7.27.1': - resolution: {integrity: sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==} + '@babel/plugin-syntax-jsx@7.29.7': + resolution: {integrity: sha512-TSu8+mHCoEaaCDEZ0I3+6mvTBYR4PCxQwf2z9/r5Tbztv6NaLR3B9thGTTxX2WGuGHJqRiAbKPeGTJ5XWXVg6A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': 7.29.6 - '@babel/plugin-syntax-typescript@7.27.1': - resolution: {integrity: sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==} + '@babel/plugin-syntax-typescript@7.29.7': + resolution: {integrity: sha512-ngr+82Sh0xMz25TPCZi+nC2iTzjfCdWS2ONXTp/PtSCHCgaCNBpdMqgvJ2ccdLlClVZ7sisIgB914j/JFe+RZA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': 7.29.6 @@ -3243,152 +3242,152 @@ packages: peerDependencies: '@babel/core': 7.29.6 - '@babel/plugin-transform-arrow-functions@7.27.1': - resolution: {integrity: sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==} + '@babel/plugin-transform-arrow-functions@7.29.7': + resolution: {integrity: sha512-N7zArUXWzAMzm+/N0uPBeVB3Fam5lMxtUwMmDK5f/IBBS7a7p1qeUoxd/6CckXoxUdgsntq1Dh8xNW06maZbDQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': 7.29.6 - '@babel/plugin-transform-async-generator-functions@7.28.0': - resolution: {integrity: sha512-BEOdvX4+M765icNPZeidyADIvQ1m1gmunXufXxvRESy/jNNyfovIqUyE7MVgGBjWktCoJlzvFA1To2O4ymIO3Q==} + '@babel/plugin-transform-async-generator-functions@7.29.7': + resolution: {integrity: sha512-d98gXZkgswvkyohMBABkhm3GeXhYj8psWfwQ2C7gtfrKGTykQa/iOIi+JJhwMjPlZ6Vm2XN+DCf3Es1EoG4ZLA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': 7.29.6 - '@babel/plugin-transform-async-to-generator@7.27.1': - resolution: {integrity: sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA==} + '@babel/plugin-transform-async-to-generator@7.29.7': + resolution: {integrity: sha512-pcUb2SS+RMo9TWVBwKGI5ShtoG7R+zBsFmCKDa6fe8c+hPr3XJlZgoE5j6i8W7gDjhyvy+85vmYexanvXh3d1w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': 7.29.6 - '@babel/plugin-transform-block-scoped-functions@7.27.1': - resolution: {integrity: sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==} + '@babel/plugin-transform-block-scoped-functions@7.29.7': + resolution: {integrity: sha512-cUSmjh72N+rN4PrkFlN1dJwNCwjVp5d38/CQrEsFggkD10UiFlBFgdH3tv5dNsLuHY+3S8db2xCHjhZcv5WgvA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': 7.29.6 - '@babel/plugin-transform-block-scoping@7.28.5': - resolution: {integrity: sha512-45DmULpySVvmq9Pj3X9B+62Xe+DJGov27QravQJU1LLcapR6/10i+gYVAucGGJpHBp5mYxIMK4nDAT/QDLr47g==} + '@babel/plugin-transform-block-scoping@7.29.7': + resolution: {integrity: sha512-ONyr4+AZhKh8yKWInVxU9AXA9EbsyeLcL6V0dJy6M2/62vuvpGm29zzuymbTpdc451GEpDIdAyPLP3r+P61yKQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': 7.29.6 - '@babel/plugin-transform-class-properties@7.27.1': - resolution: {integrity: sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA==} + '@babel/plugin-transform-class-properties@7.29.7': + resolution: {integrity: sha512-GtcpjFvanPfzNQi3eTitsCqtRRmmqzpy/A+yhTR1HaZo1Ly3EA8ZXxlPyHdR8/IuRMYc3E4wdGBewB2QKQjAaA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': 7.29.6 - '@babel/plugin-transform-class-static-block@7.28.3': - resolution: {integrity: sha512-LtPXlBbRoc4Njl/oh1CeD/3jC+atytbnf/UqLoqTDcEYGUPj022+rvfkbDYieUrSj3CaV4yHDByPE+T2HwfsJg==} + '@babel/plugin-transform-class-static-block@7.29.7': + resolution: {integrity: sha512-kibJgmEdX2iMwsHY2tSZNDgj8PwIlCQz7FK9KuGKO8zsuoUwSEhoNnNVp/emKWrbY4HeO6kkXfdMqRKKKXBm2A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': 7.29.6 - '@babel/plugin-transform-classes@7.28.4': - resolution: {integrity: sha512-cFOlhIYPBv/iBoc+KS3M6et2XPtbT2HiCRfBXWtfpc9OAyostldxIf9YAYB6ypURBBbx+Qv6nyrLzASfJe+hBA==} + '@babel/plugin-transform-classes@7.29.7': + resolution: {integrity: sha512-qV0OGGBVacduzQHE649JyCneOFI/maT+YKsO+K4Yi3xv2wTPNjM/W2o2gdzMwEAZz7fXNTHAe0NcSg30bIN69g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': 7.29.6 - '@babel/plugin-transform-computed-properties@7.27.1': - resolution: {integrity: sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw==} + '@babel/plugin-transform-computed-properties@7.29.7': + resolution: {integrity: sha512-RK7/IyU5phpuCdBAuig5VkzG/EnbDaui5SQGdU9BFrHdV+mV4cUjLMQ9lJDjLNtWHsqtiefpGZUXQP2BiTYMsA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': 7.29.6 - '@babel/plugin-transform-destructuring@7.28.5': - resolution: {integrity: sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw==} + '@babel/plugin-transform-destructuring@7.29.7': + resolution: {integrity: sha512-iPX8aD6H9zV5s7ZsqTdNocPN/MGQ5sSMnElKrktxjJRMnB2jN/1p2+R7GkfD6CAYoVFqy5A4XnSIUeGgJzIWpg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': 7.29.6 - '@babel/plugin-transform-dotall-regex@7.27.1': - resolution: {integrity: sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw==} + '@babel/plugin-transform-dotall-regex@7.29.7': + resolution: {integrity: sha512-3qc18hsD2RdZiyJNDNc7HQpv6xbncwh8FYtxNFFzclSyh/trPD9KkVR9BDECUjDLvb7yJVF15GfYUuC+LMkkiQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': 7.29.6 - '@babel/plugin-transform-duplicate-keys@7.27.1': - resolution: {integrity: sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==} + '@babel/plugin-transform-duplicate-keys@7.29.7': + resolution: {integrity: sha512-6IvRRriEMqnBwD6chtxdLpMYCHWEzN+oL5cyQtjykya19UgzbmKhxmhZgKC/LHxS2nYr9Q/qYPZ5Lr6jOL9+yQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': 7.29.6 - '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1': - resolution: {integrity: sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ==} + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.29.7': + resolution: {integrity: sha512-2wiIyo2BjtgU7HufSeDnL9L2O7zr8jmhFKuSr65VpRkUiRKRNpb0mdlk56+XPPKoIrfHqzbMuglDvZun0RISsA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': 7.29.6 - '@babel/plugin-transform-dynamic-import@7.27.1': - resolution: {integrity: sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==} + '@babel/plugin-transform-dynamic-import@7.29.7': + resolution: {integrity: sha512-giOlEm/EFjfjr+te9NsdjkUo2v4f8rS/SXPumRVHAtbNcyNlvtREkU1dZzaIDclNpnaVhlCqRdFKhJBjBikzLg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': 7.29.6 - '@babel/plugin-transform-explicit-resource-management@7.28.0': - resolution: {integrity: sha512-K8nhUcn3f6iB+P3gwCv/no7OdzOZQcKchW6N389V6PD8NUWKZHzndOd9sPDVbMoBsbmjMqlB4L9fm+fEFNVlwQ==} + '@babel/plugin-transform-explicit-resource-management@7.29.7': + resolution: {integrity: sha512-Rstj7coNz8sE+7Ju7ihpHLI564lsK5pUpNNlvptCIC/16E/S5hbl6n3kESPKdNRmqEWlpn5xpS5Q2dvXBsySLw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': 7.29.6 - '@babel/plugin-transform-exponentiation-operator@7.28.5': - resolution: {integrity: sha512-D4WIMaFtwa2NizOp+dnoFjRez/ClKiC2BqqImwKd1X28nqBtZEyCYJ2ozQrrzlxAFrcrjxo39S6khe9RNDlGzw==} + '@babel/plugin-transform-exponentiation-operator@7.29.7': + resolution: {integrity: sha512-zFpMOTLZBdW5LfObqcSbL6kefg4R4eLdmvS0wbN9M6D5Mym/sKm9toOoWyVOa+xDjvCnuWcHls2YonXwHvH3CQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': 7.29.6 - '@babel/plugin-transform-export-namespace-from@7.27.1': - resolution: {integrity: sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==} + '@babel/plugin-transform-export-namespace-from@7.29.7': + resolution: {integrity: sha512-24B2nOy2TeJSMheqwPD4DDQOV/elLSIlKxjZt4i05H5AgdPdWR3n18HnNrcJ+j76WJd9gbwb9jPjNYUy6RautA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': 7.29.6 - '@babel/plugin-transform-for-of@7.27.1': - resolution: {integrity: sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==} + '@babel/plugin-transform-for-of@7.29.7': + resolution: {integrity: sha512-zeSIHh0+E1Um1WJRXCFlHQYu2ieJNdivLLjlBEp+dIBu3S51n+SZZmIXjxnItw6pz56Cn+KvK68BIBVsxq2JiQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': 7.29.6 - '@babel/plugin-transform-function-name@7.27.1': - resolution: {integrity: sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==} + '@babel/plugin-transform-function-name@7.29.7': + resolution: {integrity: sha512-otRWaHXE6fbAGkePvaj/kvs3HsqXfPhlnzwSOlnFgbqCPMd975dW+4wZ00WFBt+/YlBGcJwNrARQTOJOb4ZrIg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': 7.29.6 - '@babel/plugin-transform-json-strings@7.27.1': - resolution: {integrity: sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q==} + '@babel/plugin-transform-json-strings@7.29.7': + resolution: {integrity: sha512-RRnE2+eon1rJAq8MnoF1b5kTpY1vU88twHcvcKMrsqP/jxIRqDVs9iJB5fqPuqyeFAW0wJo4MlUIPpQCq/aRsg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': 7.29.6 - '@babel/plugin-transform-literals@7.27.1': - resolution: {integrity: sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==} + '@babel/plugin-transform-literals@7.29.7': + resolution: {integrity: sha512-DZ/oLP21ZuWx1vKqnoNv6/tvEK48AQOBRai40CX9dTjGluvT/YZCyY3rryDtyUqCEoyNroy5KKPwX2iQCiRvyw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': 7.29.6 - '@babel/plugin-transform-logical-assignment-operators@7.28.5': - resolution: {integrity: sha512-axUuqnUTBuXyHGcJEVVh9pORaN6wC5bYfE7FGzPiaWa3syib9m7g+/IT/4VgCOe2Upef43PHzeAvcrVek6QuuA==} + '@babel/plugin-transform-logical-assignment-operators@7.29.7': + resolution: {integrity: sha512-A0H91hh6W8MFRkp5TqJmMr39jzGD1A1E1Ysiv2O06Sfbhkapm+XyIzxWCEh5kqwOZ1/8QZ0dY3SeQ7XBqfJd5Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': 7.29.6 - '@babel/plugin-transform-member-expression-literals@7.27.1': - resolution: {integrity: sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==} + '@babel/plugin-transform-member-expression-literals@7.29.7': + resolution: {integrity: sha512-hl1kwFZCCiDyfH25Xmco9jTrkPgnS9pmOzSG7W5I4SaGbLeqKv417hcU2RKmaxoPEgsoJh7ZPOrnPGq99bHoUg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': 7.29.6 - '@babel/plugin-transform-modules-amd@7.27.1': - resolution: {integrity: sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==} + '@babel/plugin-transform-modules-amd@7.29.7': + resolution: {integrity: sha512-fxtQoH3m5ywUSIfaH0FGCzWu4McsYon5bD3K4XnskC7f+OyQMj7rsOMi4NvvmJ83WwBAg4UCe+ov4VZlqEvyew==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': 7.29.6 - '@babel/plugin-transform-modules-commonjs@7.27.1': - resolution: {integrity: sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==} + '@babel/plugin-transform-modules-commonjs@7.29.7': + resolution: {integrity: sha512-j0vCldybPC5b5dwCQOJ21uKtHzt7hxLygJTg9eF1ScfaikEDNfzn94XoW5Fi+seBR0nCyL23xaBFFkq7dTM8XQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': 7.29.6 @@ -3399,200 +3398,200 @@ packages: peerDependencies: '@babel/core': 7.29.6 - '@babel/plugin-transform-modules-umd@7.27.1': - resolution: {integrity: sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==} + '@babel/plugin-transform-modules-umd@7.29.7': + resolution: {integrity: sha512-B4UkaTK3QpgCwJnrxKfMPKdo92CN7OKXAlpAAnM3UPu0Q0lCCk57ylA9AJbRy2v8dDKOPAAWcoR6CMyeoHwRCA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': 7.29.6 - '@babel/plugin-transform-named-capturing-groups-regex@7.27.1': - resolution: {integrity: sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==} + '@babel/plugin-transform-named-capturing-groups-regex@7.29.7': + resolution: {integrity: sha512-vuFoLwr4qnv2xbZ16SQd6uPcH5FNrLHhk/Jzo++0XJFcaDsr4gjJVg6j398oMHiC+83k/GiBzviwF5KBJkPUtQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': 7.29.6 - '@babel/plugin-transform-new-target@7.27.1': - resolution: {integrity: sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==} + '@babel/plugin-transform-new-target@7.29.7': + resolution: {integrity: sha512-fEo41GmsOUhOBlw8ioo6zvjX5Xc2Lqkzlyfqbpsk3eB6TReV18uhxZ0esfEokVbY2+PVJAQHNKxER6lGrzNd3A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': 7.29.6 - '@babel/plugin-transform-nullish-coalescing-operator@7.27.1': - resolution: {integrity: sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA==} + '@babel/plugin-transform-nullish-coalescing-operator@7.29.7': + resolution: {integrity: sha512-idmp1dFaekP9GbcMvG24Kvw2BfhFZjHnNJCkV4WuIY4PskJzwI3f1N5OdgYke38T7rftO6ERulFRn2cFeZwRkg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': 7.29.6 - '@babel/plugin-transform-numeric-separator@7.27.1': - resolution: {integrity: sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw==} + '@babel/plugin-transform-numeric-separator@7.29.7': + resolution: {integrity: sha512-zR7fv/z14OjgHl4AgRtkDBvBMhIzCxqV/qN/2BCRC7LjFwvuzjYe7gDWxC4Wl/SNsLM6SE1IWvRPYMgSJaUvNw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': 7.29.6 - '@babel/plugin-transform-object-rest-spread@7.28.4': - resolution: {integrity: sha512-373KA2HQzKhQCYiRVIRr+3MjpCObqzDlyrM6u4I201wL8Mp2wHf7uB8GhDwis03k2ti8Zr65Zyyqs1xOxUF/Ew==} + '@babel/plugin-transform-object-rest-spread@7.29.7': + resolution: {integrity: sha512-Ld98jn4c0smUywL57m7SgsHq3OpThOa6LqZJif3G6jYOovPleoFhVrBJ1WegRApSFB2wu4+RelAj9AC9G08Z4A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': 7.29.6 - '@babel/plugin-transform-object-super@7.27.1': - resolution: {integrity: sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==} + '@babel/plugin-transform-object-super@7.29.7': + resolution: {integrity: sha512-Ea/diGcw0twB5IlZPO5sgET6fJsLJqPABqTuFWIR+iMPGPZJkATEIWx0wa+aEQ5UY1CBQyP/gkAiLEqn1vBiQA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': 7.29.6 - '@babel/plugin-transform-optional-catch-binding@7.27.1': - resolution: {integrity: sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q==} + '@babel/plugin-transform-optional-catch-binding@7.29.7': + resolution: {integrity: sha512-sLsyndxK2VwX6yNUOakMb7Sh553ZTe/vVM1XJ+9Z5aW1ytsc8xOIwmyk05NNjN60vkc5/KqoTH6hB4V41LJhng==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': 7.29.6 - '@babel/plugin-transform-optional-chaining@7.28.5': - resolution: {integrity: sha512-N6fut9IZlPnjPwgiQkXNhb+cT8wQKFlJNqcZkWlcTqkcqx6/kU4ynGmLFoa4LViBSirn05YAwk+sQBbPfxtYzQ==} + '@babel/plugin-transform-optional-chaining@7.29.7': + resolution: {integrity: sha512-6GM1dhvK3gNODkXcEcMCOLEDCLSoZ/sBbro2Ax8HURyasQ4NshagQixkRFdh5niI6E4gmA/jYI/4aT7rRos3ZQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': 7.29.6 - '@babel/plugin-transform-parameters@7.27.7': - resolution: {integrity: sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg==} + '@babel/plugin-transform-parameters@7.29.7': + resolution: {integrity: sha512-ZDOBqV/qLYJI0YElr8DcENEyARsFQeESqWXH6gZlghYXuPPjvweuDhP4VyEi4BlUBlLRFZVjxoZDMjxhLW766g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': 7.29.6 - '@babel/plugin-transform-private-methods@7.27.1': - resolution: {integrity: sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA==} + '@babel/plugin-transform-private-methods@7.29.7': + resolution: {integrity: sha512-/6Rz4DK1ETDEM/bWHsPHcaEe7ZaT1EqSXjtSP/L0DijOYuaUhiRiOKcwpZ8P7zR4xXEHc2ITdiCgBm9Tpyv9ug==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': 7.29.6 - '@babel/plugin-transform-private-property-in-object@7.27.1': - resolution: {integrity: sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ==} + '@babel/plugin-transform-private-property-in-object@7.29.7': + resolution: {integrity: sha512-+BNo06dnrzdNNqCm1X6YUaVv0DKk8Q+JYcoZfOkLhYWNCXzlwTSRq8zGWayT1csjcpNXV9CQTBRRbmTLZac5cA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': 7.29.6 - '@babel/plugin-transform-property-literals@7.27.1': - resolution: {integrity: sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==} + '@babel/plugin-transform-property-literals@7.29.7': + resolution: {integrity: sha512-bOMRLQuI0A5ZqHq3OWJ89/rXpJ/NJrbVhXiP4zwPGMs6kpcVsuTUNjwoE30K0Qm3mf48a/TnRYYD6vPNqcg6jA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': 7.29.6 - '@babel/plugin-transform-react-constant-elements@7.27.1': - resolution: {integrity: sha512-edoidOjl/ZxvYo4lSBOQGDSyToYVkTAwyVoa2tkuYTSmjrB1+uAedoL5iROVLXkxH+vRgA7uP4tMg2pUJpZ3Ug==} + '@babel/plugin-transform-react-constant-elements@7.29.7': + resolution: {integrity: sha512-J0wGhKan+rIiE2OhfhRptySLrJ6SjQYM6b6N1FMlhyhCcw1Mig8vQjWchyB+bgHGDvaWo6Diu6CLRMra2uMtmg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': 7.29.6 - '@babel/plugin-transform-react-display-name@7.28.0': - resolution: {integrity: sha512-D6Eujc2zMxKjfa4Zxl4GHMsmhKKZ9VpcqIchJLvwTxad9zWIYulwYItBovpDOoNLISpcZSXoDJ5gaGbQUDqViA==} + '@babel/plugin-transform-react-display-name@7.29.7': + resolution: {integrity: sha512-+1wdDMGNb4UPeY3Q4L5yLiYe6TXPXubs4NjrgRFw13hPRLJfEMw2Q5OXkee6/IfdqePIeW4Jjwe3aBh7SdKz4Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': 7.29.6 - '@babel/plugin-transform-react-jsx-development@7.27.1': - resolution: {integrity: sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q==} + '@babel/plugin-transform-react-jsx-development@7.29.7': + resolution: {integrity: sha512-Xfy3UVMF04+ypnFbkhvfqtmvwfe92qwQdbGZVonhE+6v35GzlofmOnA1szaZqzb9xYWr0nl1e5EMmzi0DNON1g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': 7.29.6 - '@babel/plugin-transform-react-jsx@7.27.1': - resolution: {integrity: sha512-2KH4LWGSrJIkVf5tSiBFYuXDAoWRq2MMwgivCf+93dd0GQi8RXLjKA/0EvRnVV5G0hrHczsquXuD01L8s6dmBw==} + '@babel/plugin-transform-react-jsx@7.29.7': + resolution: {integrity: sha512-WsZulLVBUHXVj2cUcPVx6UE21TpalB6bHbSFErKT0Ib++ax24jjXe73FqlWvdylFOjiuPHYi6VCcgRad1ItN+A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': 7.29.6 - '@babel/plugin-transform-react-pure-annotations@7.27.1': - resolution: {integrity: sha512-JfuinvDOsD9FVMTHpzA/pBLisxpv1aSf+OIV8lgH3MuWrks19R27e6a6DipIg4aX1Zm9Wpb04p8wljfKrVSnPA==} + '@babel/plugin-transform-react-pure-annotations@7.29.7': + resolution: {integrity: sha512-H5E+HBgDpr6Q5t+Aj11tL7XkIui1jhbIoArVQnqjgXo5/3YxkN7ZEBcWF4RQlB0T4rrxJQbXS6kiFV6B7XTqUA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': 7.29.6 - '@babel/plugin-transform-regenerator@7.28.4': - resolution: {integrity: sha512-+ZEdQlBoRg9m2NnzvEeLgtvBMO4tkFBw5SQIUgLICgTrumLoU7lr+Oghi6km2PFj+dbUt2u1oby2w3BDO9YQnA==} + '@babel/plugin-transform-regenerator@7.29.7': + resolution: {integrity: sha512-rNNFV0DBAJp988xW2DOntfDoYn1eR8GGF5AT5vYc+rjyfaQkM242c9tZUHHPe7KYaiJizXPWhQTzzdbXySyhBw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': 7.29.6 - '@babel/plugin-transform-regexp-modifiers@7.27.1': - resolution: {integrity: sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA==} + '@babel/plugin-transform-regexp-modifiers@7.29.7': + resolution: {integrity: sha512-mB5Fs0VWrJ42ZCmc8114v60qetdaUVNkj9PmSZRmanCZM3S9hm0CFRLjRmYIsuXav14l2jvZ+4T8iiCGnhj3nQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': 7.29.6 - '@babel/plugin-transform-reserved-words@7.27.1': - resolution: {integrity: sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==} + '@babel/plugin-transform-reserved-words@7.29.7': + resolution: {integrity: sha512-5+YhdpVgmfSmwZyLMftfaiffLRMHjzIRHFHHLdibcSyJm2pasMrKHrO3Ptrt2DRshjvpgjEJJ1zVW14WPq/6QA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': 7.29.6 - '@babel/plugin-transform-runtime@7.28.5': - resolution: {integrity: sha512-20NUVgOrinudkIBzQ2bNxP08YpKprUkRTiRSd2/Z5GOdPImJGkoN4Z7IQe1T5AdyKI1i5L6RBmluqdSzvaq9/w==} + '@babel/plugin-transform-runtime@7.29.7': + resolution: {integrity: sha512-xmAscdE/AsqRW7vutbPNoUmu/nF5SrLKPs7aoJgEjo35lLKA/Bc0i2rMv/hr1+Y0o1bQCiVtith3u2vdgRL39Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': 7.29.6 - '@babel/plugin-transform-shorthand-properties@7.27.1': - resolution: {integrity: sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==} + '@babel/plugin-transform-shorthand-properties@7.29.7': + resolution: {integrity: sha512-I+WYbGBAiCn7nA6xBrlgPH+MB7HWb4u8pv5S0Pv7OtwNvIFvCCb24YlttKEeUFVurfBCEaOTnuhlqsb7f0Z5Dg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': 7.29.6 - '@babel/plugin-transform-spread@7.27.1': - resolution: {integrity: sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q==} + '@babel/plugin-transform-spread@7.29.7': + resolution: {integrity: sha512-/u5K1QWada7tbYNqTjMh96718g9NTwh9tfPJMsSmVsQwGT447FskV+KcfeXkXq2GWki4EM/MuTdmBec+hOuVTQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': 7.29.6 - '@babel/plugin-transform-sticky-regex@7.27.1': - resolution: {integrity: sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==} + '@babel/plugin-transform-sticky-regex@7.29.7': + resolution: {integrity: sha512-BCHzNYJGe9l7EpwwDBN/ztlL2NYFFq8hp9ddjtUEM9f2O7S7kKV/lL6Fwo7IF7NSkYhPK2vO+86nIGltA90MsA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': 7.29.6 - '@babel/plugin-transform-template-literals@7.27.1': - resolution: {integrity: sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==} + '@babel/plugin-transform-template-literals@7.29.7': + resolution: {integrity: sha512-NCSEJ4sLFU2gqAub45HYh4fus2yQ36rr6ei6vpU7NdoJqCpxvEG8E6eJpscGyXP3VHD2Ny+fSXr04k1hoUrFqA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': 7.29.6 - '@babel/plugin-transform-typeof-symbol@7.27.1': - resolution: {integrity: sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==} + '@babel/plugin-transform-typeof-symbol@7.29.7': + resolution: {integrity: sha512-223mNGoTkBiTEWFoK+Q6Go3tueMRclO8vxxxxquNCYuNI4jWOofFKJRRDu6SDrB8Sgo1UEGW9T4GAQ8ZyRso1A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': 7.29.6 - '@babel/plugin-transform-typescript@7.28.5': - resolution: {integrity: sha512-x2Qa+v/CuEoX7Dr31iAfr0IhInrVOWZU/2vJMJ00FOR/2nM0BcBEclpaf9sWCDc+v5e9dMrhSH8/atq/kX7+bA==} + '@babel/plugin-transform-typescript@7.29.7': + resolution: {integrity: sha512-jK52h8LaLc7JarhQV2ofeFMts4H7vnOXnqZNA6fYglBTZewRBE51KWt3BUltW1P+KoPsYkHoJeXePuz4zo2LMw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': 7.29.6 - '@babel/plugin-transform-unicode-escapes@7.27.1': - resolution: {integrity: sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==} + '@babel/plugin-transform-unicode-escapes@7.29.7': + resolution: {integrity: sha512-jCfXxSjf94lf4E0hKE0AByxF6F3/pVFqRdUUNkDJhsY0m1ZKjnN6ZYyMeHNpzflxb/0q5b7t3p+BE+SLF1WOtA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': 7.29.6 - '@babel/plugin-transform-unicode-property-regex@7.27.1': - resolution: {integrity: sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q==} + '@babel/plugin-transform-unicode-property-regex@7.29.7': + resolution: {integrity: sha512-OgZ+zoAJgZLUCunsTRQ5LAjOywDv5zzZ2/hQ5aMw1pGXyY2rtE8/chXYUmu3AlVHKpm10KEdG9aMwbI/K76ZGw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': 7.29.6 - '@babel/plugin-transform-unicode-regex@7.27.1': - resolution: {integrity: sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==} + '@babel/plugin-transform-unicode-regex@7.29.7': + resolution: {integrity: sha512-7D/x/23/d/3VqZ0QA+LGbZMlGwZjztBygSWWWsfTPoQ1oQ6Q1P6Mr3d0kk42XabyUVw+fha3LqdRsFqeKqvCyA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': 7.29.6 - '@babel/plugin-transform-unicode-sets-regex@7.27.1': - resolution: {integrity: sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw==} + '@babel/plugin-transform-unicode-sets-regex@7.29.7': + resolution: {integrity: sha512-BLOhLht9DOJwIxlmp91wHvkXv1lguuHS3/FwUO8HL1H0u8s4hR1gASVFyilu9iGtcTRYqjTZmlsFFeQletntEg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': 7.29.6 - '@babel/preset-env@7.28.5': - resolution: {integrity: sha512-S36mOoi1Sb6Fz98fBfE+UZSpYw5mJm0NUHtIKrOuNcqeFauy1J6dIvXm2KRVKobOSaGq4t/hBXdN4HGU3wL9Wg==} + '@babel/preset-env@7.29.7': + resolution: {integrity: sha512-GYzX36n1nsciIb0uyH0GHwxwtNwPQIcpxSeiVLDtG/B7jB5xXgchnmL1f/jCX5o+pwnaDBtO60ONSJhEBJfxYA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': 7.29.6 @@ -3602,40 +3601,28 @@ packages: peerDependencies: '@babel/core': 7.29.6 - '@babel/preset-react@7.28.5': - resolution: {integrity: sha512-Z3J8vhRq7CeLjdC58jLv4lnZ5RKFUJWqH5emvxmv9Hv3BD1T9R/Im713R4MTKwvFaV74ejZ3sM01LyEKk4ugNQ==} + '@babel/preset-react@7.29.7': + resolution: {integrity: sha512-C+PV1TFUPTmBQGoPBL8j2QmLpZ117YTCwxIZeJOM96GbYMFSc7/pOXU5lVykwnZxyTqQxRsvoRk6f2FktZgGHA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': 7.29.6 - '@babel/preset-typescript@7.28.5': - resolution: {integrity: sha512-+bQy5WOI2V6LJZpPVxY+yp66XdZ2yifu0Mc1aP5CQKgjn4QM5IN2i5fAZ4xKop47pr8rpVhiAeu+nDQa12C8+g==} + '@babel/preset-typescript@7.29.7': + resolution: {integrity: sha512-/Foi8vKY2EVbed/1eZx0gJEEwHAIxogrySI7rULcRIvhZzbvoE/b5qG5Ghc0WKAFKOHA9SD1x7RsFlOYdutIiQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': 7.29.6 - '@babel/runtime@7.28.4': - resolution: {integrity: sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==} - engines: {node: '>=6.9.0'} - - '@babel/template@7.27.2': - resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} - engines: {node: '>=6.9.0'} - - '@babel/template@7.28.6': - resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==} - engines: {node: '>=6.9.0'} - - '@babel/traverse@7.29.0': - resolution: {integrity: sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==} + '@babel/runtime@7.29.7': + resolution: {integrity: sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==} engines: {node: '>=6.9.0'} - '@babel/types@7.28.5': - resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==} + '@babel/template@7.29.7': + resolution: {integrity: sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==} engines: {node: '>=6.9.0'} - '@babel/types@7.29.0': - resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} + '@babel/traverse@7.29.7': + resolution: {integrity: sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==} engines: {node: '>=6.9.0'} '@babel/types@7.29.7': @@ -3912,8 +3899,8 @@ packages: peerDependencies: postcss: 8.5.10 - '@csstools/postcss-normalize-display-values@4.0.0': - resolution: {integrity: sha512-HlEoG0IDRoHXzXnkV4in47dzsxdsjdz6+j7MLjaACABX2NfvjFS6XVAnpaDyGesz9gK2SC7MbNwdCHusObKJ9Q==} + '@csstools/postcss-normalize-display-values@4.0.1': + resolution: {integrity: sha512-TQUGBuRvxdc7TgNSTevYqrL8oItxiwPDixk20qCB5me/W8uF7BPbhRrAvFuhEoywQp/woRsUZ6SJ+sU5idZAIA==} engines: {node: '>=18'} peerDependencies: postcss: 8.5.10 @@ -3924,12 +3911,24 @@ packages: peerDependencies: postcss: 8.5.10 + '@csstools/postcss-position-area-property@1.0.0': + resolution: {integrity: sha512-fUP6KR8qV2NuUZV3Cw8itx0Ep90aRjAZxAEzC3vrl6yjFv+pFsQbR18UuQctEKmA72K9O27CoYiKEgXxkqjg8Q==} + engines: {node: '>=18'} + peerDependencies: + postcss: 8.5.10 + '@csstools/postcss-progressive-custom-properties@4.2.1': resolution: {integrity: sha512-uPiiXf7IEKtUQXsxu6uWtOlRMXd2QWWy5fhxHDnPdXKCQckPP3E34ZgDoZ62r2iT+UOgWsSbM4NvHE5m3mAEdw==} engines: {node: '>=18'} peerDependencies: postcss: 8.5.10 + '@csstools/postcss-property-rule-prelude-list@1.0.0': + resolution: {integrity: sha512-IxuQjUXq19fobgmSSvUDO7fVwijDJaZMvWQugxfEUxmjBeDCVaDuMpsZ31MsTm5xbnhA+ElDi0+rQ7sQQGisFA==} + engines: {node: '>=18'} + peerDependencies: + postcss: 8.5.10 + '@csstools/postcss-random-function@2.0.1': resolution: {integrity: sha512-q+FQaNiRBhnoSNo+GzqGOIBKoHQ43lYz0ICrV+UudfWnEF6ksS6DsBIJSISKQT2Bvu3g4k6r7t0zYrk5pDlo8w==} engines: {node: '>=18'} @@ -3960,6 +3959,18 @@ packages: peerDependencies: postcss: 8.5.10 + '@csstools/postcss-syntax-descriptor-syntax-production@1.0.1': + resolution: {integrity: sha512-GneqQWefjM//f4hJ/Kbox0C6f2T7+pi4/fqTqOFGTL3EjnvOReTqO1qUQ30CaUjkwjYq9qZ41hzarrAxCc4gow==} + engines: {node: '>=18'} + peerDependencies: + postcss: 8.5.10 + + '@csstools/postcss-system-ui-font-family@1.0.0': + resolution: {integrity: sha512-s3xdBvfWYfoPSBsikDXbuorcMG1nN1M6GdU0qBsGfcmNR0A/qhloQZpTxjA3Xsyrk1VJvwb2pOfiOT3at/DuIQ==} + engines: {node: '>=18'} + peerDependencies: + postcss: 8.5.10 + '@csstools/postcss-text-decoration-shorthand@4.0.3': resolution: {integrity: sha512-KSkGgZfx0kQjRIYnpsD7X2Om9BUXX/Kii77VBifQW9Ih929hK0KNjVngHDH0bFB9GmfWcR9vJYJJRvw/NQjkrA==} engines: {node: '>=18'} @@ -4107,8 +4118,8 @@ packages: resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==} engines: {node: '>=10.0.0'} - '@docsearch/core@4.3.1': - resolution: {integrity: sha512-ktVbkePE+2h9RwqCUMbWXOoebFyDOxHqImAqfs+lC8yOU+XwEW4jgvHGJK079deTeHtdhUNj0PXHSnhJINvHzQ==} + '@docsearch/core@4.6.3': + resolution: {integrity: sha512-rUOujwIpxJRgD7+kicVsI3D5sqBvdiRTquzWBpTEXZs8ZXfGbfzpus5HqumaNYTppN2HvH8E2yNuRwYdHJeOlA==} peerDependencies: '@types/react': '>= 16.8.0 < 20.0.0' react: '>= 16.8.0 < 20.0.0' @@ -4121,11 +4132,11 @@ packages: react-dom: optional: true - '@docsearch/css@4.3.2': - resolution: {integrity: sha512-K3Yhay9MgkBjJJ0WEL5MxnACModX9xuNt3UlQQkDEDZJZ0+aeWKtOkxHNndMRkMBnHdYvQjxkm6mdlneOtU1IQ==} + '@docsearch/css@4.6.3': + resolution: {integrity: sha512-nlOwcXcsNAptQl4vlL4MA78qNJKO0Qlds5GuBjCoePgkebTXLSf8Qt1oyZ3YBshYupKXG9VRGEsk1zr23d+bzQ==} - '@docsearch/react@4.3.2': - resolution: {integrity: sha512-74SFD6WluwvgsOPqifYOviEEVwDxslxfhakTlra+JviaNcs7KK/rjsPj89kVEoQc9FUxRkAofaJnHIR7pb4TSQ==} + '@docsearch/react@4.6.3': + resolution: {integrity: sha512-Bg2wdDsoQVlNCcEKuEJAU04tvHCqgx8rIu+uIoM4pRtcx3TBKJuXutJik3LTA8LRc9YEyHkrYUrmcC0D7BYf+g==} peerDependencies: '@types/react': '>= 16.8.0 < 20.0.0' react: '>= 16.8.0 < 20.0.0' @@ -4315,8 +4326,8 @@ packages: resolution: {integrity: sha512-3ojeJry9xBYdJO6qoyyzqeJFSJBVx2mXhyDzSdjwL2+URFQMf+h25gG38iswGImicK0ELjTd1EL2xzk8hf3QPw==} engines: {node: '>=20.0'} - '@dr.pogodin/react-helmet@3.0.4': - resolution: {integrity: sha512-TesfNpzO12qcbyqKyWGDIYTdwVxD3pJv75rE/zhKUq/k9yxeP0BpOdHQ5cc1zA3j/GyY7CuIZjAUXmsxqI1/yw==} + '@dr.pogodin/react-helmet@3.2.2': + resolution: {integrity: sha512-ejHvL56wsjNRfzOWvBzBXZXKCls2beMIf63Cz1yEMi5OFfsdBQHEiy0ux6665qzPXXAqHws4tnnWRiA/fpaQBg==} peerDependencies: react: '19' @@ -4341,8 +4352,8 @@ packages: '@emotion/unitless@0.7.5': resolution: {integrity: sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==} - '@envelop/core@5.4.0': - resolution: {integrity: sha512-/1fat63pySE8rw/dZZArEVytLD90JApY85deDJ0/34gm+yhQ3k70CloSUevxoOE4YCGveG3s9SJJfQeeB4NAtQ==} + '@envelop/core@5.5.1': + resolution: {integrity: sha512-3DQg8sFskDo386TkL5j12jyRAdip/8yzK3x7YGbZBgobZ4aKXrvDU0GppU0SnmrpQnNaiTUsxBs9LKkwQ/eyvw==} engines: {node: '>=18.0.0'} '@envelop/instrumentation@1.0.0': @@ -4607,12 +4618,22 @@ packages: resolution: {integrity: sha512-RiwLMc89lTjvyLEivZ/qxAC5nBHoS2CtsWFSOsN35sxG9zoo5Z+JsFHM8MlvmO9yt+MJNIyC5MLE1rsbOphlag==} engines: {node: '>=18.0.0'} - '@graphql-tools/apollo-engine-loader@8.0.27': - resolution: {integrity: sha512-XT4BvqmRXkVaT8GgNb9/pr8u4M4vTcvGuI2GlvK+albrJNIV8VxTpsdVYma3kw+VtSIYrxEvLixlfDA/KdmDpg==} + '@graphql-hive/signal@2.0.0': + resolution: {integrity: sha512-Pz8wB3K0iU6ae9S1fWfsmJX24CcGeTo6hE7T44ucmV/ALKRj+bxClmqrYcDT7v3f0d12Rh4FAXBb6gon+WkDpQ==} + engines: {node: '>=20.0.0'} + + '@graphql-tools/apollo-engine-loader@8.0.30': + resolution: {integrity: sha512-hUydKGGECrWloERMmfoMzHZi12X99AM9geCGF5XVsv4iMRl/Iyuet24th4kC9bZ8MlAdCwAwtUsCyv9uRfYwSA==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/batch-execute@10.0.8': + resolution: {integrity: sha512-Kobt37qrVTFhX4HUK5/vPgMXFw/5f97AzmAlfmDBSRh/GnoAmLKCb48FrEI3gdeIwZB2fEhVHJyDqsojldnLQA==} + engines: {node: '>=20.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/batch-execute@8.5.1': resolution: {integrity: sha512-hRVDduX0UDEneVyEWtc2nu5H2PxpfSfM/riUlgZvo/a/nG475uyehxR5cFGvTEPEQUKY3vGIlqvtRigzqTfCew==} peerDependencies: @@ -4624,8 +4645,8 @@ packages: peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/code-file-loader@8.1.27': - resolution: {integrity: sha512-q3GDbm+7m3DiAnqxa+lYMgYZd49+ez6iGFfXHmzP6qAnf5WlBxRNKNjNVuxOgoV30DCr+vOJfoXeU7VN1qqGWQ==} + '@graphql-tools/code-file-loader@8.1.32': + resolution: {integrity: sha512-gR5mNQjn0BugDL8a4A+ovS2KEvU52RNOGnbwiq9oWAEHiSv7iqJu77bpWARTzlE1ZFPK5MSQe9218+1t5PbXmQ==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 @@ -4636,6 +4657,12 @@ packages: peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/delegate@12.0.17': + resolution: {integrity: sha512-pIVszWEm69rF+bkM0jUyM1KdIxGzygQbIp1GtV1CuEGRB8lN1uFY1eeTzM2nudHXg8cj+XSVO8cnRpph+o8Dmg==} + engines: {node: '>=20.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/delegate@8.8.1': resolution: {integrity: sha512-NDcg3GEQmdEHlnF7QS8b4lM1PSF+DKeFcIlLEfZFBvVq84791UtJcDj8734sIHLukmyuAxXMfA1qLd2l4lZqzA==} peerDependencies: @@ -4659,32 +4686,50 @@ packages: peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/executor-common@1.0.6': + resolution: {integrity: sha512-23/K5C+LSlHDI0mj2SwCJ33RcELCcyDUgABm1Z8St7u/4Z5+95i925H/NAjUyggRjiaY8vYtNiMOPE49aPX1sg==} + engines: {node: '>=20.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/executor-graphql-ws@2.0.7': resolution: {integrity: sha512-J27za7sKF6RjhmvSOwOQFeNhNHyP4f4niqPnerJmq73OtLx9Y2PGOhkXOEB0PjhvPJceuttkD2O1yMgEkTGs3Q==} engines: {node: '>=18.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/executor-graphql-ws@3.1.5': + resolution: {integrity: sha512-WXRsfwu9AkrORD9nShrd61OwwxeQ5+eXYcABRR3XPONFIS8pWQfDJGGqxql9/227o/s0DV5SIfkBURb5Knzv+A==} + engines: {node: '>=20.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/executor-http@1.3.3': resolution: {integrity: sha512-LIy+l08/Ivl8f8sMiHW2ebyck59JzyzO/yF9SFS4NH6MJZUezA1xThUXCDIKhHiD56h/gPojbkpcFvM2CbNE7A==} engines: {node: '>=18.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/executor-legacy-ws@1.1.24': - resolution: {integrity: sha512-wfSpOJCxeBcwVXy3JS4TB4oLwVICuVKPlPQhcAjTRPWYwKerE0HosgUzxCX1fEQ4l1B1OMgKWRglGpoXExKqsQ==} + '@graphql-tools/executor-http@3.3.0': + resolution: {integrity: sha512-IkKXIjSg9U8MNsQUBVJAXE4+LSxaQ0cs7p5JTALLGDABY1o17vPDRwWALsX81AXD5dY27ihi/+OhGMueW/Fopg==} + engines: {node: '>=20.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/executor-legacy-ws@1.1.28': + resolution: {integrity: sha512-O4uj93GG9iUb3s32eyhUohvyfA8mLhN8FvGzEdK628hFQPhZN75yurtVFrR08DHex71mQ3wYCCFkErpwdJbDDQ==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/executor@1.5.0': - resolution: {integrity: sha512-3HzAxfexmynEWwRB56t/BT+xYKEYLGPvJudR1jfs+XZX8bpfqujEhqVFoxmkpEE8BbFcKuBNoQyGkTi1eFJ+hA==} + '@graphql-tools/executor@1.5.3': + resolution: {integrity: sha512-mgBFC0bsrZPZLu9EnydpMnAuQ8Iiq0CEbUcsmvXsm2/iYektGHDN/+bmb7hicA6dWZtdPfklYJmr21WD0GnOfA==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/git-loader@8.0.31': - resolution: {integrity: sha512-xVHM1JecjpU2P0aOj/IaIUc3w6It8sWOdrJElWFZdY9yfWRqXFYwfemtsn/JOrJDIJXYeGpJ304OeqJD5vFIEw==} + '@graphql-tools/git-loader@8.0.36': + resolution: {integrity: sha512-PDDakesRu8FJYHJLf9/gkTweh8M19Bymz9i+vOlk9OTs9XmNcCqKM+1S610KX2AodvuBFz/xbesjTtTJIppLPg==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 @@ -4695,32 +4740,32 @@ packages: peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/graphql-file-loader@8.1.8': - resolution: {integrity: sha512-dZi9Cw+NWEzJAqzIUON9qjZfjebjcoT4H6jqLkEoAv6kRtTq52m4BLXgFWjMHU7PNLE9OOHB9St7UeZQL+GYrw==} + '@graphql-tools/graphql-file-loader@8.1.14': + resolution: {integrity: sha512-CfAcsSEVkkHfEXLFzrd5rUYpcQEGWNV8lfc1Tb1p5m9HnYICzDDH08I5V33iMrEDza3GuujjjRBYqplBkqwIow==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/graphql-tag-pluck@8.3.26': - resolution: {integrity: sha512-hLsX++KA3YR/PnNJGBq1weSAY8XUUAQFfOSHanLHA2qs5lcNgU6KWbiLiRsJ/B/ZNi2ZO687dhzeZ4h4Yt0V6Q==} + '@graphql-tools/graphql-tag-pluck@8.3.31': + resolution: {integrity: sha512-ema2RRPZGj8TKruNElyDBHVCNFMxioGIVfLBuiA+GdfmRGt95b/i7Uksnj4EwItA6MCmhxokxZoa/fl6mJt3tw==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/import@7.1.8': - resolution: {integrity: sha512-aUKHMbaeHhCkS867mNCk9sJuvd9xE3Ocr+alwdvILkDxHf7Xaumx4mK8tN9FAXeKhQWGGD5QpkIBnUzt2xoX/A==} + '@graphql-tools/import@7.1.14': + resolution: {integrity: sha512-aqLcu04aEidszbXM6M0PWWL8bP17eX9sxXwjYWpglLvIRd4NFqb3C9QzBY8pleqXNMtWqXktlm9BQjevgSrirQ==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/json-file-loader@8.0.25': - resolution: {integrity: sha512-Dnr9z818Kdn3rfoZO/+/ZQUqWavjV7AhEp4edV1mGsX+J1HFkNC3WMl6MD3W0hth2HWLQpCFJDdOPnchxnFNfA==} + '@graphql-tools/json-file-loader@8.0.28': + resolution: {integrity: sha512-qgCsSkPArnjlNkcYpgGKiXxCTNkrAT9E+l1LhR+Por2jTlKBBeZ8stortkQ/PNDDjuL0WPrLQmHKhNPHabnB3A==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/load@8.1.7': - resolution: {integrity: sha512-RxrHOC4vVI50+Q1mwgpmTVCB/UDDYVEGD/g/hP3tT2BW9F3rJ7Z3Lmt/nGfPQuWPao3w6vgJ9oSAWtism7CU5w==} + '@graphql-tools/load@8.1.10': + resolution: {integrity: sha512-hjcvfEFtwtc8vGi46wtpmGWadNzfEhzbjqinyFIZuIZPlR4aYdWQtqWtY/RMM4Ew4t1USkMNm6xrqC2TH1vCSA==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 @@ -4730,8 +4775,8 @@ packages: peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/merge@9.1.6': - resolution: {integrity: sha512-bTnP+4oom4nDjmkS3Ykbe+ljAp/RIiWP3R35COMmuucS24iQxGLa9Hn8VMkLIoaoPxgz6xk+dbC43jtkNsFoBw==} + '@graphql-tools/merge@9.1.9': + resolution: {integrity: sha512-iHUWNjRHeQRYdgIMIuChThOwoKzA9vrzYeslgfBo5eUYEyHGZCoDPjAavssoYXLwstYt1dZj2J22jSzc2DrN0Q==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 @@ -4749,14 +4794,14 @@ packages: peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/relay-operation-optimizer@7.0.26': - resolution: {integrity: sha512-cVdS2Hw4hg/WgPVV2wRIzZM975pW5k4vdih3hR4SvEDQVr6MmozmlTQSqzMyi9yg8LKTq540Oz3bYQa286yGmg==} + '@graphql-tools/relay-operation-optimizer@7.1.4': + resolution: {integrity: sha512-cwOD/GEo/R//1uGCP0/urIxsMFoUgzkJVyMt9BDM2HhQhU6rSgH5l6lFukAFTJyPJVdyeOdYm2i0Jj5vYWbHTw==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/schema@10.0.30': - resolution: {integrity: sha512-yPXU17uM/LR90t92yYQqn9mAJNOVZJc0nQtYeZyZeQZeQjwIGlTubvvoDL0fFVk+wZzs4YQOgds2NwSA4npodA==} + '@graphql-tools/schema@10.0.33': + resolution: {integrity: sha512-O6P3RIftO0jafnSsFAqpjurUuUxJ43s/AdPVLQsBkI6y4Ic/tKm4C1Qm1KKQsCDTOxXPJClh/v3g7k7yLKCFBQ==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 @@ -4772,12 +4817,24 @@ packages: peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/url-loader@9.1.2': + resolution: {integrity: sha512-pVSiPrfWQKb3jq23Pl7EjbB2uv3tgZLnWo/axkmg4itAEZ5s/vV/jKa8P1HZzUnSVUTR+8tcEZVeNsUbzFCbkg==} + engines: {node: '>=20.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/utils@10.11.0': resolution: {integrity: sha512-iBFR9GXIs0gCD+yc3hoNswViL1O5josI33dUqiNStFI/MHLCEPduasceAcazRH77YONKNiviHBV8f7OgcT4o2Q==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/utils@11.1.0': + resolution: {integrity: sha512-PtFVG4r8Z2LEBSaPYQMusBiB3o6kjLVJyjCLbnWem/SpSuM21v6LTmgpkXfYU1qpBV2UGsFyuEnSJInl8fR1Ag==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/utils@8.9.0': resolution: {integrity: sha512-pjJIWH0XOVnYGXCqej8g/u/tsfV4LvLlj0eATKQu5zwnxd/TiTHq7Cg313qUPTFFHZ3PP5wJ15chYVtLDwaymg==} peerDependencies: @@ -4789,6 +4846,12 @@ packages: peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/wrap@11.1.16': + resolution: {integrity: sha512-JW1XGFTmltXa537J2bAr8dN/n6EWwiBuM9q8V8mWqZ0eWrf++/TT3/mlV3c0M8B8nrS/lqSsotIwPAtVZR8sWQ==} + engines: {node: '>=20.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-typed-document-node/core@3.2.0': resolution: {integrity: sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==} peerDependencies: @@ -4798,8 +4861,8 @@ packages: resolution: {integrity: sha512-k9Dj3DV/itK9D06Y8f190Qgop7/Ui+D0njFV3LHMPwPT75DpXLQohE9Wmz0QElrJnzsjB7KPWiKJbOl7IPDArQ==} engines: {node: '>=12.10.0'} - '@grpc/proto-loader@0.8.0': - resolution: {integrity: sha512-rc1hOQtjIWGxcxpb9aHAfLpIctjEnsDehj0DAiVfBlmT84uvR0uUtN2hEi/ecvWVjXUGf5qPF4qEgiLOx1YIMQ==} + '@grpc/proto-loader@0.8.1': + resolution: {integrity: sha512-wtF6h+DY6M3YaDBPAmvuuA6jV8Sif9MjtOI5euKFWRgCDl5PeDpPsHR9u2l6St5ceY8AZgoNDww5+HvEsXFsGg==} engines: {node: '>=6'} hasBin: true @@ -4836,8 +4899,12 @@ packages: resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} - '@istanbuljs/schema@0.1.3': - resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + '@isaacs/cliui@9.0.0': + resolution: {integrity: sha512-AokJm4tuBHillT+FpMtxQ60n8ObyXBatq7jD2/JA9dxbDDokKQm8KMht5ibGzLVU9IJDIKK4TPKgMHEYMn3lMg==} + engines: {node: '>=18'} + + '@istanbuljs/schema@0.1.6': + resolution: {integrity: sha512-+Sg6GCR/wy1oSmQDFq4LQDAhm3ETKnorxN+y5nbLULOR3P0c14f2Wurzj3/xqPXtasLFfHd5iRFQ7AJt4KH2cw==} engines: {node: '>=8'} '@jest/schemas@29.6.3': @@ -4876,8 +4943,8 @@ packages: '@jridgewell/trace-mapping@0.3.31': resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} - '@js-joda/core@5.6.5': - resolution: {integrity: sha512-3zwefSMwHpu8iVUW8YYz227sIv6UFqO31p1Bf1ZH/Vom7CmNyUsXjDBlnNzcuhmOL1XfxZ3nvND42kR23XlbcQ==} + '@js-joda/core@5.7.0': + resolution: {integrity: sha512-WBu4ULVVxySLLzK1Ppq+OdfP+adRS4ntmDQT915rzDJ++i95gc2jZkM5B6LWEAwN3lGXpfie3yPABozdD3K3Vg==} '@js-sdsl/ordered-map@4.4.2': resolution: {integrity: sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==} @@ -4888,36 +4955,120 @@ packages: peerDependencies: tslib: '2' + '@jsonjoy.com/base64@17.67.0': + resolution: {integrity: sha512-5SEsJGsm15aP8TQGkDfJvz9axgPwAEm98S5DxOuYe8e1EbfajcDmgeXXzccEjh+mLnjqEKrkBdjHWS5vFNwDdw==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + '@jsonjoy.com/buffers@1.2.1': resolution: {integrity: sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA==} engines: {node: '>=10.0'} peerDependencies: tslib: '2' + '@jsonjoy.com/buffers@17.67.0': + resolution: {integrity: sha512-tfExRpYxBvi32vPs9ZHaTjSP4fHAfzSmcahOfNxtvGHcyJel+aibkPlGeBB+7AoC6hL7lXIE++8okecBxx7lcw==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + '@jsonjoy.com/codegen@1.0.0': resolution: {integrity: sha512-E8Oy+08cmCf0EK/NMxpaJZmOxPqM+6iSe2S4nlSBrPZOORoDJILxtbSUEDKQyTamm/BVAhIGllOBNU79/dwf0g==} engines: {node: '>=10.0'} peerDependencies: tslib: '2' + '@jsonjoy.com/codegen@17.67.0': + resolution: {integrity: sha512-idnkUplROpdBOV0HMcwhsCUS5TRUi9poagdGs70A6S4ux9+/aPuKbh8+UYRTLYQHtXvAdNfQWXDqZEx5k4Dj2Q==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@jsonjoy.com/fs-core@4.57.6': + resolution: {integrity: sha512-uI++Wx6VkBJqVmkb4ZeExwAVpZiA2Do5NrEtXoDk0Pdvce3ytFXJoviT1sLOj16+qDIMnD5nWPfOhVpnDmRJKg==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@jsonjoy.com/fs-fsa@4.57.6': + resolution: {integrity: sha512-pKkw/yC5CzSZKhIIUIsH1przOa+K5jGmZIg1sWaSF24JojyrUFbjcQv7QrcGAudriei6HQ6R0BFj+V8NbQinJw==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@jsonjoy.com/fs-node-builtins@4.57.6': + resolution: {integrity: sha512-V4DgEFT3Cg5S9fCMOZSCVdTxdJWWLBO0WnAazV7hnCM96u5zXHyW/ubDAfcSVwqjkMJ50W1Y44IXtxRoIwaCVg==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@jsonjoy.com/fs-node-to-fsa@4.57.6': + resolution: {integrity: sha512-+JptNw3iifihxH2rEXrninDzX4FFVW8JD/wPR8GbJPAeL9CQUSblrlumOPB5gZuS7tYRX+PJPLtT7XzKoRhv/Q==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@jsonjoy.com/fs-node-utils@4.57.6': + resolution: {integrity: sha512-foyUrfS7WmYEUzqYXSNxmJBcSj04TABrkpFabwO9SCDCpVCfJ+qG+2sk5FjfiflG2n0SDFZDCJ6vYlJAEpxJFg==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@jsonjoy.com/fs-node@4.57.6': + resolution: {integrity: sha512-Kbn1jdkvDN4F2+BhoB6mMu7NCbhP0bgA5NcI1aJj/Q5UcU+I1JLLW+dEQean33iV4tXv35AzBVKPICnDltBpxw==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@jsonjoy.com/fs-print@4.57.6': + resolution: {integrity: sha512-96eAn4Dudtt67LTeuU47yUD+pg9/G/oKpI10zei9ljk3X3WK4lYKc+n3cpaPCAbKPzoyfxl0mXm8f8Y7BOSFXw==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@jsonjoy.com/fs-snapshot@4.57.6': + resolution: {integrity: sha512-V57CMzbOgTzUWGOWQ8GzHQdpJP6JnrYVNCtTBNxVYEnlVRvo4uEJqHhtAT8vhDFrIuJOXLrTL1Fki4h5oI7xxg==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + '@jsonjoy.com/json-pack@1.21.0': resolution: {integrity: sha512-+AKG+R2cfZMShzrF2uQw34v3zbeDYUqnQ+jg7ORic3BGtfw9p/+N6RJbq/kkV8JmYZaINknaEQ2m0/f693ZPpg==} engines: {node: '>=10.0'} peerDependencies: tslib: '2' + '@jsonjoy.com/json-pack@17.67.0': + resolution: {integrity: sha512-t0ejURcGaZsn1ClbJ/3kFqSOjlryd92eQY465IYrezsXmPcfHPE/av4twRSxf6WE+TkZgLY+71vCZbiIiFKA/w==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + '@jsonjoy.com/json-pointer@1.0.2': resolution: {integrity: sha512-Fsn6wM2zlDzY1U+v4Nc8bo3bVqgfNTGcn6dMgs6FjrEnt4ZCe60o6ByKRjOGlI2gow0aE/Q41QOigdTqkyK5fg==} engines: {node: '>=10.0'} peerDependencies: tslib: '2' + '@jsonjoy.com/json-pointer@17.67.0': + resolution: {integrity: sha512-+iqOFInH+QZGmSuaybBUNdh7yvNrXvqR+h3wjXm0N/3JK1EyyFAeGJvqnmQL61d1ARLlk/wJdFKSL+LHJ1eaUA==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + '@jsonjoy.com/util@1.9.0': resolution: {integrity: sha512-pLuQo+VPRnN8hfPqUTLTHk126wuYdXVxE6aDmjSeV4NCAgyxWbiOIeNJVtID3h1Vzpoi9m4jXezf73I6LgabgQ==} engines: {node: '>=10.0'} peerDependencies: tslib: '2' + '@jsonjoy.com/util@17.67.0': + resolution: {integrity: sha512-6+8xBaz1rLSohlGh68D1pdw3AwDi9xydm8QNlAFkvnavCJYSze+pxoW2VKP8p308jtlMRLs5NTHfPlZLd4w7ew==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + '@leichtgewicht/ip-codec@2.0.5': resolution: {integrity: sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==} @@ -4936,17 +5087,11 @@ packages: '@microsoft/applicationinsights-web-snippet@1.0.1': resolution: {integrity: sha512-2IHAOaLauc8qaAitvWS+U931T+ze+7MNWrDHY47IENP5y2UA0vqJDu67kWZDdpCN1fFC77sfgfB+HV7SrKshnQ==} - '@mongodb-js/saslprep@1.3.2': - resolution: {integrity: sha512-QgA5AySqB27cGTXBFmnpifAi7HxoGUeezwo6p9dI03MuDB6Pp33zgclqVb6oVK3j6I9Vesg0+oojW2XxB59SGg==} - - '@napi-rs/wasm-runtime@1.1.2': - resolution: {integrity: sha512-sNXv5oLJ7ob93xkZ1XnxisYhGYXfaG9f65/ZgYuAu3qt7b3NadcOEhLvx28hv31PgX8SZJRYrAIPQilQmFpLVw==} - peerDependencies: - '@emnapi/core': ^1.7.1 - '@emnapi/runtime': ^1.7.1 + '@mongodb-js/saslprep@1.4.11': + resolution: {integrity: sha512-o9rAHc0IpIjuPSxRutWpE1F62x7n+4mVS4rCNHkzhIUMQcc18bb6xEq5wd2NdN0WjepIyXIppRshYI2kQDOZVA==} - '@napi-rs/wasm-runtime@1.1.4': - resolution: {integrity: sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==} + '@napi-rs/wasm-runtime@1.1.5': + resolution: {integrity: sha512-AWPoBRJ9tsnVhor4sjO7rkni+7p+2IAEFj6cx06UgP10jkQHqay/36uRV/bFkgrh18D9vb4cr8Q0Pthskgzy+Q==} peerDependencies: '@emnapi/core': ^1.7.1 '@emnapi/runtime': ^1.7.1 @@ -4962,8 +5107,8 @@ packages: resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==} engines: {node: ^14.21.3 || >=16} - '@nodable/entities@2.1.0': - resolution: {integrity: sha512-nyT7T3nbMyBI/lvr6L5TyWbFJAI9FTgVRakNoBqCD+PmID8DzFrrNdLLtHMwMszOtqZa8PAOV24ZqDnQrhQINA==} + '@nodable/entities@2.1.1': + resolution: {integrity: sha512-Pig3HxDIoMgjdEH8OCf/dkcTmLFjJRjWuq8jSnklu284/TKOPibSRERmOykiwmyXTtv61mP+44f3GMx0tLAyjg==} '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} @@ -4981,6 +5126,10 @@ packages: resolution: {integrity: sha512-IKJBQxh91qJ+3ssRly5hYEJ8NDHu9oY/B1PXVSCWf7zytmYO9RNLB0Ox9XQ/fJ8m6gY6Q6NtBWlmXfaXt5Uc4Q==} engines: {node: '>=8.0.0'} + '@opentelemetry/api-logs@0.211.0': + resolution: {integrity: sha512-swFdZq8MCdmdR22jTVGQDhwqDzcI4M10nhjXkLr1EsIzXgZBqm4ZlmmcWsg3TSNf+3mzgOiqveXmBLZuDi2Lgg==} + engines: {node: '>=8.0.0'} + '@opentelemetry/api-logs@0.52.1': resolution: {integrity: sha512-qnSqB2DQ9TPP96dl8cDubDvrUyWc0/sK81xHTK8eSUspzDM3bsewX903qclQFvVhgStjRWdC5bLb3kQqMkfV5A==} engines: {node: '>=14'} @@ -5011,8 +5160,8 @@ packages: peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' - '@opentelemetry/core@2.2.0': - resolution: {integrity: sha512-FuabnnUm8LflnieVxs6eP7Z383hgQU4W1e3KJS6aOG3RxWxcHyBxH8fDMHNgu/gFx/M2jvTOW/4/PHhLz6bjWw==} + '@opentelemetry/core@2.7.1': + resolution: {integrity: sha512-QAqIj32AtK6+pEVNG7EOVxHdE06RP+FM5qpiEJ4RtDcFIqKUZHYhl7/7UY5efhwmwNAg7j8QbJVBLxMerc0+gw==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' @@ -5119,6 +5268,12 @@ packages: peerDependencies: '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation@0.211.0': + resolution: {integrity: sha512-h0nrZEC/zvI994nhg7EgQ8URIHt0uDTwN90r3qQUdZORS455bbx+YebnGeEuFghUT0HlJSrLF4iHw67f+odY+Q==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation@0.52.1': resolution: {integrity: sha512-uXJbYU/5/MBHjMp1FqrILLRuiJCs3Ofk0MeRDk8g1S1gD47U8X3JnSwcMO1rtRo1x1a7zKaQHaoYu49p/4eSKw==} engines: {node: '>=14'} @@ -5167,8 +5322,8 @@ packages: peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' - '@opentelemetry/resources@2.2.0': - resolution: {integrity: sha512-1pNQf/JazQTMA0BiO5NINUzH0cbLbbl7mntLa4aJNmCCXSj0q03T5ZXXL0zw4G55TjdL9Tz32cznGClf+8zr5A==} + '@opentelemetry/resources@2.7.1': + resolution: {integrity: sha512-DeT6KKolmC4e/dRQvMQ/RwlnzhaqeiFOXY5ngoOPJ07GgVVKxZOg9EcrNZb5aTzUn+iCrJldAgOfQm1O/QfPAQ==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': '>=1.3.0 <1.10.0' @@ -5197,8 +5352,8 @@ packages: peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' - '@opentelemetry/sdk-trace-base@2.2.0': - resolution: {integrity: sha512-xWQgL0Bmctsalg6PaXExmzdedSp3gyKV8mQBwK/j9VGdCDu2fmXIb2gAehBKbkXCpJ4HPkgv3QfoJWRT4dHWbw==} + '@opentelemetry/sdk-trace-base@2.7.1': + resolution: {integrity: sha512-NAYIlsF8MPUsKqJMiDQJTMPOmlbawC1Iz/omMLygZ1C9am8fTKYjTaI+OZM+WTY3t3Glo0wnOg/6/pac6RGPPw==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': '>=1.3.0 <1.10.0' @@ -5209,8 +5364,8 @@ packages: peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' - '@opentelemetry/sdk-trace-web@2.2.0': - resolution: {integrity: sha512-x/LHsDBO3kfqaFx5qSzBljJ5QHsRXrvS4MybBDy1k7Svidb8ZyIPudWVzj3s5LpPkYZIgi9e+7tdsNCnptoelw==} + '@opentelemetry/sdk-trace-web@2.7.1': + resolution: {integrity: sha512-K806OouCSOjMd8Nr7+ZCq3QT22tdAzzS/7h8vprfiKjkgFQ99/dvwU8d12WJANA6D5Qtme65hyBAqAu9CkQuxQ==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' @@ -5227,22 +5382,16 @@ packages: resolution: {integrity: sha512-/UhIkaZgPutTFmQ7RnIJGgDXZmtEJ7Dvi86xNTFWcnRxVRNk/aotsqDJYeEvDP+FSMB2SdW+pQzNMcWP0rwuNA==} engines: {node: '>=14'} - '@oxc-parser/binding-android-arm-eabi@0.121.0': - resolution: {integrity: sha512-n07FQcySwOlzap424/PLMtOkbS7xOu8nsJduKL8P3COGHKgKoDYXwoAHCbChfgFpHnviehrLWIPX0lKGtbEk/A==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm] - os: [android] - '@oxc-parser/binding-android-arm-eabi@0.127.0': resolution: {integrity: sha512-0LC7ye4hvqbIKxAzThzvswgHLFu2AURKzYLeSVvLdu2TBOYWQDmHnTqPLeA597BcUCxiLqLsS4CJ5uoI5WYWCQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [android] - '@oxc-parser/binding-android-arm64@0.121.0': - resolution: {integrity: sha512-/Dd1xIXboYAicw+twT2utxPD7bL8qh7d3ej0qvaYIMj3/EgIrGR+tSnjCUkiCT6g6uTC0neSS4JY8LxhdSU/sA==} + '@oxc-parser/binding-android-arm-eabi@0.130.0': + resolution: {integrity: sha512-h/xYU8/7ADWzVSf5I+YalLpj33LOy9CI/zgbJNIZ5eunRBG+Czqa3lZsvuPHHf3rOt6z1c5+UzoxjbAzAvhwVw==} engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] + cpu: [arm] os: [android] '@oxc-parser/binding-android-arm64@0.127.0': @@ -5251,11 +5400,11 @@ packages: cpu: [arm64] os: [android] - '@oxc-parser/binding-darwin-arm64@0.121.0': - resolution: {integrity: sha512-A0jNEvv7QMtCO1yk205t3DWU9sWUjQ2KNF0hSVO5W9R9r/R1BIvzG01UQAfmtC0dQm7sCrs5puixurKSfr2bRQ==} + '@oxc-parser/binding-android-arm64@0.130.0': + resolution: {integrity: sha512-oFWFJrsGv9siFM4HjMqKNB7IuIZD/SMmZdCXl8xyx7lDplGvPKyewpOo272rSWgMXe2Wx7bWI0Yj+gkHv4qbeg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] - os: [darwin] + os: [android] '@oxc-parser/binding-darwin-arm64@0.127.0': resolution: {integrity: sha512-obCE8B7ISKkJidjlhv9xRGJPOSDG2Yu6PRga9Ruaz35uintHxbp1Ki/Yc71wx4rj3Edrm0a1kzG1TAwit0wFpg==} @@ -5263,10 +5412,10 @@ packages: cpu: [arm64] os: [darwin] - '@oxc-parser/binding-darwin-x64@0.121.0': - resolution: {integrity: sha512-SsHzipdxTKUs3I9EOAPmnIimEeJOemqRlRDOp9LIj+96wtxZejF51gNibmoGq8KoqbT1ssAI5po/E3J+vEtXGA==} + '@oxc-parser/binding-darwin-arm64@0.130.0': + resolution: {integrity: sha512-sGUzupdTplK9jQg7eJZ878HfEgQjJNBc6dAYVWJ9W5aU+J8rLfRJhTVsKThiu1pNwm6Y1qKCcbC6WhNWSXR3Ig==} engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] + cpu: [arm64] os: [darwin] '@oxc-parser/binding-darwin-x64@0.127.0': @@ -5275,11 +5424,11 @@ packages: cpu: [x64] os: [darwin] - '@oxc-parser/binding-freebsd-x64@0.121.0': - resolution: {integrity: sha512-v1APOTkCp+RWOIDAHRoaeW/UoaHF15a60E8eUL6kUQXh+i4K7PBwq2Wi7jm8p0ymID5/m/oC1w3W31Z/+r7HQw==} + '@oxc-parser/binding-darwin-x64@0.130.0': + resolution: {integrity: sha512-PsB4cdCISbC00Uy8eiD8bc2AkGWjZqrSrJnkBFuG2ptrrf6mZ2F5gLFSjOAVMMgZPg8B1D7OydJwLWSfyI2Plg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] - os: [freebsd] + os: [darwin] '@oxc-parser/binding-freebsd-x64@0.127.0': resolution: {integrity: sha512-SDQ/3MQFw58fqQz3Z1PhSKFF3JoCF4gmlNjziDm8X02tTahCw0qJbd7FGPDKw1i4VTBZene9JPyC3mHtSvi+wA==} @@ -5287,11 +5436,11 @@ packages: cpu: [x64] os: [freebsd] - '@oxc-parser/binding-linux-arm-gnueabihf@0.121.0': - resolution: {integrity: sha512-PmqPQuqHZyFVWA4ycr0eu4VnTMmq9laOHZd+8R359w6kzuNZPvmmunmNJ8ybkm769A0nCoVp3TJ6dUz7B3FYIQ==} + '@oxc-parser/binding-freebsd-x64@0.130.0': + resolution: {integrity: sha512-DgABp3l38hS77JbXCV4qk1+n6DPym5u8zzwuweokezm2tX194nDSJDENbDRECxVsiNbprKATLbk+Z5wlHT0OHw==} engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm] - os: [linux] + cpu: [x64] + os: [freebsd] '@oxc-parser/binding-linux-arm-gnueabihf@0.127.0': resolution: {integrity: sha512-Av+D1MIqzV0YMGPT9we2SIZaMKD7Cxs4CvXSx/yxaWHewZjYEjScpOf5igc8IILASViw4WTnjlwUdI1KzVtDHQ==} @@ -5299,8 +5448,8 @@ packages: cpu: [arm] os: [linux] - '@oxc-parser/binding-linux-arm-musleabihf@0.121.0': - resolution: {integrity: sha512-vF24htj+MOH+Q7y9A8NuC6pUZu8t/C2Fr/kDOi2OcNf28oogr2xadBPXAbml802E8wRAVfbta6YLDQTearz+jw==} + '@oxc-parser/binding-linux-arm-gnueabihf@0.130.0': + resolution: {integrity: sha512-4Kn3CTEmwFrzhTSC/JuUW16qovmaMdX7jeSKbL8w0pLtLww7To1a2XJi9Z5uD8QWUkfUHhqfV+VD6dVzBnWzoA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] @@ -5311,12 +5460,11 @@ packages: cpu: [arm] os: [linux] - '@oxc-parser/binding-linux-arm64-gnu@0.121.0': - resolution: {integrity: sha512-wjH8cIG2Lu/3d64iZpbYr73hREMgKAfu7fqpXjgM2S16y2zhTfDIp8EQjxO8vlDtKP5Rc7waZW72lh8nZtWrpA==} + '@oxc-parser/binding-linux-arm-musleabihf@0.130.0': + resolution: {integrity: sha512-D35KZM3F4rRu1uAFKyBlg3Gaf/ybCjyaPR1hfgvk5ex8NtcTmRgc0JgSighEyNg96TPrFhemFba68SZuxaha8w==} engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] + cpu: [arm] os: [linux] - libc: [glibc] '@oxc-parser/binding-linux-arm64-gnu@0.127.0': resolution: {integrity: sha512-qdOfTcT6SY8gsJrrV92uyEUyjqMGPpIB5JZUG6QN5dukYd+7/j0kX6MwK1DgQj39jtUYixxPiaRUiEN1+0CXgQ==} @@ -5325,12 +5473,12 @@ packages: os: [linux] libc: [glibc] - '@oxc-parser/binding-linux-arm64-musl@0.121.0': - resolution: {integrity: sha512-qT663J/W8yQFw3dtscbEi9LKJevr20V7uWs2MPGTnvNZ3rm8anhhE16gXGpxDOHeg9raySaSHKhd4IGa3YZvuw==} + '@oxc-parser/binding-linux-arm64-gnu@0.130.0': + resolution: {integrity: sha512-Q9o7oVlo955KHwS8l1u0bCzIx+JsZUA3XToLXC+MsMhye/9LeBQbt84nh120cl2XLy+TEzvugYDiHShg5yaX6Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] - libc: [musl] + libc: [glibc] '@oxc-parser/binding-linux-arm64-musl@0.127.0': resolution: {integrity: sha512-EoTCZneNFU/P2qrpEM+RHmQwt+CvDkyGESG6qhr7KaegXLZwePfbrkCDfAk8/rhxbDUVGsZILX+2tqPzFtoFWA==} @@ -5339,12 +5487,12 @@ packages: os: [linux] libc: [musl] - '@oxc-parser/binding-linux-ppc64-gnu@0.121.0': - resolution: {integrity: sha512-mYNe4NhVvDBbPkAP8JaVS8lC1dsoJZWH5WCjpw5E+sjhk1R08wt3NnXYUzum7tIiWPfgQxbCMcoxgeemFASbRw==} + '@oxc-parser/binding-linux-arm64-musl@0.130.0': + resolution: {integrity: sha512-EiJ/gC0ljbcwVpycC8YWw6ggMbtsPX8XMOt0mPx0aqWeMsNR+L9m05Flbvd5T+GlivG+GkSWQL7tM9SRFpM/dw==} engines: {node: ^20.19.0 || >=22.12.0} - cpu: [ppc64] + cpu: [arm64] os: [linux] - libc: [glibc] + libc: [musl] '@oxc-parser/binding-linux-ppc64-gnu@0.127.0': resolution: {integrity: sha512-zALjmZYgxFLHjXeudcDF0xFGNydTAtkAeXAr2EuC17ywCyFxcmQra4w0BMde0Yi/re4Bi4iwEoEXtYN7l6eBLQ==} @@ -5353,10 +5501,10 @@ packages: os: [linux] libc: [glibc] - '@oxc-parser/binding-linux-riscv64-gnu@0.121.0': - resolution: {integrity: sha512-+QiFoGxhAbaI/amqX567784cDyyuZIpinBrJNxUzb+/L2aBRX67mN6Jv40pqduHf15yYByI+K5gUEygCuv0z9w==} + '@oxc-parser/binding-linux-ppc64-gnu@0.130.0': + resolution: {integrity: sha512-b+h/lsLLurp756dMGizNs5uPaJfyEdWrTcV5t8M609jWm1DEHB1StpRXCkyvwtkJx3m+qL5BNQ0dEKan/4yGFA==} engines: {node: ^20.19.0 || >=22.12.0} - cpu: [riscv64] + cpu: [ppc64] os: [linux] libc: [glibc] @@ -5367,12 +5515,12 @@ packages: os: [linux] libc: [glibc] - '@oxc-parser/binding-linux-riscv64-musl@0.121.0': - resolution: {integrity: sha512-9ykEgyTa5JD/Uhv2sttbKnCfl2PieUfOjyxJC/oDL2UO0qtXOtjPLl7H8Kaj5G7p3hIvFgu3YWvAxvE0sqY+hQ==} + '@oxc-parser/binding-linux-riscv64-gnu@0.130.0': + resolution: {integrity: sha512-O19Cil83XAyjEFfo8WhkMwY58ALqZ7ckjGL+25mjMIuF84urWBeANH0FC8B8BsSSygWU3/1aY3ADdDbp+wlBnw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] - libc: [musl] + libc: [glibc] '@oxc-parser/binding-linux-riscv64-musl@0.127.0': resolution: {integrity: sha512-7IcC4Ao02oGpfnjt+X/oF4U2mllo2qoSkw5xxiXNKL9MCTsTiAC6616beOuehdxGcnz1bRoPC1RQ2f1GQDdN+g==} @@ -5381,12 +5529,12 @@ packages: os: [linux] libc: [musl] - '@oxc-parser/binding-linux-s390x-gnu@0.121.0': - resolution: {integrity: sha512-DB1EW5VHZdc1lIRjOI3bW/wV6R6y0xlfvdVrqj6kKi7Ayu2U3UqUBdq9KviVkcUGd5Oq+dROqvUEEFRXGAM7EQ==} + '@oxc-parser/binding-linux-riscv64-musl@0.130.0': + resolution: {integrity: sha512-BgXRVC0+83n3YzCscLQjj6nbyeBIVeZYPTI4fFMAE4WNm2+4RXhWp03IVizL7esIz36kgmT48aebk1iM+cs8sw==} engines: {node: ^20.19.0 || >=22.12.0} - cpu: [s390x] + cpu: [riscv64] os: [linux] - libc: [glibc] + libc: [musl] '@oxc-parser/binding-linux-s390x-gnu@0.127.0': resolution: {integrity: sha512-pbXIhiNFHoqWeqDNLiJ9JkpHz1IM9k4DXa66x+1GTWMG7iLxtkXgE53iiuKSXwmk3zIYmaPVfBvgcAhS583K4Q==} @@ -5395,10 +5543,10 @@ packages: os: [linux] libc: [glibc] - '@oxc-parser/binding-linux-x64-gnu@0.121.0': - resolution: {integrity: sha512-s4lfobX9p4kPTclvMiH3gcQUd88VlnkMTF6n2MTMDAyX5FPNRhhRSFZK05Ykhf8Zy5NibV4PbGR6DnK7FGNN6A==} + '@oxc-parser/binding-linux-s390x-gnu@0.130.0': + resolution: {integrity: sha512-6tJz0xvnGhsokE7N1WlUSBXibpYmT9xSJFS1Ce41Km/+8gQvdlW8MLhRv8PD0L7ix8vRG0FDDepp3jdOFzdVdw==} engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] + cpu: [s390x] os: [linux] libc: [glibc] @@ -5409,12 +5557,12 @@ packages: os: [linux] libc: [glibc] - '@oxc-parser/binding-linux-x64-musl@0.121.0': - resolution: {integrity: sha512-P9KlyTpuBuMi3NRGpJO8MicuGZfOoqZVRP1WjOecwx8yk4L/+mrCRNc5egSi0byhuReblBF2oVoDSMgV9Bj4Hw==} + '@oxc-parser/binding-linux-x64-gnu@0.130.0': + resolution: {integrity: sha512-9aCWj83dp3heTQGmGnZGdIWgxjZrr/7VQ0TGFHH5PKByxJKF2Hcr4qvaSUHhhGEa3MSsDjTL1YDP8RAgdL5/Cg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] - libc: [musl] + libc: [glibc] '@oxc-parser/binding-linux-x64-musl@0.127.0': resolution: {integrity: sha512-5eY0B/bxf1xIUxb4NOTvOI3KWtBQfPWYyKAzgcrCt0mDibSZygVpO1Pz8bkeiSZ5Jj9+M09dkggG3H8I5d0Uyg==} @@ -5423,11 +5571,12 @@ packages: os: [linux] libc: [musl] - '@oxc-parser/binding-openharmony-arm64@0.121.0': - resolution: {integrity: sha512-R+4jrWOfF2OAPPhj3Eb3U5CaKNAH9/btMveMULIrcNW/hjfysFQlF8wE0GaVBr81dWz8JLgQlsxwctoL78JwXw==} + '@oxc-parser/binding-linux-x64-musl@0.130.0': + resolution: {integrity: sha512-afXt87aZBqrUVli8TB/I8H1G50RDWcwirjWtXGXYqJ2ZqWEiErH7V72j3LUSDZaivmtu2OLX0KQ/mbhP81mr7A==} engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [openharmony] + cpu: [x64] + os: [linux] + libc: [musl] '@oxc-parser/binding-openharmony-arm64@0.127.0': resolution: {integrity: sha512-Gld0ajrFTUXNtdw20fVBuTQx66FA75nIVg+//pPfR3sXkuABB4mTBhl3r9JNzrJpgW//qiwxf0nWXUWGJSL3UQ==} @@ -5435,21 +5584,21 @@ packages: cpu: [arm64] os: [openharmony] - '@oxc-parser/binding-wasm32-wasi@0.121.0': - resolution: {integrity: sha512-5TFISkPTymKvsmIlKasPVTPuWxzCcrT8pM+p77+mtQbIZDd1UC8zww4CJcRI46kolmgrEX6QpKO8AvWMVZ+ifw==} - engines: {node: '>=14.0.0'} - cpu: [wasm32] + '@oxc-parser/binding-openharmony-arm64@0.130.0': + resolution: {integrity: sha512-I0NCrZV/YZuCGWgqwNN/GO/iXlLF2z+Wgc7u+Aa9N4P51oYeIa0XT+zVBUne4csO9GqxskXgI4g8JzzWGRpfOw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] '@oxc-parser/binding-wasm32-wasi@0.127.0': resolution: {integrity: sha512-T6KVD7rhLzFlwGRXMnxUFfkCZD8FHnb968wVXW1mXzgRFc5RNXOBY2mPPDZ77x5Ln76ltLMgtPg0cOkU1NSrEQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [wasm32] - '@oxc-parser/binding-win32-arm64-msvc@0.121.0': - resolution: {integrity: sha512-V0pxh4mql4XTt3aiEtRNUeBAUFOw5jzZNxPABLaOKAWrVzSr9+XUaB095lY7jqMf5t8vkfh8NManGB28zanYKw==} + '@oxc-parser/binding-wasm32-wasi@0.130.0': + resolution: {integrity: sha512-sJgQkGaBX0WJvPUDfwciex6IcTk5O5NLQ1bhEb6f3nBruh1GshKMRSMt2bxZlYrgBzjyBbJzsnO+InPG0bg+fA==} engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [win32] + cpu: [wasm32] '@oxc-parser/binding-win32-arm64-msvc@0.127.0': resolution: {integrity: sha512-Ujvw4X+LD1CCGULcsQcvb4YNVoBGqt+JHgNNzGGaCImELiZLk477ifUH53gIbE7EKd933NdTi25JWEr9K2HwXw==} @@ -5457,10 +5606,10 @@ packages: cpu: [arm64] os: [win32] - '@oxc-parser/binding-win32-ia32-msvc@0.121.0': - resolution: {integrity: sha512-4Ob1qvYMPnlF2N9rdmKdkQFdrq16QVcQwBsO8yiPZXof0fHKFF+LmQV501XFbi7lHyrKm8rlJRfQ/M8bZZPVLw==} + '@oxc-parser/binding-win32-arm64-msvc@0.130.0': + resolution: {integrity: sha512-bjcma99sQrNh6RY4mPO9yTkfxql6TDFoN3HWdK31RCKXwNhcDgJXW/l8PUtzKNiQ+9vpKJfJtQq+LklBuxSOBA==} engines: {node: ^20.19.0 || >=22.12.0} - cpu: [ia32] + cpu: [arm64] os: [win32] '@oxc-parser/binding-win32-ia32-msvc@0.127.0': @@ -5469,10 +5618,10 @@ packages: cpu: [ia32] os: [win32] - '@oxc-parser/binding-win32-x64-msvc@0.121.0': - resolution: {integrity: sha512-BOp1KCzdboB1tPqoCPXgntgFs0jjeSyOXHzgxVFR7B/qfr3F8r4YDacHkTOUNXtDgM8YwKnkf3rE5gwALYX7NA==} + '@oxc-parser/binding-win32-ia32-msvc@0.130.0': + resolution: {integrity: sha512-hRYbv6HhpSTzT4xTiIkadLI7upLQxuOdLPR/9nL1fTjwhgutBTPXrwaAPb/jTFVx6/8C7Jb5HcUKhmNwloTbFA==} engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] + cpu: [ia32] os: [win32] '@oxc-parser/binding-win32-x64-msvc@0.127.0': @@ -5481,15 +5630,21 @@ packages: cpu: [x64] os: [win32] + '@oxc-parser/binding-win32-x64-msvc@0.130.0': + resolution: {integrity: sha512-RBpA9TsRucJq6HNVNCFF1iKg+QeTkLdZf7hi4xaOGCPvMZWvDHjQgSOEZMUpuW4JNciHbxNhLEYmz5CVygjVGQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + '@oxc-project/types@0.103.0': resolution: {integrity: sha512-bkiYX5kaXWwUessFRSoXFkGIQTmc6dLGdxuRTrC+h8PSnIdZyuXHHlLAeTmOue5Br/a0/a7dHH0Gca6eXn9MKg==} - '@oxc-project/types@0.121.0': - resolution: {integrity: sha512-CGtOARQb9tyv7ECgdAlFxi0Fv7lmzvmlm2rpD/RdijOO9rfk/JvB1CjT8EnoD+tjna/IYgKKw3IV7objRb+aYw==} - '@oxc-project/types@0.127.0': resolution: {integrity: sha512-aIYXQBo4lCbO4z0R3FHeucQHpF46l2LbMdxRvqvuRuW2OxdnSkcng5B8+K12spgLDj93rtN3+J2Vac/TIO+ciQ==} + '@oxc-project/types@0.130.0': + resolution: {integrity: sha512-ibD2usx9JRu7f5pu2tMKMI4cpA4NgXJQoYRP4pQ7Pxmn1l6k/53qWtQWZayhYy3X4QZkt90Ot+mJEaeXouio6Q==} + '@oxc-project/types@0.133.0': resolution: {integrity: sha512-KzkdCd6Uxqnf6l3HOw1xfatAlUURA0g14cvBYFyJ5SaNOQbOUvBr9PKArcPcrNIeRsBdgcUzOGrhKveVpvOIGA==} @@ -5599,92 +5754,92 @@ packages: '@paralleldrive/cuid2@2.3.1': resolution: {integrity: sha512-XO7cAxhnTZl0Yggq6jOgjiOHhbgcO4NqFqwSmQpjK3b6TEE6Uj/jfSk6wzYyemh3+I0sHirKSetjQwn5cZktFw==} - '@parcel/watcher-android-arm64@2.5.1': - resolution: {integrity: sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==} + '@parcel/watcher-android-arm64@2.5.6': + resolution: {integrity: sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [android] - '@parcel/watcher-darwin-arm64@2.5.1': - resolution: {integrity: sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==} + '@parcel/watcher-darwin-arm64@2.5.6': + resolution: {integrity: sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [darwin] - '@parcel/watcher-darwin-x64@2.5.1': - resolution: {integrity: sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==} + '@parcel/watcher-darwin-x64@2.5.6': + resolution: {integrity: sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [darwin] - '@parcel/watcher-freebsd-x64@2.5.1': - resolution: {integrity: sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==} + '@parcel/watcher-freebsd-x64@2.5.6': + resolution: {integrity: sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [freebsd] - '@parcel/watcher-linux-arm-glibc@2.5.1': - resolution: {integrity: sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==} + '@parcel/watcher-linux-arm-glibc@2.5.6': + resolution: {integrity: sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ==} engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] libc: [glibc] - '@parcel/watcher-linux-arm-musl@2.5.1': - resolution: {integrity: sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==} + '@parcel/watcher-linux-arm-musl@2.5.6': + resolution: {integrity: sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==} engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] libc: [musl] - '@parcel/watcher-linux-arm64-glibc@2.5.1': - resolution: {integrity: sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==} + '@parcel/watcher-linux-arm64-glibc@2.5.6': + resolution: {integrity: sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] libc: [glibc] - '@parcel/watcher-linux-arm64-musl@2.5.1': - resolution: {integrity: sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==} + '@parcel/watcher-linux-arm64-musl@2.5.6': + resolution: {integrity: sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] libc: [musl] - '@parcel/watcher-linux-x64-glibc@2.5.1': - resolution: {integrity: sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==} + '@parcel/watcher-linux-x64-glibc@2.5.6': + resolution: {integrity: sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] libc: [glibc] - '@parcel/watcher-linux-x64-musl@2.5.1': - resolution: {integrity: sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==} + '@parcel/watcher-linux-x64-musl@2.5.6': + resolution: {integrity: sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] libc: [musl] - '@parcel/watcher-win32-arm64@2.5.1': - resolution: {integrity: sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==} + '@parcel/watcher-win32-arm64@2.5.6': + resolution: {integrity: sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [win32] - '@parcel/watcher-win32-ia32@2.5.1': - resolution: {integrity: sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==} + '@parcel/watcher-win32-ia32@2.5.6': + resolution: {integrity: sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g==} engines: {node: '>= 10.0.0'} cpu: [ia32] os: [win32] - '@parcel/watcher-win32-x64@2.5.1': - resolution: {integrity: sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==} + '@parcel/watcher-win32-x64@2.5.6': + resolution: {integrity: sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [win32] - '@parcel/watcher@2.5.1': - resolution: {integrity: sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==} + '@parcel/watcher@2.5.6': + resolution: {integrity: sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==} engines: {node: '>= 10.0.0'} '@peculiar/asn1-cms@2.7.0': @@ -5741,8 +5896,8 @@ packages: resolution: {integrity: sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==} engines: {node: '>=12.22.0'} - '@pnpm/npm-conf@2.3.1': - resolution: {integrity: sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==} + '@pnpm/npm-conf@3.0.2': + resolution: {integrity: sha512-h104Kh26rR8tm+a3Qkc5S4VLYint3FE48as7+/5oCEcKR2idC/pF1G6AhIXKI+eHPJa/3J9i5z0Al47IeGHPkA==} engines: {node: '>=12'} '@polka/url@1.0.0-next.29': @@ -5757,24 +5912,15 @@ packages: '@protobufjs/codegen@2.0.5': resolution: {integrity: sha512-zgXFLzW3Ap33e6d0Wlj4MGIm6Ce8O89n/apUaGNB/jx+hw+ruWEp7EwGUshdLKVRCxZW12fp9r40E1mQrf/34g==} - '@protobufjs/eventemitter@1.1.0': - resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==} - '@protobufjs/eventemitter@1.1.1': resolution: {integrity: sha512-vW1GmwMZNnL+gMRaovlh9yZX74kc+TTU3FObkkurpMaRtBfLP3ldjS9KQWlwZgraRE0+dheEEoAxdzcJQ8eXZg==} - '@protobufjs/fetch@1.1.0': - resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==} - '@protobufjs/fetch@1.1.1': resolution: {integrity: sha512-GpptLrs57adMSuHi3VNj0mAF8dwh36LMaYF6XyJ6JMWlVsc+t42tm1HSEDmOs3A8fC9yyeisgLhsTVQokOZ0zw==} '@protobufjs/float@1.0.2': resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} - '@protobufjs/inquire@1.1.1': - resolution: {integrity: sha512-mnzgDV26ueAvk7rsbt9L7bE0SuAoqyuys/sMMrmVcN5x9VsxpcG3rqAUSgDyLp0UZlmNfIbQ4fHfCtreVBk8Ew==} - '@protobufjs/inquire@1.1.2': resolution: {integrity: sha512-pa0vFRuws4wkvaXKK1uXZMAwAX4/t8ANaJo45iw/oQHNQ9q5xUzwgFmVJGXiga2BeN+zpX7Vf9vmsiIa2J+MUw==} @@ -5787,8 +5933,8 @@ packages: '@protobufjs/utf8@1.1.1': resolution: {integrity: sha512-oOAWABowe8EAbMyWKM0tYDKi8Yaox52D+HWZhAIJqQXbqe0xI/GV7FhLWqlEKreMkfDjshR5FKgi3mnle0h6Eg==} - '@rc-component/async-validator@5.1.0': - resolution: {integrity: sha512-n4HcR5siNUXRX23nDizbZBQPO0ZM/5oTtmKZ6/eqL0L2bo747cklFdZGRN2f+c9qWGICwDzrhW0H7tE9PptdcA==} + '@rc-component/async-validator@5.1.1': + resolution: {integrity: sha512-T03+Wk31Kz/28OC+rLlHtSNwD5Io3OWw6rPFPAp898sqALB/XnTrr3trB3mPoj379v0aRaW6t09HUG6dUyHR3g==} engines: {node: '>=14.x'} '@rc-component/cascader@1.14.0': @@ -5797,6 +5943,12 @@ packages: react: '>=18.0.0' react-dom: '>=18.0.0' + '@rc-component/cascader@1.15.0': + resolution: {integrity: sha512-ZzpMtwFCRo3fbXHuDnncARJMZQjdqA2w7aDuPofNQt+aDx39st1hgfIpEwTBLhe2Hqsvs/zOr8RTtgxTkCPySw==} + peerDependencies: + react: '>=18.0.0' + react-dom: '>=18.0.0' + '@rc-component/checkbox@2.0.0': resolution: {integrity: sha512-3CXGPpAR9gsPKeO2N78HAPOzU30UdemD6HGJoWVJOpa6WleaGB5kzZj3v6bdTZab31YuWgY/RxV3VKPctn0DwQ==} peerDependencies: @@ -5815,11 +5967,11 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' - '@rc-component/context@2.0.1': - resolution: {integrity: sha512-HyZbYm47s/YqtP6pKXNMjPEMaukyg7P0qVfgMLzr7YiFNMHbK2fKTAGzms9ykfGHSfyf75nBbgWw+hHkp+VImw==} + '@rc-component/context@2.0.2': + resolution: {integrity: sha512-uiGpAlblCNlziHPwj4S4Iy/oemeuz/hR03mbiEjTCXwsqOIN3BOzsRMyDwpyO5Fm0vIEEJRUf9ZtbRLbhksuTA==} peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' + react: '>=18.0.0' + react-dom: '>=18.0.0' '@rc-component/dialog@1.8.4': resolution: {integrity: sha512-Ay6PM7phkTkquplG8fWfUGFZ2GTLx9diTl4f0d8Eqxd7W1u1KjE9AQooFQHOHnhZf0Ya3z51+5EKCWHmt/dNEw==} @@ -5827,6 +5979,12 @@ packages: react: '>=18.0.0' react-dom: '>=18.0.0' + '@rc-component/dialog@1.9.0': + resolution: {integrity: sha512-zbAAogkg4kkKum79sLE6M+vq1jSAW25zdkafrahgcTP9t9S//SD634Znd1A4c8F2Gc12ZKnehGLsVaaOvZzD2A==} + peerDependencies: + react: '>=18.0.0' + react-dom: '>=18.0.0' + '@rc-component/drawer@1.4.2': resolution: {integrity: sha512-1ib+fZEp6FBu+YvcIktm+nCQ+Q+qIpwpoaJH6opGr4ofh2QMq+qdr5DLC4oCf5qf3pcWX9lUWPYX652k4ini8Q==} peerDependencies: @@ -5839,15 +5997,21 @@ packages: react: '>=16.11.0' react-dom: '>=16.11.0' - '@rc-component/form@1.8.0': - resolution: {integrity: sha512-eUD5KKYnIZWmJwRA0vnyO/ovYUfHGU1svydY1OrqU5fw8Oz9Tdqvxvrlh0wl6xI/EW69dT7II49xpgOWzK3T5A==} + '@rc-component/form@1.8.2': + resolution: {integrity: sha512-ZidCvOLmM9Xr+3vzk4UAoR7Aj1W/5IHyrzlBB7sNkygpTeRVrohQSo4TN7W/nARTH+nt8zSAPsn4BEl4zLEO2g==} engines: {node: '>=8.x'} peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' - '@rc-component/image@1.8.0': - resolution: {integrity: sha512-Dr41bFevLB5NgVaJhEUmNvbEf+ynAhim6W98ZW2xvCsdFISc2TYP4ZvCVdie3eaZdum2kieVcvpNHu+UrzAAHA==} + '@rc-component/image@1.8.1': + resolution: {integrity: sha512-JfPCijmMl+EaMvbftsEs/4VHmTyJKsZBh5ujFowSA45i9NTVYS1vuHtgpVV/QrGa27kXwbVOZriffCe/PNKuMw==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + '@rc-component/image@1.9.0': + resolution: {integrity: sha512-khF7w7xkBH5B1bsBcI1FSUZdkyd1aqpl2eYyILCqCzzQH3XdfehGUaZTnptyaJJfs09/R5hv9jXWyazOMFIClQ==} peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' @@ -5864,24 +6028,42 @@ packages: react: '>=16.0.0' react-dom: '>=16.0.0' + '@rc-component/input@1.3.1': + resolution: {integrity: sha512-iFvTUT9W+JC/MSin2aGAk8NqsVlTzcExNC9DZariON1IWirju9NoNeEk47an4Q8iHazkoVI/y1LnDi88+CPcig==} + peerDependencies: + react: '>=16.0.0' + react-dom: '>=16.0.0' + '@rc-component/mentions@1.6.0': resolution: {integrity: sha512-KIkQNP6habNuTsLhUv0UGEOwG67tlmE7KNIJoQZZNggEZl5lQJTytFDb69sl5CK3TDdISCTjKP3nGEBKgT61CQ==} peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' + '@rc-component/mentions@1.9.0': + resolution: {integrity: sha512-WUwfFKDSOF5S9UPsNsXcLYtzjTxBGsftTXWRbZuxX6BYrsySISTnujfJNgaaQ6qVzaCDJ35QUkZKvsYxip1C5g==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + '@rc-component/menu@1.2.0': resolution: {integrity: sha512-VWwDuhvYHSnTGj4n6bV3ISrLACcPAzdPOq3d0BzkeiM5cve8BEYfvkEhNoM0PLzv51jpcejeyrLXeMVIJ+QJlg==} peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' - '@rc-component/mini-decimal@1.1.0': - resolution: {integrity: sha512-jS4E7T9Li2GuYwI6PyiVXmxTiM6b07rlD9Ge8uGZSCz3WlzcG5ZK7g5bbuKNeZ9pgUuPK/5guV781ujdVpm4HQ==} + '@rc-component/menu@1.3.1': + resolution: {integrity: sha512-pSZl9nBPgKgxN0aaW7NilIBEwWsc+43S+ulGdWAg9afak96dNOGWsGx0DLLBB1VQsAJvo6bQMTDzXoPlEHsBEw==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + '@rc-component/mini-decimal@1.1.4': + resolution: {integrity: sha512-xiuXcaCwyOWpD8a8scdExFl+bntNphAW8XeenL1ig2en0AAZY0Pcp4pC0dI22qJ+NvxKn9RoNIoRdqYU3BLH4w==} engines: {node: '>=8.x'} - '@rc-component/motion@1.3.2': - resolution: {integrity: sha512-itfd+GztzJYAb04Z4RkEub1TbJAfZc2Iuy8p44U44xD1F5+fNYFKI3897ijlbIyfvXkTmMm+KGcjkQQGMHywEQ==} + '@rc-component/motion@1.3.3': + resolution: {integrity: sha512-Xh3IszxvlSv3/PLYFyC2UZi9LNB83yOnkB/LNmRzaypZLvkhqUIPS7MQpGZcCMWrNsXV2p6YTSWbSGvFpEle9A==} peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' @@ -5900,8 +6082,15 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' - '@rc-component/overflow@1.0.0': - resolution: {integrity: sha512-GSlBeoE0XTBi5cf3zl8Qh7Uqhn7v8RrlJ8ajeVpEkNe94HWy5l5BQ0Mwn2TVUq9gdgbfEMUmTX7tJFAg7mz0Rw==} + '@rc-component/notification@2.0.7': + resolution: {integrity: sha512-nqZzpf6BPdaj+3ILx7si79LLmqPKyUmQoXa+/9gg0SkH0v1DbD66oJgRMSBEVnd/zUT3D4gwxWIHUKebYf2ZXQ==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=18.0.0' + react-dom: '>=18.0.0' + + '@rc-component/overflow@1.0.1': + resolution: {integrity: sha512-syfmgAABaHCnCDzPwHZ/2tuvIcpOO3jefYZMmfkN+pmo8HKTzsfhS57vxo4ksPdN0By+uWVJhJWNFozNBxi2eA==} peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' @@ -5912,6 +6101,26 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' + '@rc-component/picker@1.10.0': + resolution: {integrity: sha512-vVOXP2RVWozwpERGUFAehVH1Jz6o/uRrAb9qSZm1LC+iJs8rvEwFo1bzz2jlOYV+uWwu0dIuG86tnDui14Ea0w==} + engines: {node: '>=12.x'} + peerDependencies: + date-fns: '>= 2.x' + dayjs: '>= 1.x' + luxon: '>= 3.x' + moment: '>= 2.x' + react: '>=16.9.0' + react-dom: '>=16.9.0' + peerDependenciesMeta: + date-fns: + optional: true + dayjs: + optional: true + luxon: + optional: true + moment: + optional: true + '@rc-component/picker@1.9.1': resolution: {integrity: sha512-9FBYYsvH3HMLICaPDA/1Th5FLaDkFa7qAtangIdlhKb3ZALaR745e9PsOhheJb6asS4QXc12ffiAcjdkZ4C5/g==} engines: {node: '>=12.x'} @@ -5932,8 +6141,8 @@ packages: moment: optional: true - '@rc-component/portal@2.2.0': - resolution: {integrity: sha512-oc6FlA+uXCMiwArHsJyHcIkX4q6uKyndrPol2eWX8YPkAnztHOPsFIRtmWG4BMlGE5h7YIRE3NiaJ5VS8Lb1QQ==} + '@rc-component/portal@2.2.1': + resolution: {integrity: sha512-ck+r1kW/JSv0wxPji3KN2ss9K6Z0qqwusw/mf/0JobXhZ8hC2ejZwCJObW/SvDi0uhA0VzmCnx0CaCci95tcmA==} engines: {node: '>=12.x'} peerDependencies: react: '>=18.0.0' @@ -5945,8 +6154,8 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' - '@rc-component/qrcode@1.1.1': - resolution: {integrity: sha512-LfLGNymzKdUPjXUbRP+xOhIWY4jQ+YMj5MmWAcgcAq1Ij8XP7tRmAXqyuv96XvLUBE/5cA8hLFl9eO1JQMujrA==} + '@rc-component/qrcode@1.1.2': + resolution: {integrity: sha512-CTXG18eP3sO3gc+96ep9HyVI/RzMup7L59apM/D0wWo1SHRdwOb7xyD4bMbmpu4dPlTch59Kxb8lU7U9ME60fg==} engines: {node: '>=8.x'} peerDependencies: react: '>=16.9.0' @@ -5998,6 +6207,13 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' + '@rc-component/table@1.10.2': + resolution: {integrity: sha512-b3PjqB9Gp25p5t/zq+9QrbXbodkptT8/zvLmwgd2FNPUUtaYyDnQqfxeD5a7ao8E8lpinLHsi2u2vdfPhyNvAw==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=18.0.0' + react-dom: '>=18.0.0' + '@rc-component/table@1.9.1': resolution: {integrity: sha512-FVI5ZS/GdB3BcgexfCYKi3iHhZS3Fr59EtsxORszYGrfpH1eWr33eDNSYkVfLI6tfJ7vftJDd9D5apfFWqkdJg==} engines: {node: '>=8.x'} @@ -6012,6 +6228,13 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' + '@rc-component/tabs@1.9.1': + resolution: {integrity: sha512-6mY08Fce6aNOHuGsxbzT+f2ekgL9mg1cGGHkittMlVGymjGg+kGupu5v90sRxcUd/paRU9jclLLXtF/PkK1FUA==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + '@rc-component/textarea@1.1.2': resolution: {integrity: sha512-9rMUEODWZDMovfScIEHXWlVZuPljZ2pd1LKNjslJVitn4SldEzq5vO1CL3yy3Dnib6zZal2r2DPtjy84VVpF6A==} peerDependencies: @@ -6031,12 +6254,25 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' + '@rc-component/tour@2.4.0': + resolution: {integrity: sha512-aui4r4TqmTzwaBgcQxHYep8kM8PTjZFufjokObpy35KfFeZ0k9ArquWFZqegQlH24P14t+F0qO0mGTgzlav1yg==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + '@rc-component/tree-select@1.8.0': resolution: {integrity: sha512-iYsPq3nuLYvGqdvFAW+l+I9ASRIOVbMXyA8FGZg2lGym/GwkaWeJGzI4eJ7c9IOEhRj0oyfIN4S92Fl3J05mjQ==} peerDependencies: react: '*' react-dom: '*' + '@rc-component/tree-select@1.9.0': + resolution: {integrity: sha512-GXcFe15a+trUl1/J3OHWQhsVWFpwFpGFK2cqYWZ1sK22Zs3KZTvMwDpzr75PIo1s6QVioVxpE/pRwRopkeDQ6w==} + peerDependencies: + react: '*' + react-dom: '*' + '@rc-component/tree@1.2.4': resolution: {integrity: sha512-5Gli43+m4R7NhpYYz3Z61I6LOw9yI6CNChxgVtvrO6xB1qML7iE6QMLVMB3+FTjo2yF6uFdAHtqWPECz/zbX5w==} engines: {node: '>=10.x'} @@ -6044,34 +6280,41 @@ packages: react: '*' react-dom: '*' - '@rc-component/trigger@3.9.0': - resolution: {integrity: sha512-X8btpwfrT27AgrZVOz4swclhEHTZcqaHeQMXXBgveagOiakTa36uObXbdwerXffgV8G9dH1fAAE0DHtVQs8EHg==} + '@rc-component/tree@1.3.2': + resolution: {integrity: sha512-bJFj46wEkpBPnWyTm18XmgAgNQ/4YvprxMOPPY2a6rmhGJYxLuNKEFiL5Qej4Qctu9wHJm8WW+v2SYskafE0kA==} + engines: {node: '>=10.x'} + peerDependencies: + react: '*' + react-dom: '*' + + '@rc-component/trigger@3.9.1': + resolution: {integrity: sha512-LNsYvz60mrLJ/kRvKcHE7boUvcQfVMCfRqZ71x3Fo9AOiZ1KKIEqkzMA8DNvz2V3Bcvir/vwQNn7JF1NPODQ7Q==} engines: {node: '>=8.x'} peerDependencies: react: '>=18.0.0' react-dom: '>=18.0.0' - '@rc-component/upload@1.1.0': - resolution: {integrity: sha512-LIBV90mAnUE6VK5N4QvForoxZc4XqEYZimcp7fk+lkE4XwHHyJWxpIXQQwMU8hJM+YwBbsoZkGksL1sISWHQxw==} + '@rc-component/upload@1.1.1': + resolution: {integrity: sha512-GvYWSKeaJTOxxC5p6+nOSadzfvXA1h8C/iHFPFZX+szH3JUXrvs+DLiW8YUTBgvMh8m63mJeHrlYlJzAlg+pDA==} peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' - '@rc-component/util@1.10.0': - resolution: {integrity: sha512-aY9GLBuiUdpyfIUpAWSYer4Tu3mVaZCo5A0q9NtXcazT3MRiI3/WNHCR+DUn5VAtR6iRRf0ynCqQUcHli5UdYw==} + '@rc-component/util@1.11.1': + resolution: {integrity: sha512-awVlI3ub2vqfqkYxOBc/uQ0efm3jw0wcrhtO/YWLyZfxiKXczKwNbVuhlnyxytDt7H9pbbVQiqr+O6MLATtRYg==} peerDependencies: react: '>=18.0.0' react-dom: '>=18.0.0' - '@rc-component/virtual-list@1.0.2': - resolution: {integrity: sha512-uvTol/mH74FYsn5loDGJxo+7kjkO4i+y4j87Re1pxJBs0FaeuMuLRzQRGaXwnMcV1CxpZLi2Z56Rerj2M00fjQ==} + '@rc-component/virtual-list@1.2.0': + resolution: {integrity: sha512-iavRm1Jo4GDbASQwdGa7jFyk93RvSOo9xHyBT4QL1pgFJj/Fdf1G+3RErH7/7BmAMvx2AkF62mjGYxDbXsK9TQ==} engines: {node: '>=8.x'} peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' + react: '>=18.0.0' + react-dom: '>=18.0.0' - '@repeaterjs/repeater@3.0.6': - resolution: {integrity: sha512-Javneu5lsuhwNCryN+pXH93VPQ8g0dBX7wItHFgYiwQmzE1sVdg5tWHiOgHywzL2W21XQopa7IwIEnNbmeUJYA==} + '@repeaterjs/repeater@3.1.0': + resolution: {integrity: sha512-TaoVksZRSx2KWYYpyLQtMQXXeS98VsgZImzW65xmiVgbYhXLk+aEsmzPLirqVuE4/XuUapH2iMtxUzaBNDzdSQ==} '@rolldown/binding-android-arm64@1.0.0-beta.55': resolution: {integrity: sha512-5cPpHdO+zp+klznZnIHRO1bMHDq5hS9cqXodEKAaa/dQTPDjnE91OwAsy3o1gT2x4QaY8NzdBXAvutYdaw0WeA==} @@ -6252,9 +6495,6 @@ packages: '@rolldown/pluginutils@1.0.0-beta.55': resolution: {integrity: sha512-vajw/B3qoi7aYnnD4BQ4VoCcXQWnF0roSwE2iynbNxgW4l9mFwtLmLmUhpDdcTBfKyZm1p/T0D13qG94XBLohA==} - '@rolldown/pluginutils@1.0.0-rc.7': - resolution: {integrity: sha512-qujRfC8sFVInYSPPMLQByRh7zhwkGFS4+tyMQ83srV1qrxL4g8E2tyxVVyxd0+8QeBM1mIk9KbWxkegRr76XzA==} - '@rolldown/pluginutils@1.0.1': resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==} @@ -6267,8 +6507,8 @@ packages: rollup: optional: true - '@rollup/pluginutils@5.3.0': - resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==} + '@rollup/pluginutils@5.4.0': + resolution: {integrity: sha512-MfPp06CjRLfXQ3wY0R8vJDYBy/MvVcc9OulEfR0B8Iv9ko+GCNaRZ+EpJYFl27LhKsZK0o420sYCRHCjfCgeUg==} engines: {node: '>=14.0.0'} peerDependencies: rollup: ^4.59.0 @@ -6333,8 +6573,8 @@ packages: engines: {node: ^20 || ^22 || ^24} hasBin: true - '@sinclair/typebox@0.27.8': - resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + '@sinclair/typebox@0.27.10': + resolution: {integrity: sha512-MTBk/3jGLNB2tVxv6uLlFh1iu64iYOQ2PbdOSK3NW8JZsmlaOh2q6sdtKowBhfw8QFLmYNzTW4/oK4uATIi6ZA==} '@sindresorhus/is@4.6.0': resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} @@ -6360,40 +6600,59 @@ packages: '@so-ric/colorspace@1.1.6': resolution: {integrity: sha512-/KiKkpHNOBgkFJwu9sh48LkHSMYGyuTcSFK/qMBdnOAlrRJzRSXAOFB5qwzaVQuDl8wAvHVMkaASQDReTahxuw==} - '@sonar/scan@4.3.2': - resolution: {integrity: sha512-dQiCZUPGstTWV6gJwZgbY25DPHN2l0qPv0dyd9/+0NY7Qqu/SKhwqslfBAqeQ1ZaDGabQT8c5NAyZPIcLdjFrw==} + '@sonar/scan@4.3.6': + resolution: {integrity: sha512-gPe4RgJtNi90dpEz/tlzmzwHJs9zmM3kB5acZbVwLyWOS/vOJqX1ZhStipbRFrkbd6z8ZLXCZStVuSk0MyP4GA==} engines: {node: '>= 18'} hasBin: true '@standard-schema/spec@1.1.0': resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} - '@storybook/addon-a11y@10.4.2': - resolution: {integrity: sha512-9Bm41peswHVPXm8iDBEA/sCXx+MUQV8Q10yFgNC2zTbtxKamMDb8HZCPIRDxvjBQ5v13eaXA2yZGTwQ+D8S6+g==} + '@storybook/addon-a11y@10.4.3': + resolution: {integrity: sha512-xAgeSCU2XZJWv+Dz18ZdTp7/DFIrLWwtVMXQUvtL+l4AWEvjLwis3SvH34bmyjSC1Otp/OnBjzZNxy3EbmFLGQ==} peerDependencies: - storybook: ^10.4.2 + storybook: ^10.4.3 + + '@storybook/addon-a11y@10.4.4': + resolution: {integrity: sha512-/eUCx/6Ozq5grauwm/NqKtlW0oJ26b6GNesXrMuFID8WLg/qLEKf79Awfz9XrmyWxe7loD40K952r7AA5Oc23A==} + peerDependencies: + storybook: ^10.4.4 - '@storybook/addon-docs@10.4.2': - resolution: {integrity: sha512-CtW1O4xSKZPNtpWgpfp4yB/x4pj/of+3MvlEDfErSlr3Hp3QmEa2pCLaecR08H5LJqJFlt1PtG0UrIynTvgW9w==} + '@storybook/addon-docs@10.4.3': + resolution: {integrity: sha512-CJGEXSo0zpIy7gvEeeUi09ZbjQUSNDi4YipAeb+lZGGEn8ShZUr2Pk330yd2ZO+ngNWJXD4ZxOb0e3/aIlxb3Q==} peerDependencies: '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - storybook: ^10.4.2 + storybook: ^10.4.3 peerDependenciesMeta: '@types/react': optional: true - '@storybook/addon-onboarding@10.4.2': - resolution: {integrity: sha512-nDfdmstd+G3yScv/HBHkk1QCi19pCBZn+htPuPsVqJasaYQbszZqN+ikbkiwC3+bcDWh0eb8a0zHnaB2JPyq4w==} + '@storybook/addon-docs@10.4.4': + resolution: {integrity: sha512-yPshCvtmQTq52T2sXuXgjy7B/QbhA/WIZxLYggptNjBL8BJMvbOfp9bAfCKh7+KpRWGqDZ6Y6tWL1Q48Wj3vtw==} peerDependencies: - storybook: ^10.4.2 + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + storybook: ^10.4.4 + peerDependenciesMeta: + '@types/react': + optional: true + + '@storybook/addon-onboarding@10.4.3': + resolution: {integrity: sha512-hX1mVTl9kUNzdA+KHpkmiufyJxClIFv0oFDFGAaKX3i2TLrrxDILyCE0pahHIxLotWGJJ7z6U9HpnnBtP2GGpQ==} + peerDependencies: + storybook: ^10.4.3 + + '@storybook/addon-onboarding@10.4.4': + resolution: {integrity: sha512-ZTWGm8VXQUTepV4aEmIgHxdY7JMtn57H3uYnM3HD+qR8fmAcpLPoJ9ffXaMWUwsjK6SeferQyDTRN3q3Jd5+mg==} + peerDependencies: + storybook: ^10.4.4 - '@storybook/addon-vitest@10.4.2': - resolution: {integrity: sha512-gq1ZVr0IOLgiS2PzaJqHxKLczwrXvA5g3W2k/FVJA19fJNFNUut1IyQCQRSJTXLLXbnNaa8I0wjGGc2BoLarJg==} + '@storybook/addon-vitest@10.4.3': + resolution: {integrity: sha512-np5qbyc/A7bZTvRlap9eaNmp9ix9yBBhMc3ClF4u2NkyI9MNLRH2xh66mI9lsShTyUZ6NAD8Uj72YJXkcigP6w==} peerDependencies: '@vitest/browser': ^3.0.0 || ^4.0.0 '@vitest/browser-playwright': ^4.0.0 '@vitest/runner': ^3.0.0 || ^4.0.0 - storybook: ^10.4.2 + storybook: ^10.4.3 vitest: ^3.0.0 || ^4.0.0 peerDependenciesMeta: '@vitest/browser': @@ -6405,18 +6664,60 @@ packages: vitest: optional: true - '@storybook/builder-vite@10.4.2': - resolution: {integrity: sha512-d3+i9vbbUfV6hvT90qabmy1WmC4bEJ7iAYDm0217doeA+S6awF25GF0qOy9gN9waU4NMntHoVpdB1YQO2wUj/w==} + '@storybook/addon-vitest@10.4.4': + resolution: {integrity: sha512-VPpBwf1Elr+0g33am8ZE6aHhLB+r1TPxUsnDuCVNhxGjRxMFyQkAE8+jPJFPvS/YIUGMbVXarzaV7PcI/sJuVQ==} peerDependencies: - storybook: ^10.4.2 + '@vitest/browser': ^3.0.0 || ^4.0.0 + '@vitest/browser-playwright': ^4.0.0 + '@vitest/runner': ^3.0.0 || ^4.0.0 + storybook: ^10.4.4 + vitest: ^3.0.0 || ^4.0.0 + peerDependenciesMeta: + '@vitest/browser': + optional: true + '@vitest/browser-playwright': + optional: true + '@vitest/runner': + optional: true + vitest: + optional: true + + '@storybook/builder-vite@10.4.3': + resolution: {integrity: sha512-gvXVJvcsqFuSO5PLhS5+BdoYbQDxbkVVrW2cHrf4g089bXVTImZrOSzTO7SEOTs4I9acJqv4nK22WEeJpY+VZw==} + peerDependencies: + storybook: ^10.4.3 vite: 8.0.16 - '@storybook/csf-plugin@10.4.2': - resolution: {integrity: sha512-GqX/2DeF3/jKs5D7gpDiuT9gd0c/f2TKcnQ5av4/s3YqeN+0nhm7btkCrDfgF16uzE1Zj3OrkxvB3AOkfxWgDg==} + '@storybook/builder-vite@10.4.4': + resolution: {integrity: sha512-VyuZ4mEvhhVXjJa1qXMWKH8ohnas0rgEuJDf6u4aJ54XeENFebPUEAHde1Qo2PflJ4rUdVdXieOZzKbYwP5RAQ==} + peerDependencies: + storybook: ^10.4.4 + vite: 8.0.16 + + '@storybook/csf-plugin@10.4.3': + resolution: {integrity: sha512-D+XF5CVhZmIOI0uhfTKxlQr+gR1z8X9djPy9phiA1USLPAOHagBAucp/PhLwlFVUxrKzEIf8yImrvkCv50IcDg==} peerDependencies: esbuild: 0.28.1 rollup: ^4.59.0 - storybook: ^10.4.2 + storybook: ^10.4.3 + vite: 8.0.16 + webpack: ^5.105.4 + peerDependenciesMeta: + esbuild: + optional: true + rollup: + optional: true + vite: + optional: true + webpack: + optional: true + + '@storybook/csf-plugin@10.4.4': + resolution: {integrity: sha512-1mzZyAwVUmAcw4WEUsJDVdSupkJf+Kf/f5uNAs4RzlBXA75P8YRkDKAb2EoMwsB5URiXFi9XoeAN/vWke0G6+w==} + peerDependencies: + esbuild: 0.28.1 + rollup: ^4.59.0 + storybook: ^10.4.4 vite: 8.0.16 webpack: ^5.105.4 peerDependenciesMeta: @@ -6452,19 +6753,48 @@ packages: '@types/react-dom': optional: true - '@storybook/react-dom-shim@9.1.16': - resolution: {integrity: sha512-MsI4qTxdT6lMXQmo3IXhw3EaCC+vsZboyEZBx4pOJ+K/5cDJ6ZoQ3f0d4yGpVhumDxaxlnNAg954+f8WWXE1rQ==} + '@storybook/react-dom-shim@10.4.3': + resolution: {integrity: sha512-aPZ+Afd+zdoSygISOVCJIYdiqWJM6uRZFw0zhsONwNcn3kU1TNce6iAoBCY8cpEhDAu61M1QjeIHM3LPy/ieog==} peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^9.1.16 + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + '@types/react-dom': ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + storybook: ^10.4.3 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true - '@storybook/react-vite@10.4.2': - resolution: {integrity: sha512-nGrS74p0ujPSQ7qD5jKLLlao2igfTTb6Kf/uRhVV8XM0uM7WvxR9K20ddCM8jFmx1jY9fRm0UBGaeaXHDIh5SA==} + '@storybook/react-dom-shim@10.4.4': + resolution: {integrity: sha512-y6SObmoW78AydE6VfKQSUmCkuqiaMPy9LgMpMdMEyWfJ/pSxBDMIKycr9dlRMJP1cvNgByaJgrusWtA46ndSQw==} peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + '@types/react-dom': ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - storybook: ^10.4.2 + storybook: ^10.4.4 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@storybook/react-vite@10.4.3': + resolution: {integrity: sha512-Pk/hi10JFuwJ5sj/HAapWrgaa9Z83oT4MJPbHqeKzMt3A3jkIru4L9ibnt82bzV3crOaiErprvOlAFDsjxhrrQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + storybook: ^10.4.3 + vite: 8.0.16 + + '@storybook/react-vite@10.4.4': + resolution: {integrity: sha512-hXw1c9Jq2eFzwmJ3u9phmszbHoPjwPLYjcR1Grd6Xbe2g3bReGH35urm/fTZ0HNdjXAgQlUaXp2bWw6vz0BHQw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + storybook: ^10.4.4 vite: 8.0.16 '@storybook/react@10.4.2': @@ -6484,15 +6814,37 @@ packages: typescript: optional: true - '@storybook/react@9.1.16': - resolution: {integrity: sha512-M/SkHJJdtiGpodBJq9+DYmSkEOD+VqlPxKI+FvbHESTNs//1IgqFIjEWetd8quhd9oj/gvo4ICBAPu+UmD6M9w==} - engines: {node: '>=20.0.0'} + '@storybook/react@10.4.3': + resolution: {integrity: sha512-Td+Zoi8ylJTPC1jg5vHw8OK7U2kJgqc5kuAn92UvD4IbAkcpMTBRPHDziK1piv6q7r8yNLVah+ku6IKHpTLeXA==} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + '@types/react-dom': ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + storybook: ^10.4.3 + typescript: '>= 4.9.x' + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + typescript: + optional: true + + '@storybook/react@10.4.4': + resolution: {integrity: sha512-6K5/uHrvjswrueyVpUt6IWGuSgYCMtMOYyVs86XJZYqKBV3Pv7nGsGNH7YSMLAVQBZW4CQqm2etd5Op0GHY9Kg==} peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^9.1.16 + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + '@types/react-dom': ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + storybook: ^10.4.4 typescript: '>= 4.9.x' peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true typescript: optional: true @@ -6590,8 +6942,8 @@ packages: resolution: {integrity: sha512-zIcONa+hVtVSSep9UT3jZ5rizo2BsxgyDYU7WFD5eICBE7no3881HGeb/QkGfsJs6JTkY1aQhT7rIPC7e+0nnA==} engines: {node: '>=14', npm: '>=6', yarn: '>=1'} - '@testing-library/react@16.3.0': - resolution: {integrity: sha512-kFSyxiEDwv1WLl2fgsq6pPBbw5aWKrsY2/noi1Id0TK0UParSF62oFQFGHXIyaG4pp2tEub/Zlel+fjjZILDsw==} + '@testing-library/react@16.3.2': + resolution: {integrity: sha512-XU5/SytQM+ykqMnAnvB2umaJNIOsLF3PVv//1Ew4CTcpz0/BRyy/af40qqrt7SjKpDdT1saBMc42CUok5gaw+g==} engines: {node: '>=18'} peerDependencies: '@testing-library/dom': ^10.0.0 @@ -6611,12 +6963,6 @@ packages: peerDependencies: '@testing-library/dom': '>=7.21.4' - '@theguild/federation-composition@0.21.0': - resolution: {integrity: sha512-cdQ9rDEtBpT553DLLtcsSjtSDIadibIxAD3K5r0eUuDOfxx+es7Uk+aOucfqMlNOM3eybsgJN3T2SQmEsINwmw==} - engines: {node: '>=18'} - peerDependencies: - graphql: ^16.0.0 - '@ts-morph/common@0.29.0': resolution: {integrity: sha512-35oUmphHbJvQ/+UTwFNme/t2p3FoKiGJ5auTjjpNTop2dyREspirjMy82PLSC1pnDJ8ah1GU98hwpVt64YXQsg==} @@ -6650,8 +6996,8 @@ packages: cpu: [arm64] os: [win32] - '@tybys/wasm-util@0.10.1': - resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} + '@tybys/wasm-util@0.10.2': + resolution: {integrity: sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==} '@types/aria-query@5.0.4': resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} @@ -6683,8 +7029,8 @@ packages: '@types/connect@3.4.38': resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} - '@types/debug@4.1.12': - resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + '@types/debug@4.1.13': + resolution: {integrity: sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==} '@types/deep-eql@4.0.2': resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} @@ -6692,29 +7038,23 @@ packages: '@types/doctrine@0.0.9': resolution: {integrity: sha512-eOIHzCUSH7SMfonMG1LsC2f8vxBFtho6NGBznK41R84YzPuvSBzrhEps33IsQiOW9+VL6NQ9DbjQJznk/S4uRA==} - '@types/eslint-scope@3.7.7': - resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} - - '@types/eslint@9.6.1': - resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} - '@types/estree-jsx@1.0.5': resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} - '@types/estree@1.0.8': - resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + '@types/estree@1.0.9': + resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} - '@types/express-serve-static-core@4.19.7': - resolution: {integrity: sha512-FvPtiIf1LfhzsaIXhv/PHan/2FeQBbtBDtfX2QfvPxdUelMDEckK08SM6nqo1MIZY3RUlfA+HV8+hFUSio78qg==} + '@types/express-serve-static-core@4.19.8': + resolution: {integrity: sha512-02S5fmqeoKzVZCHPZid4b8JH2eM5HzQLZWN2FohQEy/0eXTq8VXZfSN6Pcr3F6N9R/vNrj7cpgbhjie6m/1tCA==} - '@types/express-serve-static-core@5.1.0': - resolution: {integrity: sha512-jnHMsrd0Mwa9Cf4IdOzbz543y4XJepXrbia2T4b6+spXC2We3t1y6K44D3mR8XMFSXMCf3/l7rCgddfx7UNVBA==} + '@types/express-serve-static-core@5.1.1': + resolution: {integrity: sha512-v4zIMr/cX7/d2BpAEX3KNKL/JrT1s43s96lLvvdTmza1oEvDudCqK9aF/djc/SWgy8Yh0h30TZx5VpzqFCxk5A==} '@types/express@4.17.25': resolution: {integrity: sha512-dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6NR+eKhw==} - '@types/express@5.0.5': - resolution: {integrity: sha512-LuIQOcb6UmnF7C1PCFmEU1u2hmiHL43fgFQX67sN3H4Z+0Yk0Neo++mFsBjhOAuLzvlQeqAAkeDOZrJs9rzumQ==} + '@types/express@5.0.6': + resolution: {integrity: sha512-sKYVuV7Sv9fbPIt/442koC7+IIwK5olP1KWeD88e/idgoJqDm3JV/YUiPwkoKK92ylff2MGxSz1CSjsXelx0YA==} '@types/graphql-depth-limit@1.1.6': resolution: {integrity: sha512-WU4bjoKOzJ8CQE32Pbyq+YshTMcLJf2aJuvVtSLv1BQPwDUGa38m2Vr8GGxf0GZ0luCQcfxlhZeHKu6nmTBvrw==} @@ -6731,8 +7071,8 @@ packages: '@types/html-minifier-terser@6.1.0': resolution: {integrity: sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==} - '@types/http-cache-semantics@4.0.4': - resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} + '@types/http-cache-semantics@4.2.0': + resolution: {integrity: sha512-L3LgimLHXtGkWikKnsPg0/VFx9OGZaC+eN1u4r+OB1XRqH3meBIAVC2zr1WdMH+RHmnRkqliQAOHNJ/E0j/e0Q==} '@types/http-errors@2.0.5': resolution: {integrity: sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==} @@ -6761,8 +7101,8 @@ packages: '@types/mdast@4.0.4': resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} - '@types/mdx@2.0.13': - resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==} + '@types/mdx@2.0.14': + resolution: {integrity: sha512-T48PeuJtvLosNTPVhfnIp3i/n3a4g4Bad7YCq5k64D4u7NwDrAotikQ+5+sjtUvBmxCMlbo3dVL+C2dP0rWHzg==} '@types/mime@1.3.5': resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} @@ -6773,20 +7113,23 @@ packages: '@types/node@17.0.45': resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==} - '@types/node@22.19.15': - resolution: {integrity: sha512-F0R/h2+dsy5wJAUe3tAU6oqa2qbWY5TpNfL/RGmo1y38hiyO1w3x2jPtt76wmuaJI4DQnOBu21cNXQ2STIUUWg==} + '@types/node@22.19.20': + resolution: {integrity: sha512-6tELRwSDYWW9EdZhbeZmYGZ1/7Djkt+Ah3/ScEYT9cDord7UJzasR/4D3VONg9tQI5CDp+/CZC1AXj2pCFOvpw==} - '@types/node@24.10.1': - resolution: {integrity: sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==} + '@types/node@22.19.21': + resolution: {integrity: sha512-VMeFBSCKQKmm2swI2kW51SFusDqekC6q9trBCvJ/JliDchFSuoYYKN7yVNjPthP1HKZcx3U1gI/wTcEBjEFKTA==} + + '@types/node@25.9.2': + resolution: {integrity: sha512-G05zqtJhcDLb8uslf5EjCxXg9G1KQxiV8OS0R26IC//Eoyitzqe8z37I7cqvnZlrlSfgocQRfSn/AHBZJJFyGw==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} - '@types/prismjs@1.26.5': - resolution: {integrity: sha512-AUZTa7hQ2KY5L7AmtSiqxlhWxb4ina0yd8hNbl4TWuqnv/pFP0nDMb3YrfSBf4hJVGLh2YEIBfKaBW/9UEl6IQ==} + '@types/prismjs@1.26.6': + resolution: {integrity: sha512-vqlvI7qlMvcCBbVe0AKAb4f97//Hy0EBTaiW8AalRnG/xAN5zOiWWyrNqNXeq8+KAuvRewjCVY1+IPxk4RdNYw==} - '@types/qs@6.14.0': - resolution: {integrity: sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==} + '@types/qs@6.15.1': + resolution: {integrity: sha512-GZHUBZR9hckSUhrxmp1nG6NwdpM9fCunJwyThLW1X3AyHgd9IlHb6VANpQQqDr2o/qQp6McZ3y/IA2rVzKzSbw==} '@types/range-parser@1.2.7': resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} @@ -6805,11 +7148,11 @@ packages: '@types/react-router@5.1.20': resolution: {integrity: sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==} - '@types/react@19.2.7': - resolution: {integrity: sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==} + '@types/react@19.2.17': + resolution: {integrity: sha512-MXfmqaVPEVgkBT/aY0aGCkRWWtByiYQXo3xdQ8r5RzuFrPiRn8Gar2tQdXSUQ2GKV3bkXckek89V8wQBY2Q/Aw==} - '@types/readable-stream@4.0.22': - resolution: {integrity: sha512-/FFhJpfCLAPwAcN3mFycNUa77ddnr8jTgF5VmSNetaemWB2cIlfCA9t0YTM3JAT0wOcv8D4tjPo7pkDhK3EJIg==} + '@types/readable-stream@4.0.23': + resolution: {integrity: sha512-wwXrtQvbMHxCbBgjHaMGEmImFTQxxpfMOR/ZoQnXxB1woqkUbdLGFDgauo00Py9IudiaqSeiBiulSV9i6XIPig==} '@types/resolve@1.20.6': resolution: {integrity: sha512-A4STmOXPhMUtHH+S6ymgE2GiBSMqf4oTvcQZMcHzokuTLVYzXTB8ttjcgxOVaAp2lGwEdzZ0J+cRbbeevQj1UQ==} @@ -6835,6 +7178,9 @@ packages: '@types/serve-static@1.15.10': resolution: {integrity: sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw==} + '@types/serve-static@2.2.0': + resolution: {integrity: sha512-8mam4H1NHLtu7nmtalF7eyBH14QyOASmcxHhSfEoRyr0nP/YdoesEtU+uSRvMe96TW/HPTtkoKqQLl53N7UXMQ==} + '@types/shimmer@1.2.0': resolution: {integrity: sha512-UE7oxhQLLd9gub6JKIAhDq06T0F6FnztwMNRvYgjeQSBeMc1ZG/tA47EwfduvkuQS8apbkM/lpLpWsaCeYsXVg==} @@ -6918,8 +7264,8 @@ packages: engines: {node: '>=16.20.0'} hasBin: true - '@typespec/ts-http-runtime@0.3.2': - resolution: {integrity: sha512-IlqQ/Gv22xUC1r/WQm4StLkYQmaaTsXAhUVsNE0+xiyf0yRFiH5++q78U3bw6bLKDCTmh0uqKB9eG9+Bt75Dkg==} + '@typespec/ts-http-runtime@0.3.6': + resolution: {integrity: sha512-jIXhD0eWQ1JA6ln/5Dltyx22UxWNrw0hZmhy2rlv6m6KgF7kplHx3g0fzi09lNmTJQRR91OlemYp3xFnvDK9og==} engines: {node: '>=20.0.0'} '@umijs/route-utils@4.0.3': @@ -6930,16 +7276,11 @@ packages: peerDependencies: react: '*' - '@ungap/structured-clone@1.3.0': - resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} - deprecated: Potential CWE-502 - Update to 1.3.1 or higher + '@ungap/structured-clone@1.3.1': + resolution: {integrity: sha512-mUFwbeTqrVgDQxFveS+df2yfap6iuP20NAKAsBt5jDEoOTDew+zwLAOilHCeQJOVSvmgCX4ogqIrA0mnyr08yQ==} - '@vercel/oidc@3.0.5': - resolution: {integrity: sha512-fnYhv671l+eTTp48gB4zEsTW/YtRgRPnkI2nT7x6qw5rkI1Lq2hTmQIpHPgyThI0znLK+vX2n9XxKdXZ7BUbbw==} - engines: {node: '>= 20'} - - '@vitejs/plugin-react@6.0.1': - resolution: {integrity: sha512-l9X/E3cDb+xY3SWzlG1MOGt2usfEHGMNIaegaUGFsLkb3RCn/k8/TOXBcab+OndDI4TBtktT8/9BwwW8Vi9KUQ==} + '@vitejs/plugin-react@6.0.2': + resolution: {integrity: sha512-DlSMqo4WhThw4vB8Mpn0Woe9J+Jfq1geJ61AKW0QEgLzGMNwtIMdxbDUzLxcun8W7NbJO0e2Jg/Nxm3cCSVzzg==} engines: {node: ^20.19.0 || >=22.12.0} peerDependencies: '@rolldown/plugin-babel': ^0.1.7 || ^0.2.0 @@ -7064,8 +7405,8 @@ packages: resolution: {integrity: sha512-b4PhJ+zYj4357zwk4TTuF2nEe0vVtOrwdsrNo5hL+u1ojXNhh1FgJ6pg1jzDlwlT4oBdzfSwaBwMCtFCsIWg8Q==} engines: {node: '>=18.0.0'} - '@whatwg-node/node-fetch@0.8.4': - resolution: {integrity: sha512-AlKLc57loGoyYlrzDbejB9EeR+pfdJdGzbYnkEuZaGekFboBwzfVYVMsy88PMriqPI1ORpiGYGgSSWpx7a2sDA==} + '@whatwg-node/node-fetch@0.8.6': + resolution: {integrity: sha512-BDMdYFcerLQkwA2RTldxOqRCs6ZQD1S7UgP3pUdGUkcbgTrP/V5ko77ZkCww9DHmC4lpoYuwigGfQYj285gMvA==} engines: {node: '>=18.0.0'} '@whatwg-node/promise-helpers@1.3.2': @@ -7123,8 +7464,8 @@ packages: peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - acorn-walk@8.3.4: - resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} + acorn-walk@8.3.5: + resolution: {integrity: sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw==} engines: {node: '>=0.4.0'} acorn@8.16.0: @@ -7136,8 +7477,8 @@ packages: resolution: {integrity: sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==} engines: {node: '>= 10.0.0'} - adm-zip@0.5.16: - resolution: {integrity: sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==} + adm-zip@0.5.17: + resolution: {integrity: sha512-+Ut8d9LLqwEvHHJl1+PIHqoyDxFgVN847JTVM3Izi3xHDWPE4UtzzXysMZQs64DMcrJfBeS/uoEP4AD3HQHnQQ==} engines: {node: '>=12.0'} agent-base@7.1.4: @@ -7148,12 +7489,6 @@ packages: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} - ai@5.0.105: - resolution: {integrity: sha512-waQZAvv44KYzys6S3l25ti2jcSuJnkyWFTliSKy3swASL6w6ttPxJTm80d+v9sLWoIxrqE3OwhTJbweNp065fg==} - engines: {node: '>=18'} - peerDependencies: - zod: ^3.25.76 || ^4.1.8 - ajv-formats@2.1.1: resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} peerDependencies: @@ -7175,16 +7510,16 @@ packages: ajv@6.14.0: resolution: {integrity: sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==} - ajv@8.18.0: - resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==} + ajv@8.20.0: + resolution: {integrity: sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==} - algoliasearch-helper@3.26.1: - resolution: {integrity: sha512-CAlCxm4fYBXtvc5MamDzP6Svu8rW4z9me4DCBY1rQ2UDJ0u0flWmusQ8M3nOExZsLLRcUwUPoRAPMrhzOG3erw==} + algoliasearch-helper@3.29.1: + resolution: {integrity: sha512-6ck2YFudF2Pje7szQoPBiRFTGfd+1I+0I/WfLPGn0bj1kvrFoOQmNyedNiDxTk3/r4IfSLDYk+RA4G7u8H6+yA==} peerDependencies: algoliasearch: '>= 3.1 < 6' - algoliasearch@5.45.0: - resolution: {integrity: sha512-wrj4FGr14heLOYkBKV3Fbq5ZBGuIFeDJkTilYq/G+hH1CSlQBtYvG2X1j67flwv0fUeQJwnWxxRIunSemAZirA==} + algoliasearch@5.53.0: + resolution: {integrity: sha512-OGW1q6b91CRSSeiOnM8LxuR5NYJ2esvw66jUZ4IIvdv+ItNkx3pwLuyR+jaCdbGee4ov5WgUnyPryyh11xvByQ==} engines: {node: '>= 14.0.0'} ansi-align@3.0.1: @@ -7237,6 +7572,12 @@ packages: react: '>=18.0.0' react-dom: '>=18.0.0' + antd@6.4.3: + resolution: {integrity: sha512-6H2avkxCGfxcF67r3J2mwm9Ck50el1pks/73vfM1wDsPL/tPtj5vHuauMgJFnrqmq7CH3g8aoZ0VBQbt+jpAsw==} + peerDependencies: + react: '>=18.0.0' + react-dom: '>=18.0.0' + any-promise@1.3.0: resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} @@ -7244,6 +7585,9 @@ packages: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} + anynum@1.0.0: + resolution: {integrity: sha512-xjR9/zBVnUOP6ztMIIgShjsxui80nQUQH+5xJnvrYLs+90bF25/KJqaAi8mk+B4RDtX1Nspi6fmp4YTEts8SfA==} + apollo-link-rest@0.9.0: resolution: {integrity: sha512-kuXjR56Y12w0TZcqwVaONKlipB6g3Ya1dAy4NMCaylPpNXq6tO+qzQFPUyDJC7B0JoJPIFjxPV2rAet4uGM4UQ==} peerDependencies: @@ -7260,8 +7604,8 @@ packages: applicationinsights-native-metrics: optional: true - archunit@2.1.63: - resolution: {integrity: sha512-TxMCozK5kWdHF0sS7xRelHXWFZNCXQ2/6zFKZLAmtZP0A4M1DCIsWypssLixyUpUi3Tv6uOCGTa4+xekZE1yYw==} + archunit@2.3.0: + resolution: {integrity: sha512-qFAzkcFRzyyuTzw5U3JVjbYNSh0xpSOa88K/p0jZB6xhiOIpinmArqjNjG4kk9CqEOZX434mdsFqlUrZxlawGw==} engines: {node: '>=14.0.0', npm: '>=6.0.0'} arg@5.0.2: @@ -7303,9 +7647,6 @@ packages: resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} engines: {node: '>=0.10.0'} - asap@2.0.6: - resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} - asn1.js@4.10.1: resolution: {integrity: sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==} @@ -7363,8 +7704,8 @@ packages: resolution: {integrity: sha512-Hdw8qdNiqdJ8LqT0iK0sVzkFbzg6fhnQqqfWhBDxcHZvU75+B+ayzTy8x+k5Ix0Y92XOhOUlx74ps+bA6BeYMQ==} engines: {node: '>=8'} - autoprefixer@10.4.22: - resolution: {integrity: sha512-ARe0v/t9gO28Bznv6GgqARmVqcWOV3mfgUPn9becPHMiD3o9BwlRgaeccZnwTpZ7Zwqrm+c1sUSsMxIzQzc8Xg==} + autoprefixer@10.5.0: + resolution: {integrity: sha512-FMhOoZV4+qR6aTUALKX2rEqGG+oyATvwBt9IIzVR5rMa2HRWPkxf+P+PAJLD1I/H5/II+HuZcBJYEFBpq39ong==} engines: {node: ^10 || ^12 || >=14} hasBin: true peerDependencies: @@ -7378,8 +7719,8 @@ packages: resolution: {integrity: sha512-NZKeq9AfyQvEeNlN0zSYAaWrmBffJh3IELMZfRpJVWgrpEbtEpnjvzqBPf+mxoI287JohRDoa+/nsfqqiZmF6g==} engines: {node: '>= 6.0.0'} - axe-core@4.11.0: - resolution: {integrity: sha512-ilYanEU8vxxBexpJd8cWM4ElSQq4QctCLKih0TSfjIfCQTeyH/6zVrmIJfLPrKTKJRbiG+cfnZbQIjAlJmF1jQ==} + axe-core@4.12.1: + resolution: {integrity: sha512-s7iGf5GaVMxEG0ENN9x+xTr7GFZCb1ZP/1uATUpCEK2X78nDB3RwbtFCo9pGAf9ru+VwoQ464DkaLEeRM08wJA==} engines: {node: '>=4'} axios@1.16.0: @@ -7390,8 +7731,8 @@ packages: engines: {node: '>=10.0.0', vscode: ^1.39.0} hasBin: true - b4a@1.7.3: - resolution: {integrity: sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q==} + b4a@1.8.1: + resolution: {integrity: sha512-aiqre1Nr0B/6DgE2N5vwTc+2/oQZ4Wh1t4NznYY4E00y8LCt6NqdRv81so00oo27D8MVKTpUa/MwUUtBLXCoDw==} peerDependencies: react-native-b4a: '*' peerDependenciesMeta: @@ -7408,8 +7749,8 @@ packages: babel-plugin-dynamic-import-node@2.3.3: resolution: {integrity: sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==} - babel-plugin-polyfill-corejs2@0.4.14: - resolution: {integrity: sha512-Co2Y9wX854ts6U8gAAPXfn0GmAyctHuK8n0Yhfjd6t30g7yvKjspvvOo9yG+z52PZRgFErt7Ka2pYnXCjLKEpg==} + babel-plugin-polyfill-corejs2@0.4.17: + resolution: {integrity: sha512-aTyf30K/rqAsNwN76zYrdtx8obu0E4KoUME29B1xj+B3WxgvWkp943vYQ+z8Mv3lw9xHXMHpvSPOBxzAkIa94w==} peerDependencies: '@babel/core': 7.29.6 @@ -7418,8 +7759,13 @@ packages: peerDependencies: '@babel/core': 7.29.6 - babel-plugin-polyfill-regenerator@0.6.5: - resolution: {integrity: sha512-ISqQ2frbiNU9vIJkzg7dlPpznPZ4jOiUQ1uSmB0fEHeowtN3COYRsXr/xexn64NpU13P06jc/L5TgiJXOgrbEg==} + babel-plugin-polyfill-corejs3@0.14.2: + resolution: {integrity: sha512-coWpDLJ410R781Npmn/SIBZEsAetR4xVi0SxLMXPaMO4lSf1MwnkGYMtkFxew0Dn8B3/CpbpYxN0JCgg8mn67g==} + peerDependencies: + '@babel/core': 7.29.6 + + babel-plugin-polyfill-regenerator@0.6.8: + resolution: {integrity: sha512-M762rNHfSF1EV3SLtnCJXFoQbbIIz0OyRwnCmV0KPC7qosSfCO0QLTSuJX3ayAebubhE6oYBAYPrBA5ljowaZg==} peerDependencies: '@babel/core': 7.29.6 @@ -7433,25 +7779,58 @@ packages: resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} engines: {node: 18 || 20 || >=22} - bare-events@2.8.2: - resolution: {integrity: sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==} + bare-events@2.9.1: + resolution: {integrity: sha512-Z0oHEHAFDZkffN8Qc39zNZjQlMDkPJRyyyZieU1VH7u8c5S+qHZ2S8ixdKIAxEjfHO7FJxXmJWgteOghVanIsg==} peerDependencies: bare-abort-controller: '*' peerDependenciesMeta: bare-abort-controller: optional: true - base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + bare-fs@4.7.2: + resolution: {integrity: sha512-aTvMFUWkBmjzKtEQMDGGDNF8bkfpD5N1b/FCwt7A3wrU4t1o/e/85Wzkluh6JlODCjqVESYCkQCdTXqZ9G7VFg==} + engines: {bare: '>=1.16.0'} + peerDependencies: + bare-buffer: '*' + peerDependenciesMeta: + bare-buffer: + optional: true - baseline-browser-mapping@2.10.0: - resolution: {integrity: sha512-lIyg0szRfYbiy67j9KN8IyeD7q7hcmqnJ1ddWmNt19ItGpNN64mnllmxUNFIOdOm6by97jlL6wfpTTJrmnjWAA==} - engines: {node: '>=6.0.0'} - hasBin: true + bare-os@3.9.1: + resolution: {integrity: sha512-6M5XjcnsygQNPMCMPXSK379xrJFiZ/AEMNBmFEmQW8d/789VQATvriyi5r0HYTL9TkQ26rn3kgdTG3aisbrXkQ==} + engines: {bare: '>=1.14.0'} - basic-auth@2.0.1: - resolution: {integrity: sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==} - engines: {node: '>= 0.8'} + bare-path@3.0.1: + resolution: {integrity: sha512-ghj2DSK/2e99a1anTVPCV4m4YIYtrbXhfM7V3D7XZLOTsybnYyaJloymGqssQc8l/or0UoDyRtNQkmkEF/ysgQ==} + + bare-stream@2.13.1: + resolution: {integrity: sha512-Vp0cnjYyrEC4whYTymQ+YZi6pBpfiICZO3cfRG8sy67ZNWe951urv1x4eW1BKNngw3U+3fPYb5JQvHbCtxH7Ow==} + peerDependencies: + bare-abort-controller: '*' + bare-buffer: '*' + bare-events: '*' + peerDependenciesMeta: + bare-abort-controller: + optional: true + bare-buffer: + optional: true + bare-events: + optional: true + + bare-url@2.4.5: + resolution: {integrity: sha512-K+y9xF1tN+CdPu4qWwr0QiK1Al07eFPGYK5M2pDXcmHdMdgC/tT/bpmMe1hrmRHaidKLkXrC+cRNYf3XVDUhSQ==} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + baseline-browser-mapping@2.10.35: + resolution: {integrity: sha512-honAfLBde0HAFLdNyBEfuuENkF6zR+ozxqxa/2zJKHBe1qzLqyTSeRKpdPEHAP03rlDGyQOPnCSxnVpVqQo9Mg==} + engines: {node: '>=6.0.0'} + hasBin: true + + basic-auth@2.0.1: + resolution: {integrity: sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==} + engines: {node: '>= 0.8'} batch@0.6.1: resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==} @@ -7466,8 +7845,8 @@ packages: bl@4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} - bl@6.1.5: - resolution: {integrity: sha512-XylDt2P3JBttAwLpORq/hOEX9eJzP0r6Voa46C/WVvad8D1J0jW5876txB8FnzKtbdnU6X4Y1vOEvC6PllJrDg==} + bl@6.1.6: + resolution: {integrity: sha512-jLsPgN/YSvPUg9UX0Kd73CXpm2Psg9FxMeCSXnk3WBO3CMT10JMwijubhGfHCnFu6TPn1ei3b975dxv7K2pWVg==} bn.js@4.12.3: resolution: {integrity: sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==} @@ -7483,8 +7862,8 @@ packages: resolution: {integrity: sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==} engines: {node: '>=18'} - bonjour-service@1.3.0: - resolution: {integrity: sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==} + bonjour-service@1.4.1: + resolution: {integrity: sha512-9KM4QMPKnaJqaja1v7gYO/+TXZGLtzPA05NmUTqDAJjcsWeVoOXKMvU9g0gfuuoYTQqJZ924hivICd5R/bCJbA==} boolbase@1.0.0: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} @@ -7534,21 +7913,18 @@ packages: resolution: {integrity: sha512-YBjSAiTqM04ZVei6sXighu679a3SqWORA3qZTEqZImnlkDIFtKc6pNutpjyZ8RJTjQtuYfeetkxM11GwoYXMIQ==} engines: {node: '>= 0.10'} - browserify-sign@4.2.5: - resolution: {integrity: sha512-C2AUdAJg6rlM2W5QMp2Q4KGQMVBwR1lIimTsUnutJ8bMpW5B52pGpR2gEnNBNwijumDo5FojQ0L9JrXA8m4YEw==} + browserify-sign@4.2.6: + resolution: {integrity: sha512-sd+Q65fjlWCYWtZKXiKfrUc8d+4jtp/8f0W2NkwzLtoW4bI6UDnWusLWIurHnmurW0XShIRxpwiOX4EoPtXUAg==} engines: {node: '>= 0.10'} browserify-zlib@0.2.0: resolution: {integrity: sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==} - browserslist@4.28.1: - resolution: {integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==} + browserslist@4.28.2: + resolution: {integrity: sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true - bser@2.1.1: - resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} - bson@6.10.4: resolution: {integrity: sha512-WIsKqkSC0ABoBJuT1LEX+2HEvNmNKKgnTAyd0fL8qzK4SH2i9NXg+t08YtdZp/V9IZ33cxe3iV4yM0qg8lMQng==} engines: {node: '>=16.20.1'} @@ -7622,8 +7998,8 @@ packages: resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} engines: {node: '>= 0.4'} - call-bind@1.0.8: - resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} + call-bind@1.0.9: + resolution: {integrity: sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==} engines: {node: '>= 0.4'} call-bound@1.0.4: @@ -7660,8 +8036,8 @@ packages: caniuse-api@3.0.0: resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} - caniuse-lite@1.0.30001777: - resolution: {integrity: sha512-tmN+fJxroPndC74efCdp12j+0rk0RHwV5Jwa1zWaFVyw2ZxAuPeG8ZgWC3Wz7uSjT3qMRQ5XHZ4COgQmsCMJAQ==} + caniuse-lite@1.0.30001797: + resolution: {integrity: sha512-l8xKG+gwAIExZGl9FrF7KUwuOmk6wbEPC9Xoy/RtnWv1XG0Q4LFlagaLpUv3Kiza3W/wm27zy0yWJEieYKAP6w==} capital-case@1.0.4: resolution: {integrity: sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==} @@ -7714,8 +8090,8 @@ packages: chardet@2.1.1: resolution: {integrity: sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==} - check-error@2.1.1: - resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} + check-error@2.1.3: + resolution: {integrity: sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==} engines: {node: '>= 16'} cheerio-select@2.1.0: @@ -7764,6 +8140,9 @@ packages: cjs-module-lexer@1.4.3: resolution: {integrity: sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==} + cjs-module-lexer@2.2.0: + resolution: {integrity: sha512-4bHTS2YuzUvtoLjdy+98ykbNB5jS0+07EvFNXerqZQJ89F7DI6ET7OQo/HJuW6K0aVsKA9hj9/RVb2kQVOrPDQ==} + class-transformer@0.5.1: resolution: {integrity: sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==} @@ -7881,10 +8260,6 @@ packages: resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} engines: {node: '>=14'} - commander@13.1.0: - resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==} - engines: {node: '>=18'} - commander@14.0.0: resolution: {integrity: sha512-2uM9rYjPvyq39NwLRqaiLtWHyDC1FvryJDa2ATTVims5YAS4PupsEQsDvP14FqhFr0P49CYDugi59xaxJlTXRA==} engines: {node: '>=20'} @@ -7981,14 +8356,18 @@ packages: resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} engines: {node: '>= 0.6'} + content-type@2.0.0: + resolution: {integrity: sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ==} + engines: {node: '>=18'} + continuation-local-storage@3.2.1: resolution: {integrity: sha512-jx44cconVqkCEEyLSKWwkvUXwO561jXMa3LPjTPsm5QR22PA0/mhe33FT4Xb5y74JDvt/Cq+5lm8S8rskLv9ZA==} convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - cookie-signature@1.0.6: - resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} + cookie-signature@1.0.7: + resolution: {integrity: sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==} cookie@0.7.2: resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} @@ -7998,8 +8377,9 @@ packages: resolution: {integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==} engines: {node: '>=18'} - copy-anything@2.0.6: - resolution: {integrity: sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==} + copy-anything@3.0.5: + resolution: {integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==} + engines: {node: '>=12.13'} copy-text-to-clipboard@3.2.2: resolution: {integrity: sha512-T6SqyLd1iLuqPA90J5N4cTalrtovCySh58iiZDGJ6FGznbclKh4UI+FGacQSgFzwKG77W7XT5gwbVEbd9cIH1A==} @@ -8011,17 +8391,17 @@ packages: peerDependencies: webpack: ^5.105.4 - core-js-compat@3.47.0: - resolution: {integrity: sha512-IGfuznZ/n7Kp9+nypamBhvwdwLsW6KC8IOaURw2doAK5e98AG3acVLdh0woOnEqCfUtS+Vu882JE4k/DAm3ItQ==} + core-js-compat@3.49.0: + resolution: {integrity: sha512-VQXt1jr9cBz03b331DFDCCP90b3fanciLkgiOoy8SBHy06gNf+vQ1A3WFLqG7I8TipYIKeYK9wxd0tUrvHcOZA==} - core-js@3.47.0: - resolution: {integrity: sha512-c3Q2VVkGAUyupsjRnaNX6u8Dq2vAdzm9iuPj5FW0fRxzlxgq9Q39MDq10IvmQSpLgHQNyQzQmOo6bgGHmH3NNg==} + core-js@3.49.0: + resolution: {integrity: sha512-es1U2+YTtzpwkxVLwAFdSpaIMyQaq0PBgm3YD1W3Qpsn1NAmO3KSgZfu+oGSWVu6NvLHoHCV/aYcsE5wiB7ALg==} core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} - cors@2.8.5: - resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} + cors@2.8.6: + resolution: {integrity: sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==} engines: {node: '>= 0.10'} cosmiconfig@8.3.6: @@ -8070,8 +8450,8 @@ packages: peerDependencies: postcss: 8.5.10 - css-declaration-sorter@7.3.0: - resolution: {integrity: sha512-LQF6N/3vkAMYF4xoHLJfG718HRJh34Z8BnNhd6bosOMIVjMlhuZK5++oZa3uYAgrI5+7x2o27gUqTR2U/KjUOQ==} + css-declaration-sorter@7.4.0: + resolution: {integrity: sha512-LTuzjPoyA2vMGKKcaOqKSp7Ub2eGrNfKiZH4LpezxpNrsICGCSFvsQOI29psISxNZtaXibkC2CXzrQ5enMeGGw==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: 8.5.10 @@ -8146,8 +8526,8 @@ packages: css.escape@1.5.1: resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} - cssdb@8.4.3: - resolution: {integrity: sha512-8aaDS5nVqMXmYjlmmJpqlDJosiqbl2NJkYuSFOXR6RTY14qNosMrqT4t7O+EUm+OdduQg3GNI2ZwC03No1Y58Q==} + cssdb@8.9.0: + resolution: {integrity: sha512-J8jOU/hLjaXcO1LldOLraJSQpfLXRKof0I7mtbRyOy2AAXgqst0x9rlgi2qXeD6d0ou3ZLqcPAMqYVbpCbrxEw==} cssesc@3.0.0: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} @@ -8215,8 +8595,8 @@ packages: dataloader@2.2.3: resolution: {integrity: sha512-y2krtASINtPFS1rSDjacrFgn1dcUuoREVabwlOGOe4SdxenREqwjwjElAdwvbGM7kgZz9a3KVicWR7vcz8rnzA==} - dayjs@1.11.19: - resolution: {integrity: sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw==} + dayjs@1.11.21: + resolution: {integrity: sha512-98IT+HOahAisibz/yjKbzuOBwYcjJ7BCLPzARyHiyEBmRz4fatF+KPJszEHXsGYjUG234aH/cOjW1wwTbKUZlA==} debounce@1.2.1: resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==} @@ -8241,8 +8621,8 @@ packages: decimal.js@10.6.0: resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==} - decode-named-character-reference@1.2.0: - resolution: {integrity: sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==} + decode-named-character-reference@1.3.0: + resolution: {integrity: sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==} decompress-response@6.0.0: resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} @@ -8264,8 +8644,8 @@ packages: resolution: {integrity: sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==} engines: {node: '>=18'} - default-browser@5.4.0: - resolution: {integrity: sha512-XDuvSq38Hr1MdN47EDvYtx3U0MTqpCEn+F6ft8z2vYDzMrvQhVp0ui9oQdqW3MvK3vqUETglt1tVGgjLuJ5izg==} + default-browser@5.5.0: + resolution: {integrity: sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==} engines: {node: '>=18'} defaults@1.0.4: @@ -8326,11 +8706,6 @@ packages: resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} engines: {node: '>=8'} - detect-libc@1.0.3: - resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} - engines: {node: '>=0.10'} - hasBin: true - detect-libc@2.1.2: resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} @@ -8457,8 +8832,8 @@ packages: ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - electron-to-chromium@1.5.307: - resolution: {integrity: sha512-5z3uFKBWjiNR44nFcYdkcXjKMbg5KXNdciu7mhTPo9tB7NbqSNP2sSnGR+fqknZSCwKkBN+oxiiajWs4dT6ORg==} + electron-to-chromium@1.5.371: + resolution: {integrity: sha512-e9htk9mAYL6AzmkEhSvVVw7IWGSBJ/Bqdn2eRyRLrj1g6sncN4WbFt5qnILYoCktktr45pyjIrOiRvBThQ808w==} elliptic@6.6.1: resolution: {integrity: sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==} @@ -8489,16 +8864,12 @@ packages: enabled@2.0.0: resolution: {integrity: sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==} - encodeurl@1.0.2: - resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} - engines: {node: '>= 0.8'} - encodeurl@2.0.0: resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} engines: {node: '>= 0.8'} - enhanced-resolve@5.20.0: - resolution: {integrity: sha512-/ce7+jQ1PQ6rVXwe+jKEg5hW5ciicHwIQUagZkp6IufBoY3YDgdTTY1azVs0qoRgVmvsNB+rbjLJxDAeHHtwsQ==} + enhanced-resolve@5.23.0: + resolution: {integrity: sha512-yJN/BOOLxcOW2aQgeif9mSnaUB8KtvmMMp56oA1kx1CRfBKbhZm2pJ+NBY+3eOboHxix8lfjWpHE0Ei5U8RbSA==} engines: {node: '>=10.13.0'} entities@2.2.0: @@ -8522,8 +8893,8 @@ packages: error-stack-parser@2.1.4: resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==} - es-abstract@1.24.0: - resolution: {integrity: sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==} + es-abstract@1.24.2: + resolution: {integrity: sha512-2FpH9Q5i2RRwyEP1AylXe6nYLR5OhaJTZwmlcP0dL/+JCbgg7yyEo/sEK6HeGZRf3dFpWwThaRHVApXSkW3xeg==} engines: {node: '>= 0.4'} es-aggregate-error@1.0.14: @@ -8538,11 +8909,11 @@ 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.1.0: + resolution: {integrity: sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ==} - es-object-atoms@1.1.1: - resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + es-object-atoms@1.1.2: + resolution: {integrity: sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==} engines: {node: '>= 0.4'} es-set-tostringtag@2.1.0: @@ -8672,10 +9043,6 @@ packages: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} - eventsource-parser@3.1.0: - resolution: {integrity: sha512-kJezFj9YFAMLeORyi7aCLxLbD5/qWMQnoMVlVPyHIll7lgRJCc3JVln9Vgl9nwQi0YkMnhdGTMNn7CkRRAptMg==} - engines: {node: '>=18.0.0'} - evp_bytestokey@1.0.3: resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==} @@ -8717,6 +9084,9 @@ packages: fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + fast-levenshtein@3.0.0: + resolution: {integrity: sha512-hKKNajm46uNmTlhHSyZkmToAc56uZJwYq7yrciZjqOxnlfQwERDQJmHPUp7m1m9wx8vgOe8IaCKZ5Kv2k1DdCQ==} + fast-uri@3.1.2: resolution: {integrity: sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==} @@ -8727,8 +9097,12 @@ packages: resolution: {integrity: sha512-6bIM7fsJxeo3uXv7OncQYsBAMPJ7V16Slahl/6M98C/i2q+vB1+4a0MtrvYwDFEUrwDSbAmeLDRXsOBwrL7yAg==} hasBin: true - fastq@1.19.1: - resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} + fastest-levenshtein@1.0.16: + resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} + engines: {node: '>= 4.9.1'} + + fastq@1.20.1: + resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} fault@2.0.1: resolution: {integrity: sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==} @@ -8737,15 +9111,6 @@ packages: resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==} engines: {node: '>=0.8.0'} - fb-watchman@2.0.2: - resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} - - fbjs-css-vars@1.0.2: - resolution: {integrity: sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==} - - fbjs@3.0.5: - resolution: {integrity: sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg==} - fd-package-json@2.0.0: resolution: {integrity: sha512-jKmm9YtsNXN789RS/0mSzOC1NUq9mkVd65vbSSVsKdjGvYXBuE4oWe2QOEoFeRmJg+lPuZxpmrfFclNhoRMneQ==} @@ -8791,8 +9156,8 @@ packages: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} - finalhandler@1.3.1: - resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} + finalhandler@1.3.2: + resolution: {integrity: sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==} engines: {node: '>= 0.8'} finalhandler@2.1.1: @@ -8882,8 +9247,8 @@ packages: resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} engines: {node: '>= 0.6'} - fs-extra@11.3.2: - resolution: {integrity: sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==} + fs-extra@11.3.5: + resolution: {integrity: sha512-eKpRKAovdpZtR1WopLHxlBWvAgPny3c4gX1G5Jhwmmw4XJj0ifSD5qB5TOo8hmA0wlRKDAOAhEE1yVPgs6Fgcg==} engines: {node: '>=14.14'} fs.realpath@1.0.0: @@ -8924,6 +9289,10 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} + get-east-asian-width@1.6.0: + resolution: {integrity: sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==} + engines: {node: '>=18'} + get-intrinsic@1.3.0: resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} engines: {node: '>= 0.4'} @@ -8947,9 +9316,6 @@ packages: resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} engines: {node: '>= 0.4'} - get-tsconfig@4.13.0: - resolution: {integrity: sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==} - github-slugger@1.5.0: resolution: {integrity: sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==} @@ -8981,10 +9347,6 @@ packages: deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me hasBin: true - glob@13.0.0: - resolution: {integrity: sha512-tvZgpqk6fz4BaNZ66ZsRaZnbHvP/jG3uKJvAZOwEVUL4RTA5nJeeLYfyN9/VA8NX/V3IBG+hkeuGpKjvELkVhA==} - engines: {node: 20 || >=22} - glob@13.0.6: resolution: {integrity: sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==} engines: {node: 18 || 20 || >=22} @@ -9031,8 +9393,8 @@ packages: graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - graphql-config@5.1.5: - resolution: {integrity: sha512-mG2LL1HccpU8qg5ajLROgdsBzx/o2M6kgI3uAmoaXiSH9PCUbtIyLomLqUtCFaAeG2YCFsl0M5cfQ9rKmDoMVA==} + graphql-config@5.1.6: + resolution: {integrity: sha512-fCkYnm4Kdq3un0YIM4BCZHVR5xl0UeLP6syxxO7KAstdY7QVyVvTHP0kRPDYEP1v08uwtJVgis5sj3IOTLOniQ==} engines: {node: '>= 16.0.0'} peerDependencies: cosmiconfig-toml-loader: ^1.0.0 @@ -9069,22 +9431,19 @@ packages: peerDependencies: graphql: ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - graphql-ws@6.0.6: - resolution: {integrity: sha512-zgfER9s+ftkGKUZgc0xbx8T7/HMO4AV5/YuYiFc+AtgcO5T0v8AxYYNQ+ltzuzDZgNkYJaFspm5MMYLjQzrkmw==} + graphql-ws@6.0.8: + resolution: {integrity: sha512-m3EOaNsUBXwAnkBWbzPfe0Nq8pXUfxsWnolC54sru3FzHvhTZL0Ouf/BoQsaGAXqM+YPerXOJ47BUnmgmoupCw==} engines: {node: '>=20'} peerDependencies: '@fastify/websocket': ^10 || ^11 crossws: ~0.3 graphql: ^15.10.1 || ^16 - uWebSockets.js: ^20 ws: 8.21.0 peerDependenciesMeta: '@fastify/websocket': optional: true crossws: optional: true - uWebSockets.js: - optional: true ws: optional: true @@ -9093,8 +9452,8 @@ packages: engines: {node: '>= 6.x'} deprecated: 'No longer supported; please update to a newer version. Details: https://github.com/graphql/graphql-js#version-support' - graphql@16.12.0: - resolution: {integrity: sha512-DKKrynuQRne0PNpEbzuEdHlYOMksHSUI8Zc9Unei5gTsMNA2/vMpoMz/yKba50pejK56qj98qM0SjYxAKi13gQ==} + graphql@16.14.2: + resolution: {integrity: sha512-Chq1s4CY7jmh8gO2qvLIJyfCDIN+EHLFW/9iShnp1z8FjBQMoodWP1kDC36VAMXXIvAjj4ARa7ntfAV2BrjsbA==} engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} gray-matter@4.0.3: @@ -9154,10 +9513,6 @@ packages: hash.js@1.1.7: resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} - hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} - engines: {node: '>= 0.4'} - hasown@2.0.4: resolution: {integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==} engines: {node: '>= 0.4'} @@ -9177,8 +9532,8 @@ packages: hast-util-to-jsx-runtime@2.3.6: resolution: {integrity: sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==} - hast-util-to-parse5@8.0.0: - resolution: {integrity: sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==} + hast-util-to-parse5@8.0.1: + resolution: {integrity: sha512-MlWT6Pjt4CG9lFCjiz4BH7l9wmrMkfkJYCxFwKQic8+RTZgWPuWxwAfjJElsXkex7DJjfSJsQIt931ilUgmwdA==} hast-util-whitespace@3.0.0: resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} @@ -9202,8 +9557,8 @@ packages: hoist-non-react-statics@3.3.2: resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} - hosted-git-info@9.0.2: - resolution: {integrity: sha512-M422h7o/BR3rmCQ8UHi7cyyMqKltdP9Uo+J2fXK+RSAY+wTcKOIRyhTuKv4qn+DJf3g+PL890AzId5KZpX+CBg==} + hosted-git-info@9.0.3: + resolution: {integrity: sha512-Hc+ghLoSt6QaYZUv0WBiIvmMDZuZZ7oaDvdH8MbfOO4lOsxdXLEvuC6ePoGs9H1X9oCLyq6+NVN0MKqD+ydxyg==} engines: {node: ^20.17.0 || >=22.9.0} hpack.js@2.1.6: @@ -9237,8 +9592,8 @@ packages: html-void-elements@3.0.0: resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} - html-webpack-plugin@5.6.5: - resolution: {integrity: sha512-4xynFbKNNk+WlzXeQQ+6YYsH2g7mpfPszQZUi3ovKlj+pDmngQ7vRXjrrmGROabmKwyQkcgcX5hqfOwHbFmK5g==} + html-webpack-plugin@5.6.7: + resolution: {integrity: sha512-md+vXtdCAe60s1k6AU3dUyMJnDxUyQAwfwPKoLisvgUF1IXjtlLsk2se54+qfL9Mdm26bbwvjJybpNx48NKRLw==} engines: {node: '>=10.13.0'} peerDependencies: '@rspack/core': 0.x || 1.x @@ -9261,14 +9616,10 @@ packages: http-deceiver@1.2.7: resolution: {integrity: sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==} - http-errors@1.6.3: - resolution: {integrity: sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==} + http-errors@1.8.1: + resolution: {integrity: sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==} engines: {node: '>= 0.6'} - http-errors@2.0.0: - resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} - engines: {node: '>= 0.8'} - http-errors@2.0.1: resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==} engines: {node: '>= 0.8'} @@ -9320,8 +9671,8 @@ packages: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} - iconv-lite@0.7.0: - resolution: {integrity: sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==} + iconv-lite@0.7.2: + resolution: {integrity: sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==} engines: {node: '>=0.10.0'} icss-utils@5.1.0: @@ -9369,6 +9720,9 @@ packages: import-in-the-middle@1.15.0: resolution: {integrity: sha512-bpQy+CrsRmYmoPMAE/0G33iwRqwW4ouqdRg8jgbH3aKuCtOc8lxgmYXg2dMM92CRiGP660EtBcymH/eVUpCSaA==} + import-in-the-middle@2.0.6: + resolution: {integrity: sha512-3vZV3jX0XRFW3EJDTwzWoZa+RH1b8eTTx6YOCjglrLyPuepwoBti1k3L2dKwdCUrnVEfc5CuRuGstaC/uQJJaw==} + import-lazy@4.0.0: resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==} engines: {node: '>=8'} @@ -9397,9 +9751,6 @@ packages: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. - inherits@2.0.3: - resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} - inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} @@ -9432,8 +9783,8 @@ packages: resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} engines: {node: '>= 0.10'} - ipaddr.js@2.3.0: - resolution: {integrity: sha512-Zv/pA+ciVFbCSBBjGfaKUya/CcGmUHzTydLMaTwrUUEM2DIEO3iZvueGxmacvmN50fGpGVKeTXpb2LcYQxeVdg==} + ipaddr.js@2.4.0: + resolution: {integrity: sha512-9VGk3HGanVE6JoZXHiCpnGy5X0jYDnN4EA4lntFPj+1vIWlFhIylq2CrrCOJH9EAhc5CYhq18F2Av2tgoAPsYQ==} engines: {node: '>= 10'} is-absolute@1.0.0: @@ -9481,8 +9832,8 @@ packages: resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==} hasBin: true - is-core-module@2.16.1: - resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} + is-core-module@2.16.2: + resolution: {integrity: sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==} engines: {node: '>= 0.4'} is-data-view@1.0.2: @@ -9564,8 +9915,8 @@ packages: resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} engines: {node: '>= 0.4'} - is-network-error@1.3.0: - resolution: {integrity: sha512-6oIwpsgRfnDiyEDLMay/GqCl3HoAtH5+RUKW29gYkL0QA+ipzpDLA16yQs7/RHCSu+BwgbJaOUqa4A99qNVQVw==} + is-network-error@1.3.2: + resolution: {integrity: sha512-PhBY86zaxNZUuWP6h13Vu5oFe0XY6/UlKzQnYFELzGVHygP3MxmvTfYSG7GN3aIab/iWudSMgjSnG9Dq+nHrgA==} engines: {node: '>=16'} is-npm@6.1.0: @@ -9672,8 +10023,9 @@ packages: resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} engines: {node: '>= 0.4'} - is-what@3.14.1: - resolution: {integrity: sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==} + is-what@4.1.16: + resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==} + engines: {node: '>=12.13'} is-windows@1.0.2: resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} @@ -9683,8 +10035,8 @@ packages: resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} engines: {node: '>=8'} - is-wsl@3.1.0: - resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} + is-wsl@3.1.1: + resolution: {integrity: sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==} engines: {node: '>=16'} is-yarn-global@0.4.1: @@ -9720,6 +10072,11 @@ packages: peerDependencies: ws: 8.21.0 + isows@1.0.7: + resolution: {integrity: sha512-I1fSfDCZL5P0v33sVqeTDSpcstAg/N+wF5HS033mogOVIp4B+oHC7oOCsA3axAbBSGTJ8QubbNmnIRN/h8U7hg==} + peerDependencies: + ws: 8.21.0 + istanbul-lib-coverage@3.2.2: resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} engines: {node: '>=8'} @@ -9738,8 +10095,8 @@ packages: jackspeak@3.4.3: resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} - jackspeak@4.1.1: - resolution: {integrity: sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==} + jackspeak@4.2.3: + resolution: {integrity: sha512-ykkVRwrYvFm1nb2AJfKKYPr0emF6IiXDYUaFx4Zn9ZuIH7MrzEZ3sD5RlqGXNRpHtvUHJyOnCEFxOlNDtGo7wg==} engines: {node: 20 || >=22} jest-util@29.7.0: @@ -9811,9 +10168,6 @@ packages: json-schema-traverse@1.0.0: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - json-schema@0.4.0: - resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} - json-stringify-safe@5.0.1: resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} @@ -9829,24 +10183,18 @@ packages: engines: {node: '>=6'} hasBin: true - jsonfile@6.2.0: - resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==} + jsonfile@6.2.1: + resolution: {integrity: sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==} - jsonwebtoken@9.0.2: - resolution: {integrity: sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==} + jsonwebtoken@9.0.3: + resolution: {integrity: sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g==} engines: {node: '>=12', npm: '>=6'} - jwa@1.4.2: - resolution: {integrity: sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw==} - jwa@2.0.1: resolution: {integrity: sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==} - jws@3.2.3: - resolution: {integrity: sha512-byiJ0FLRdLdSVSReO/U4E7RoEyOCKnEnEPMjq3HxWtvzLsV08/i5RQKsFVNkCldrCaPr2vDNAOMsfs8T/Hze7g==} - - jws@4.0.0: - resolution: {integrity: sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==} + jws@4.0.1: + resolution: {integrity: sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==} jwt-decode@4.0.0: resolution: {integrity: sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==} @@ -9888,9 +10236,9 @@ packages: launch-editor@2.14.1: resolution: {integrity: sha512-QWBrQsMpH7gPr965dsKD/3cKWiNoTjpATQf++Xq63N6sKRGMwlVXz41O1IZTMfZQgBctD/K5Zt06+/I6pP6+HA==} - less@4.4.2: - resolution: {integrity: sha512-j1n1IuTX1VQjIy3tT7cyGbX7nvQOsFLoIqobZv4ttI5axP923gA44zUj6miiA6R5Aoms4sEGVIIcucXUbRI14g==} - engines: {node: '>=14'} + less@4.6.4: + resolution: {integrity: sha512-OJmO5+HxZLLw0RLzkqaNHzcgEAQG7C0y3aMbwtCzIUFZsLMNNq/1IdAdHEycQ58CwUO3jPTHmoN+tE5I7FQxNg==} + engines: {node: '>=18'} hasBin: true leven@2.1.0: @@ -9994,8 +10342,8 @@ packages: enquirer: optional: true - loader-runner@4.3.1: - resolution: {integrity: sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==} + loader-runner@4.3.2: + resolution: {integrity: sha512-DFEqQ3ihfS9blba08cLfYf1NRAIEm+dDjic073DRDc3/JspI/8wYmtDsHwd3+4hwvdxSK7PGaElfTmm0awWJ4w==} engines: {node: '>=6.11.5'} loader-utils@2.0.4: @@ -10121,15 +10469,15 @@ 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==} - lru-cache@7.18.3: - resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} - engines: {node: '>=12'} - - lru.min@1.1.3: - resolution: {integrity: sha512-Lkk/vx6ak3rYkRR0Nhu4lFUT2VDnQSxBe8Hbl7f36358p6ow8Bnvr8lrLt98H8J1aGxfhbX4Fs5tYg2+FTwr5Q==} + lru.min@1.1.4: + resolution: {integrity: sha512-DqC6n3QQ77zdFpCMASA1a3Jlb64Hv2N2DciFGkO/4L9+q/IpIAuRlKOvCXabtRW6cQf8usbmM6BE/TOPysCdIA==} engines: {bun: '>=1.0.0', deno: '>=1.30.0', node: '>=8.0.0'} luxon@3.7.2: @@ -10143,8 +10491,8 @@ packages: magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} - magicast@0.5.2: - resolution: {integrity: sha512-E3ZJh4J3S9KfwdjZhe2afj6R9lGIN5Pher1pF39UGrXRqq/VDaGVIGN13BjHd2u8B61hArAGOnso7nBOouW3TQ==} + magicast@0.5.3: + resolution: {integrity: sha512-pVKE4UdSQ7DvHzivsCIFx2BJn1mHG6KsyrFcaxFx6tONdneEuThrDx0Cj3AMg58KyN4pzYT+LHOotxDQDjNvkw==} make-dir@2.1.0: resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} @@ -10169,11 +10517,6 @@ packages: markdown-table@3.0.4: resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} - marked@16.4.2: - resolution: {integrity: sha512-TI3V8YYWvkVf3KJe1dRkpnjs68JUPyEa5vjKrp1XEEJUAOaQc+Qj+L1qWbPd0SJuAdQkFU0h73sXXqwDYxsiDA==} - engines: {node: '>= 20'} - hasBin: true - matcher@3.0.0: resolution: {integrity: sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==} engines: {node: '>=10'} @@ -10191,8 +10534,8 @@ packages: mdast-util-find-and-replace@3.0.2: resolution: {integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==} - mdast-util-from-markdown@2.0.2: - resolution: {integrity: sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==} + mdast-util-from-markdown@2.0.3: + resolution: {integrity: sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==} mdast-util-frontmatter@2.0.1: resolution: {integrity: sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA==} @@ -10253,8 +10596,10 @@ packages: resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} engines: {node: '>= 0.8'} - memfs@4.51.1: - resolution: {integrity: sha512-Eyt3XrufitN2ZL9c/uIRMyDwXanLI88h/L3MoWqNY747ha3dMR9dWqp8cRT5ntjZ0U1TNuq4U91ZXK0sMBjYOQ==} + memfs@4.57.6: + resolution: {integrity: sha512-WQK+DGjKCnPdpSyJUXphz+COF2uEhhsxQ3VIWBSbzpbbXuch3h4FePMqXrXGdLjsTgo4JFzBFsP6AWd9pVazGw==} + peerDependencies: + tslib: '2' memory-pager@1.5.0: resolution: {integrity: sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==} @@ -10463,8 +10808,8 @@ packages: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} - mini-css-extract-plugin@2.9.4: - resolution: {integrity: sha512-ZWYT7ln73Hptxqxk2DxPU9MmapXRhxkJD6tkSR04dnQxm8BGu2hzgKLugK5yySD97u/8yy7Ma7E76k9ZdvtjkQ==} + mini-css-extract-plugin@2.10.2: + resolution: {integrity: sha512-AOSS0IdEB95ayVkxn5oGzNQwqAi2J0Jb/kKm43t7H73s8+f5873g0yuj0PNvK4dO75mu5DHg4nlgp4k6Kga8eg==} engines: {node: '>= 12.13.0'} peerDependencies: webpack: ^5.105.4 @@ -10475,8 +10820,8 @@ packages: minimalistic-crypto-utils@1.0.1: resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} - minimatch@10.2.4: - resolution: {integrity: sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==} + minimatch@10.2.5: + resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} engines: {node: 18 || 20 || >=22} minimatch@3.1.5: @@ -10510,12 +10855,12 @@ packages: mongodb-connection-string-url@3.0.2: resolution: {integrity: sha512-rMO7CGo/9BFwyZABcKAWL8UJwH/Kc2x0g72uhDWzG48URRax5TCIcJ7Rc3RZqffZzO/Gwff/jyKwCU9TN8gehA==} - mongodb-memory-server-core@10.3.0: - resolution: {integrity: sha512-tp+ZfTBAPqHXjROhAFg6HcVVzXaEhh/iHcbY7QPOIiLwr94OkBFAw4pixyGSfP5wI2SZeEA13lXyRmBAhugWgA==} + mongodb-memory-server-core@10.4.3: + resolution: {integrity: sha512-IPjlw73IoSYopnqBibQKxmAXMbOEPf5uGAOsBcaUiNH/TOI7V19WO+K7n5KYtnQ9FqzLGLpvwCGuPOTBSg4s5Q==} engines: {node: '>=16.20.1'} - mongodb-memory-server@10.3.0: - resolution: {integrity: sha512-dRNr2uEhMgjEe6kgqS+ITBKBbl2cz0DNBjNZ12BGUckvEOAHbhd3R7q/lFPSZrZ6AMKa2EOUJdAmFF1WlqSbsA==} + mongodb-memory-server@10.4.3: + resolution: {integrity: sha512-CDZvFisXvGIigsIw5gqH6r9NI/zxGa/uRdutgUL/isuJh+inj0YXb7Ykw6oFMFzqgTJWb7x0I5DpzrqCstBWpg==} engines: {node: '>=16.20.1'} mongodb@6.18.0: @@ -10545,39 +10890,12 @@ packages: socks: optional: true - mongodb@6.21.0: - resolution: {integrity: sha512-URyb/VXMjJ4da46OeSXg+puO39XH9DeQpWCslifrRn9JWugy0D+DvvBvkm2WxmHe61O/H19JM66p1z7RHVkZ6A==} - 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 - mongoose@8.17.0: resolution: {integrity: sha512-mxW6TBPHViORfNYOFXCVOnT4d5aRr+CgDxTs1ViYXfuHzNpkelgJQrQa+Lz6hofoEQISnKlXv1L3ZnHyJRkhfA==} 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: @@ -10612,27 +10930,29 @@ packages: mute-stream@0.0.8: resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} - mysql2@3.15.3: - resolution: {integrity: sha512-FBrGau0IXmuqg4haEZRBfHNWB5mUARw6hNwPDXXGg0XzVJ50mr/9hb267lvpVMnhZ1FON3qNd4Xfcez1rbFwSg==} + mysql2@3.22.5: + resolution: {integrity: sha512-95uZ2TrPWAZdwpB3vvvDbmEMcNG8yIeNCyu6GUcr/QnWEE/wXm7+mhOCsdQfWQDTV7qYT/PDUZ4U4UPP4AsXqQ==} engines: {node: '>= 8.0'} + peerDependencies: + '@types/node': '>= 8' mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} - named-placeholders@1.1.3: - resolution: {integrity: sha512-eLoBxg6wE/rZkJPhU/xRX1WTpkFEwDJEN96oxFrTsqBdbT5ec295Q+CoHrL9IT0DipqKhmGcaZmwOt8OON5x1w==} - engines: {node: '>=12.0.0'} + named-placeholders@1.1.6: + resolution: {integrity: sha512-Tz09sEL2EEuv5fFowm419c1+a/jSMiBjI9gHxVLrVdbUkkNUUfjsVYs9pVZu5oCon/kmRh9TfLEObFtkVxmY0w==} + engines: {node: '>=8.0.0'} - nanoid@3.3.11: - resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + nanoid@3.3.12: + resolution: {integrity: sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true native-duplexpair@1.0.0: resolution: {integrity: sha512-E7QQoM+3jvNtlmyfqRZ0/U75VFgCls+fSkbml2MpgWkWyz3ox8Y58gNhfuziuQYGNNQAbFZJQck55LHCnCK6CA==} - needle@3.3.1: - resolution: {integrity: sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==} + needle@3.5.0: + resolution: {integrity: sha512-jaQyPKKk2YokHrEg+vFDYxXIHTCBgiZwSHOoVx/8V3GIBS8/VN6NdVRmg8q1ERtPkMvmOvebsgga4sAj5hls/w==} engines: {node: '>= 4.4.x'} hasBin: true @@ -10690,11 +11010,9 @@ packages: resolution: {integrity: sha512-LarFH0+6VfriEhqMMcLX2F7SwSXeWwnEAJEsYm5QKWchiVYVvJyV9v7UDvUv+w5HO23ZpQTXDv/GxdDdMyOuoQ==} engines: {node: '>= 6.13.0'} - node-int64@0.4.0: - resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} - - node-releases@2.0.27: - resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==} + node-releases@2.0.47: + resolution: {integrity: sha512-Uzmd6LXpouKo8EUK68IjH4+E01w/hXyV3R3g/geCJo+rXLNfh1xucB+LOzYEOQPSiUK3h/xZf0cQGcSsmyL2Og==} + engines: {node: '>=18'} node-stdlib-browser@1.3.1: resolution: {integrity: sha512-X75ZN8DCLftGM5iKwoYLA3rjnrAEs97MkzvSd4q2746Tgpg8b8XWiBGiBG4ZpgcAqBgtgPHTiAc8ZMCvZuikDw==} @@ -10716,12 +11034,8 @@ packages: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} - normalize-range@0.1.2: - resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} - engines: {node: '>=0.10.0'} - - normalize-url@8.1.0: - resolution: {integrity: sha512-X06Mfd/5aKsRHc0O0J5CUedwnPmnDtLF2+nq+KN9KSDlJHkPuh0JUviWjEWMe0SW/9TDdSLVPuk7L5gGTIA1/w==} + normalize-url@8.1.1: + resolution: {integrity: sha512-JYc0DPlpGWB40kH5g07gGTrYuMqV653k3uBKY6uITPWds3M0ov3GaWGp9lbE3Bzngx8+XkfzgvASb9vk9JDFXQ==} engines: {node: '>=14.16'} npm-run-path@4.0.1: @@ -10740,11 +11054,8 @@ packages: peerDependencies: webpack: ^5.105.4 - nullthrows@1.1.1: - resolution: {integrity: sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==} - - nwsapi@2.2.22: - resolution: {integrity: sha512-ujSMe1OWVn55euT1ihwCI1ZcAaAU3nxUiDwfDQldc51ZXaB9m2AyOn6/jh1BLe2t/G8xd6uKG1UBF2aZJeg2SQ==} + nwsapi@2.2.24: + resolution: {integrity: sha512-7YRhZ3jS45LwmSCT4b2sVFHt/WuovaktDU07QrtOBY2PXskss5a9jfmR9jptyumwXST+rFjrmppMY1KT/yn35A==} object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} @@ -10773,17 +11084,14 @@ packages: obuf@1.1.2: resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} - obug@2.1.1: - resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} + obug@2.1.2: + resolution: {integrity: sha512-AWGB9WFcRXOQs48Z/udjI5ZcZMHXwX8XPByNpOydgcGsDLIzjGizhoMWJyKAWze7AVW/2W1i+/gPX4YtKe5cyg==} + engines: {node: '>=12.20.0'} - oidc-client-ts@3.4.1: - resolution: {integrity: sha512-jNdst/U28Iasukx/L5MP6b274Vr7ftQs6qAhPBCvz6Wt5rPCA+Q/tUmCzfCHHWweWw5szeMy2Gfrm1rITwUKrw==} + oidc-client-ts@3.5.0: + resolution: {integrity: sha512-l2q8l9CTCTOlbX+AnK4p3M+4CEpKpyQhle6blQkdFhm0IsBqsxm15bYaSa11G7pWdsYr6epdsRZxJpCyCRbT8A==} 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'} @@ -10828,14 +11136,14 @@ packages: resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} engines: {node: '>= 0.4'} - oxc-parser@0.121.0: - resolution: {integrity: sha512-ek9o58+SCv6AV7nchiAcUJy1DNE2CC5WRdBcO0mF+W4oRjNQfPO7b3pLjTHSFECpHkKGOZSQxx3hk8viIL5YCg==} - engines: {node: ^20.19.0 || >=22.12.0} - oxc-parser@0.127.0: resolution: {integrity: sha512-bkgD4qHlN7WxLdX8bLXdaU54TtQtAIg/ZBAfm0aje/mo3MRDo3P0hZSgr4U7O3xfX+fQmR5AP04JS/TGcZLcFA==} engines: {node: ^20.19.0 || >=22.12.0} + oxc-parser@0.130.0: + resolution: {integrity: sha512-X0PJ+NmOok8qP3vK9uaW431ngkdM9UPEK7KG466urtIL2+EYTEgbZK2yqe2MWKJKBjRlFweP/pJPx0x9muMEVw==} + engines: {node: ^20.19.0 || >=22.12.0} + oxc-resolver@11.20.0: resolution: {integrity: sha512-CblytBiV/a/ZXY34dsVU2NxhIOxMXst8CvDCtyBelVITgd7PLrKzbEbA6oKLdPjvDKDzCiW48qzmzZ+mYaqn+g==} @@ -11011,8 +11319,8 @@ packages: path-to-regexp@3.3.0: resolution: {integrity: sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw==} - path-to-regexp@8.4.0: - resolution: {integrity: sha512-PuseHIvAnz3bjrM2rGJtSgo1zjgxapTLZ7x2pjhzWwlp4SJQgK3f3iZIQwkpEnBaKz6seKBADpM4B4ySkuYypg==} + path-to-regexp@8.4.2: + resolution: {integrity: sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==} path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} @@ -11029,8 +11337,8 @@ packages: resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==} engines: {node: '>= 14.16'} - pbkdf2@3.1.5: - resolution: {integrity: sha512-Q3CG/cYvCO1ye4QKkuH7EXxs3VC/rI1/trd+qX2+PolbaKG0H+bgcZzrTt96mMyRtejk+JMCiLUn3y29W8qmFQ==} + pbkdf2@3.1.6: + resolution: {integrity: sha512-BT6eelPB1EyGHo8pC0o9Bl6k6SYVhKO1jEbd3lcTrtr7XHdjP8BW1YpfCV3G9Kwkxgattk+S5q2/RvuttCsS1g==} engines: {node: '>= 0.10'} pegjs-backtrace@0.2.1: @@ -11039,8 +11347,8 @@ packages: pend@1.2.0: resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} - pg-connection-string@2.9.1: - resolution: {integrity: sha512-nkc6NpDcvPVpZXxrreI/FOtX3XemeLl8E0qFr6F2Lrm/I8WOnaWNhIPK2Z7OHpw7gh5XJThi6j6ppgNoaT1w4w==} + pg-connection-string@2.13.0: + resolution: {integrity: sha512-EMnU9E2fSULdsbErBbMaXJvFeD9B4+nPcM3f+4lsiCR0BHLPrLVjv3DbyM2hgQQviKJaTWIRRTjKjWlHg3p2ig==} picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -11452,8 +11760,8 @@ packages: peerDependencies: postcss: 8.5.10 - postcss-preset-env@10.4.0: - resolution: {integrity: sha512-2kqpOthQ6JhxqQq1FSAAZGe9COQv75Aw8WbsOvQVNJ2nSevc9Yx/IKZGuZ7XJ+iOTtVon7LfO7ELRzg8AZ+sdw==} + postcss-preset-env@10.6.1: + resolution: {integrity: sha512-yrk74d9EvY+W7+lO9Aj1QmjWY9q5NsKjK2V9drkOPZB/X6KZ0B3igKsHUYakb7oYVhnioWypQX3xGuePf89f3g==} engines: {node: '>=18'} peerDependencies: postcss: 8.5.10 @@ -11497,8 +11805,8 @@ packages: resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} engines: {node: '>=4'} - postcss-selector-parser@7.1.1: - resolution: {integrity: sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==} + postcss-selector-parser@7.1.2: + resolution: {integrity: sha512-Wjvt4scRFouioIInHf51IFNP4ltJ2EngJM+cZPGiqbKetBfmP3vpdPV8ID2S6JS6/jdo74N8+aEYH9lQr2C6sA==} engines: {node: '>=4'} postcss-sort-media-queries@5.2.0: @@ -11563,9 +11871,6 @@ packages: resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} engines: {node: '>=0.4.0'} - promise@7.3.1: - resolution: {integrity: sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==} - prompts@2.4.2: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} @@ -11573,17 +11878,14 @@ packages: prop-types@15.8.1: resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} - properties-file@3.6.1: - resolution: {integrity: sha512-9NUyJcxSqdWcJGRpPq6rT7exQbSQMPs0sK6KTvCJsLrTQRwq+hmt/wIB32ugNZmvEuSPyFO+y4nLK3vX34i5Wg==} + properties-file@4.0.0: + resolution: {integrity: sha512-VWnuWVVQIeYPdJwWfBVu6/SQExpAliGkY8Bq58pHHPJHgD4THXlJfsc+qC41+62iV4WNwQhmrxbqpEXIvIMOmw==} property-expr@2.0.6: resolution: {integrity: sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA==} - property-information@6.5.0: - resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} - - property-information@7.1.0: - resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==} + property-information@7.2.0: + resolution: {integrity: sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg==} proto-list@1.2.4: resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} @@ -11596,9 +11898,6 @@ packages: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} - proxy-from-env@1.1.0: - resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - proxy-from-env@2.1.0: resolution: {integrity: sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==} engines: {node: '>=10'} @@ -11686,19 +11985,24 @@ packages: resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} hasBin: true + react-compiler-runtime@1.0.0: + resolution: {integrity: sha512-rRfjYv66HlG8896yPUDONgKzG5BxZD1nV9U6rkm+7VCuvQc903C4MjcoZR4zPw53IKSOX9wMQVpA1IAbRtzQ7w==} + peerDependencies: + react: ^17.0.0 || ^18.0.0 || ^19.0.0 || ^0.0.0-experimental + react-docgen-typescript@2.4.0: resolution: {integrity: sha512-ZtAp5XTO5HRzQctjPU0ybY0RRCQO19X/8fxn3w7y2VVTUbGHDKULPTL4ky3vB05euSgG5NpALhEhDPvQ56wvXg==} peerDependencies: typescript: '>= 4.3.x' - react-docgen@8.0.2: - resolution: {integrity: sha512-+NRMYs2DyTP4/tqWz371Oo50JqmWltR1h2gcdgUMAWZJIAvrd0/SqlCfx7tpzpl/s36rzw6qH2MjoNrxtRNYhA==} + react-docgen@8.0.3: + resolution: {integrity: sha512-aEZ9qP+/M+58x2qgfSFEWH1BxLyHe5+qkLNJOZQb5iGS017jpbRnoKhNRrXPeA6RfBrZO5wZrT9DMC1UqE1f1w==} engines: {node: ^20.9.0 || >=22} - react-dom@19.2.0: - resolution: {integrity: sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==} + react-dom@19.2.7: + resolution: {integrity: sha512-t0BRVXvbiE/o20Hfw669rLbMCDWtYZLvmJigy2f0MxsXF+71pxhR3xOkspmsO8h3ZlNzyibAmtCa3l4lYKk6gQ==} peerDependencies: - react: ^19.2.0 + react: ^19.2.7 react-fast-compare@3.2.2: resolution: {integrity: sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==} @@ -11725,8 +12029,8 @@ packages: react-loadable: '*' webpack: ^5.105.4 - react-oidc-context@3.3.0: - resolution: {integrity: sha512-302T/ma4AOVAxrHdYctDSKXjCq9KNHT564XEO2yOPxRfxEP58xa4nz+GQinNl8x7CnEXECSM5JEjQJk3Cr5BvA==} + react-oidc-context@3.3.1: + resolution: {integrity: sha512-/Azvm9W4DhhOtSDBE73kFInh1b6zZRRfILKbgmk2syExMF0PCYJOn/dGdOOi2BFX8x0rCeUe45NXHU+/+xDcrQ==} engines: {node: '>=18'} peerDependencies: oidc-client-ts: ^3.1.0 @@ -11765,8 +12069,8 @@ packages: react-dom: optional: true - react@19.2.0: - resolution: {integrity: sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==} + react@19.2.7: + resolution: {integrity: sha512-HNe9WslTbXmFK8o8cmwgAeJFSBvt1bPdHCVKtaaV+WlAN36mpT4hcRpwbf3fY56ar2oIXzsBpOAiIRHAdY0OlQ==} engines: {node: '>=0.10.0'} read-cache@1.0.0: @@ -11849,8 +12153,8 @@ packages: resolution: {integrity: sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==} engines: {node: '>=4'} - registry-auth-token@5.1.0: - resolution: {integrity: sha512-GdekYuwLXLxMuFTwAPg5UKGLW/UXzQrZvH/Zj791BQif5T05T0RsaLfHc9q3ZOKi7n+BoprPD9mJ0O0k4xzUlw==} + registry-auth-token@5.1.1: + resolution: {integrity: sha512-P7B4+jq8DeD2nMsAcdfaqHbssgHtZ7Z5+++a5ask90fvmJ8p5je4mOa+wzu+DB4vQ5tdJV/xywY+UnVFeQLV5Q==} engines: {node: '>=14'} registry-url@6.0.1: @@ -11860,8 +12164,8 @@ packages: regjsgen@0.8.0: resolution: {integrity: sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==} - regjsparser@0.13.0: - resolution: {integrity: sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q==} + regjsparser@0.13.1: + resolution: {integrity: sha512-dLsljMd9sqwRkby8zhO1gSg3PnJIBFid8f4CQj/sXx+7cKx+E7u0PKhZ+U4wmhx7EfmtvnA318oVaIkAB1lRJw==} hasBin: true rehackt@0.1.0: @@ -11885,9 +12189,6 @@ packages: resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==} engines: {node: '>= 0.10'} - relay-runtime@12.0.0: - resolution: {integrity: sha512-QU6JKr1tMsry22DXNy9Whsq5rmvwr3LSZiiWV/9+DFpuTWvp+WFhobWMc8TC4OjKFfNhEZy7mOiqUAn5atQtug==} - remark-directive@3.0.1: resolution: {integrity: sha512-gwglrEQEZcZYgVyG1tQuA+h58EZfq5CSULw7J90AFuCTyib1thgHPoqQ+h9iFvU6R+vnZ5oNFQR5QKgGpk741A==} @@ -11944,6 +12245,10 @@ packages: resolution: {integrity: sha512-gAZ+kLqBdHarXB64XpAe2VCjB7rIRv+mU8tfRWziHRJ5umKsIHN2tLLv6EtMw7WCdP19S0ERVMldNvxYCHnhSQ==} engines: {node: '>=8.6.0'} + require-in-the-middle@8.0.1: + resolution: {integrity: sha512-QT7FVMXfWOYFbeRBF6nu+I6tr2Tf3u0q8RIEjNob/heKY/nh7drD/k7eeMFmSQgnTtCzLDcCu/XEnpW2wk4xCQ==} + engines: {node: '>=9.3.0 || >=8.10.0 <9.0.0'} + require-like@0.1.2: resolution: {integrity: sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A==} @@ -11967,11 +12272,8 @@ packages: resolve-pathname@3.0.0: resolution: {integrity: sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==} - resolve-pkg-maps@1.0.0: - resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - - resolve@1.22.11: - resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==} + resolve@1.22.12: + resolution: {integrity: sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==} engines: {node: '>= 0.4'} hasBin: true @@ -12007,8 +12309,8 @@ packages: engines: {node: 20 || >=22} hasBin: true - rimraf@6.1.2: - resolution: {integrity: sha512-cFCkPslJv7BAXJsYlK1dZsbP8/ZNLkCAQ0bi1hf5EKX2QHegmDFEFA6QhuYJlk7UDdc+02JjO80YSOrWPpw06g==} + rimraf@6.1.3: + resolution: {integrity: sha512-LKg+Cr2ZF61fkcaK1UdkH2yEBBKnYjTyWzTJT6KNPcSPaiT7HSdhtMXQuN5wkTX0Xu72KQ1l8S42rlmexS2hSA==} engines: {node: 20 || >=22} hasBin: true @@ -12030,8 +12332,8 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} hasBin: true - rollup-plugin-visualizer@6.0.5: - resolution: {integrity: sha512-9+HlNgKCVbJDs8tVtjQ43US12eqaiHyyiLMdBwQ7vSZPiHMysGNo2E88TAp1si5wx8NAoYriI2A5kuKfIakmJg==} + rollup-plugin-visualizer@6.0.11: + resolution: {integrity: sha512-TBwVHVY7buHjIKVLqr9scTVFwqZqMXINcCphPwIWKPDCOBIa+jCQfafvbjRJDZgXdq/A996Dy6yGJ/+/NtAXDQ==} engines: {node: '>=18'} hasBin: true peerDependencies: @@ -12065,8 +12367,8 @@ packages: rxjs@7.8.2: resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} - safe-array-concat@1.1.3: - resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} + safe-array-concat@1.1.4: + resolution: {integrity: sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg==} engines: {node: '>=0.4'} safe-buffer@5.1.2: @@ -12090,11 +12392,8 @@ packages: safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - sax@1.4.3: - resolution: {integrity: sha512-yqYn1JhPczigF94DMS+shiDMjDowYO6y9+wB/4WgO0Y19jWYk0lQ4tuG5KI7kj4FTp1wxPj5IFfcrz/s1c3jjQ==} - - sax@1.5.0: - resolution: {integrity: sha512-21IYA3Q5cQf089Z6tgaUTr7lDAyzoTPx5HRtbhsME8Udispad8dC/+sziTNugOEx54ilvatQ9YCzl4KQLPcRHA==} + sax@1.6.0: + resolution: {integrity: sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==} engines: {node: '>=11.0.0'} saxes@6.0.0: @@ -12153,11 +12452,6 @@ packages: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - semver@7.7.2: - resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} - engines: {node: '>=10'} - hasBin: true - semver@7.7.4: resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==} engines: {node: '>=10'} @@ -12168,21 +12462,18 @@ packages: engines: {node: '>=10'} hasBin: true - semver@7.8.1: - resolution: {integrity: sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg==} + semver@7.8.4: + resolution: {integrity: sha512-rUCObTnP32Q08R2uuIrt7r9PlEonuTmtuXYcW6s5kjdlj3xbnwe+21yXptAUYcMAABLkYYTtnmzb3w3EDZfueA==} engines: {node: '>=10'} hasBin: true - send@0.19.0: - resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} + send@0.19.2: + resolution: {integrity: sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==} engines: {node: '>= 0.8.0'} sentence-case@3.0.4: resolution: {integrity: sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==} - seq-queue@0.0.5: - resolution: {integrity: sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==} - sequelize-pool@7.1.0: resolution: {integrity: sha512-G9c0qlIWQSK29pR/5U2JF5dDQeqqHRragoyahj/Nx4KOOQ3CPPfzxnfqFPCSB7x5UgjOgnZ61nSxz+fjDpRlJg==} engines: {node: '>= 10.0.0'} @@ -12231,12 +12522,12 @@ packages: serve-handler@6.1.7: resolution: {integrity: sha512-CinAq1xWb0vR3twAv9evEU8cNWkXCb9kd5ePAHUKJBkOsUpR1wt/CvGdeca7vqumL1U5cSaeVQ6zZMxiJ3yWsg==} - serve-index@1.9.1: - resolution: {integrity: sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==} + serve-index@1.9.2: + resolution: {integrity: sha512-KDj11HScOaLmrPxl70KYNW1PksP4Nb/CLL2yvC+Qd2kHMPEEpfc4Re2e4FOay+bC/+XQl/7zAcWON3JVo5v3KQ==} engines: {node: '>= 0.8.0'} - serve-static@1.16.2: - resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} + serve-static@1.16.3: + resolution: {integrity: sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==} engines: {node: '>= 0.8.0'} set-cookie-parser@2.7.2: @@ -12257,9 +12548,6 @@ packages: setimmediate@1.0.5: resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} - setprototypeof@1.1.0: - resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==} - setprototypeof@1.2.0: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} @@ -12290,8 +12578,8 @@ packages: shimmer@1.2.1: resolution: {integrity: sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==} - side-channel-list@1.0.0: - resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} + side-channel-list@1.0.1: + resolution: {integrity: sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==} engines: {node: '>= 0.4'} side-channel-map@1.0.1: @@ -12302,8 +12590,8 @@ packages: resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} engines: {node: '>= 0.4'} - side-channel@1.1.0: - resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} + side-channel@1.1.1: + resolution: {integrity: sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==} engines: {node: '>= 0.4'} sift@17.1.3: @@ -12319,9 +12607,6 @@ packages: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} - signedsource@1.0.0: - resolution: {integrity: sha512-6+eerH9fEnNmi/hyM1DXcRK3pWdoMQtlkQ+ns0ntzunjKqp5i3sKCc80ym8Fib3iaYhdJUOPdhlJWj1tvge2Ww==} - sirv@2.0.4: resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==} engines: {node: '>= 10'} @@ -12333,8 +12618,8 @@ packages: sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} - sitemap@7.1.2: - resolution: {integrity: sha512-ARCqzHJ0p4gWt+j7NlU5eDlIO9+Rkr/JhPFZKKQ1l5GCus7rJH4UdrlVAh0xC/gDS/Qir2UMxqYNHtsKr2rpCw==} + sitemap@7.1.3: + resolution: {integrity: sha512-tAjEd+wt/YwnEbfNB2ht51ybBJxbEWwe5ki/Z//Wh0rpBFTCUSj46GnxUKEWzhfuJTsee8x3lybHxFgUMig2hw==} engines: {node: '>=12.0.0', npm: '>=5.6.0'} hasBin: true @@ -12362,8 +12647,8 @@ packages: resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} engines: {node: '>=10'} - slugify@1.6.6: - resolution: {integrity: sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==} + slugify@1.6.9: + resolution: {integrity: sha512-vZ7rfeehZui7wQs438JXBckYLkIIdfHOXsaVEUMyS5fHo1483l1bMdo0EDSWYclY0yZKFOipDy4KHuKs6ssvdg==} engines: {node: '>=8.0.0'} smol-toml@1.6.1: @@ -12373,8 +12658,8 @@ packages: snake-case@3.0.4: resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} - snyk@1.1301.0: - resolution: {integrity: sha512-kTb8F9L1PlI3nYWlp60wnSGWGmcRs6bBtSBl9s8YYhAiFZNseIZfXolQXBSCaya5QlcxzfH1pb4aqCNMbi0tgg==} + snyk@1.1305.1: + resolution: {integrity: sha512-yvQdjZ6wvKfkUXJ1iqiurcUvwWy7ICJSp+kqpC1JuYQ617PO/fSDEO5AkuvkFxOXuVPqUoG6hNaOzrpkO0QWzg==} engines: {node: '>=12'} hasBin: true @@ -12415,8 +12700,8 @@ packages: spdx-expression-parse@3.0.1: resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} - spdx-license-ids@3.0.22: - resolution: {integrity: sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==} + spdx-license-ids@3.0.23: + resolution: {integrity: sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw==} spdy-transport@3.0.0: resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==} @@ -12437,9 +12722,9 @@ packages: sprintf-js@1.1.3: resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} - sqlstring@2.3.3: - resolution: {integrity: sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==} - engines: {node: '>= 0.6'} + sql-escaper@1.3.3: + resolution: {integrity: sha512-BsTCV265VpTp8tm1wyIm1xqQCS+Q9NHx2Sr+WcnUrgLrQ6yiDIvHYJV5gHxsj1lMBy2zm5twLaZao8Jd+S8JJw==} + engines: {bun: '>=1.0.0', deno: '>=2.0.0', node: '>=12.0.0'} srcset@4.0.0: resolution: {integrity: sha512-wvLeHgcVHKO8Sc/H/5lkGreJQVeYMm9rlmt8PuR1xE31rIuXhuzznUUqAt8MqLhB3MqJdFzlNAfpcWnxiFUcPw==} @@ -12465,10 +12750,6 @@ packages: resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} engines: {node: '>= 0.6'} - statuses@2.0.1: - resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} - engines: {node: '>= 0.8'} - statuses@2.0.2: resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} engines: {node: '>= 0.8'} @@ -12476,8 +12757,8 @@ packages: std-env@3.10.0: resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} - std-env@4.0.0: - resolution: {integrity: sha512-zUMPtQ/HBY3/50VbpkupYHbRroTRZJPRLvreamgErJVys0ceuzMkD44J/QjqhHjOzK42GQ3QZIeFG1OYfOtKqQ==} + std-env@4.1.0: + resolution: {integrity: sha512-Rq7ybcX2RuC55r9oaPVEW7/xu3tj8u4GeBYHBWCychFtzMIr86A7e3PPEBPT37sHStKX3+TiX/Fr/ACmJLVlLQ==} stop-iteration-iterator@1.1.0: resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} @@ -12518,8 +12799,8 @@ packages: stream-http@3.2.0: resolution: {integrity: sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==} - streamx@2.23.0: - resolution: {integrity: sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==} + streamx@2.27.0: + resolution: {integrity: sha512-WZ189TKnHoAokYHvwzaAQMpd55cgUmFIcJFzBSgGcb886jau5DL+XdDhTWV4ps3FLvk+OORp0dLRTPsLZ21CSA==} string-argv@0.3.1: resolution: {integrity: sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==} @@ -12539,12 +12820,16 @@ packages: resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} engines: {node: '>=12'} - string.prototype.trim@1.2.10: - resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} + string-width@8.2.1: + resolution: {integrity: sha512-IIaP0g3iy9Cyy18w3M9YcaDudujEAVHKt3a3QJg1+sr/oX96TbaGUubG0hJyCjCBThFH+tFpcIyoUHUn1ogaLA==} + engines: {node: '>=20'} + + string.prototype.trim@1.2.11: + resolution: {integrity: sha512-PwvK7BU+CMTJGYQCTZb5RWXIML92lftJLhQz1tBzgKiqGxJaMlBAa48POXaNAC2s4y8jr3EFqrkF9+44neS46w==} engines: {node: '>= 0.4'} - string.prototype.trimend@1.0.9: - resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} + string.prototype.trimend@1.0.10: + resolution: {integrity: sha512-2+3aDAOmPTmuFwjDnmJG2ctEkQKVki7vOSqaxkv42Mowj1V6PnvuwFCRrR5lChUux1TBskPjfkeTOhqczDMxTw==} engines: {node: '>= 0.4'} string.prototype.trimstart@1.0.8: @@ -12568,8 +12853,8 @@ packages: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} - strip-ansi@7.1.2: - resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==} + strip-ansi@7.2.0: + resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==} engines: {node: '>=12'} strip-bom-string@1.0.0: @@ -12608,8 +12893,8 @@ packages: resolution: {integrity: sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==} engines: {node: '>=0.10.0'} - strnum@2.3.0: - resolution: {integrity: sha512-ums3KNd42PGyx5xaoVTO1mjU1bH3NpY4vsrVlnv9PNGqQj8wd7rJ6nEypLrJ7z5vxK5RP0yMLo6J/Gsm62DI5Q==} + strnum@2.4.0: + resolution: {integrity: sha512-sHrVyWWdq28RbhjuJdZsA1SnGRJV6NiXbk6AXBxDOsgAcA+lmpUZCYjOdLBxkXMwis6RRe7dlZt4VlIWFVzkmg==} style-to-js@1.1.21: resolution: {integrity: sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==} @@ -12623,8 +12908,8 @@ packages: peerDependencies: postcss: 8.5.10 - stylis@4.3.6: - resolution: {integrity: sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==} + stylis@4.4.0: + resolution: {integrity: sha512-5Z9ZpRzfuH6l/UAvCPAPUo3665Nk2wLaZU3x+TLHKVzIz33+sbJqbtrYoC3KD4/uVOr2Zp+L0LySezP9OHV9yA==} sucrase@3.35.1: resolution: {integrity: sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==} @@ -12658,8 +12943,8 @@ packages: swap-case@2.0.2: resolution: {integrity: sha512-kc6S2YS/2yXbtkSMunBtKdah4VFETZ8Oh6ONSmSd9bRxhqTrtARUCBUiWXH3xVPpvR7tz2CSnkuXVE42EcGnMw==} - swr@2.3.7: - resolution: {integrity: sha512-ZEquQ82QvalqTxhBVv/DlAg2mbmUjF4UgpPg9wwk4ufb9rQnZXh1iKyyKBqV6bQGu1Ie7L1QwSYO07qFIa1p+g==} + swr@2.4.1: + resolution: {integrity: sha512-2CC6CiKQtEwaEeNiqWTAw9PGykW8SR5zZX8MZk6TeAvEAnVS7Visz8WzphqgtQ8v2xz/4Q5K+j+SeMaKXeeQIA==} peerDependencies: react: ^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -12670,6 +12955,10 @@ packages: symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} + sync-fetch@0.6.0: + resolution: {integrity: sha512-IELLEvzHuCfc1uTsshPK58ViSdNqXxlml1U+fmwJIKLYKOr/rAtBrorE2RYm5IHaMpDNlmC0fr1LAvdXvyheEQ==} + engines: {node: '>=18'} + sync-fetch@0.6.0-2: resolution: {integrity: sha512-c7AfkZ9udatCuAy9RSfiGPpeOKKUAUK5e1cXadLOGUjasdxqYqAK0jTNkM/FSEyJ3a5Ra27j/tw/PS0qLmaF/A==} engines: {node: '>=18'} @@ -12678,40 +12967,73 @@ packages: resolution: {integrity: sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==} engines: {node: '>=20'} - tailwindcss@3.4.18: - resolution: {integrity: sha512-6A2rnmW5xZMdw11LYjhcI5846rt9pbLSabY5XPxo+XWdxwZaFEn47Go4NzFiHu9sNNmr/kXivP1vStfvMaK1GQ==} + tailwindcss@3.4.19: + resolution: {integrity: sha512-3ofp+LL8E+pK/JuPLPggVAIaEuhvIz4qNcf3nA1Xn2o/7fb7s/TYpHhwGDv1ZU3PkBluUVaF8PyCHcm48cKLWQ==} engines: {node: '>=14.0.0'} hasBin: true - tapable@2.3.0: - resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} + tapable@2.3.3: + resolution: {integrity: sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==} engines: {node: '>=6'} - tar-stream@3.1.7: - resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} + tar-stream@3.1.8: + resolution: {integrity: sha512-U6QpVRyCGHva435KoNWy9PRoi2IFYCgtEhq9nmrPPpbRacPs9IH4aJ3gbrFC8dPcXvdSZ4XXfXT5Fshbp2MtlQ==} + + tar-stream@3.2.0: + resolution: {integrity: sha512-ojzvCvVaNp6aOTFmG7jaRD0meowIAuPc3cMMhSgKiVWws1GyHbGd/xvnyuRKcKlMpt3qvxx6r0hreCNITP9hIg==} tedious@16.7.1: resolution: {integrity: sha512-NmedZS0NJiTv3CoYnf1FtjxIDUgVYzEmavrc8q2WHRb+lP4deI9BpQfmNnBZZaWusDbP5FVFZCcvzb3xOlNVlQ==} engines: {node: '>=16'} - terser-webpack-plugin@5.4.0: - resolution: {integrity: sha512-Bn5vxm48flOIfkdl5CaD2+1CiUVbonWQ3KQPyP7/EuIl9Gbzq/gQFOzaMFUEgVjB1396tcK0SG8XcNJ/2kDH8g==} + teex@1.0.1: + resolution: {integrity: sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==} + + terser-webpack-plugin@5.6.1: + resolution: {integrity: sha512-201R5j+sJpK8nFWwKVyNfZot8FaJbLZDq5evriVzbV1wDtSXDjRUDRfJzHpAaxFDMEhsZL1QkeqM61wgsS3KaQ==} engines: {node: '>= 10.13.0'} peerDependencies: + '@minify-html/node': '*' '@swc/core': '*' + '@swc/css': '*' + '@swc/html': '*' + clean-css: '*' + cssnano: '*' + csso: '*' esbuild: '*' + html-minifier-terser: '*' + lightningcss: '*' + postcss: '*' uglify-js: '*' webpack: ^5.105.4 peerDependenciesMeta: + '@minify-html/node': + optional: true '@swc/core': optional: true + '@swc/css': + optional: true + '@swc/html': + optional: true + clean-css: + optional: true + cssnano: + optional: true + csso: + optional: true esbuild: optional: true + html-minifier-terser: + optional: true + lightningcss: + optional: true + postcss: + optional: true uglify-js: optional: true - terser@5.44.1: - resolution: {integrity: sha512-t/R3R/n0MSwnnazuPpPNVO60LX0SKL45pyl9YlvxIdkH0Of7D5qM2EVe+yASRIlY5pZ73nclYJfNANGWPwFDZw==} + terser@5.48.0: + resolution: {integrity: sha512-J/9An6vs9Us6wKRriSFXBWdRZapREHqFzdNUKk0pmu804EMR6dr6winwo7e5JDxN4xahxQsuysyYFwlwj4XN/Q==} engines: {node: '>=10'} hasBin: true @@ -12723,8 +13045,8 @@ packages: resolution: {integrity: sha512-ZOffsNrXYggvU1mDGHk54I96r26P8SyMjO5slMKSc7+IWmtB/MQKnEC2fP51imB3/pT6YK5cT5E8f+Dd9KdyOQ==} engines: {node: 20 || >=22} - text-decoder@1.2.3: - resolution: {integrity: sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==} + text-decoder@1.2.7: + resolution: {integrity: sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ==} text-hex@1.0.0: resolution: {integrity: sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==} @@ -12736,8 +13058,8 @@ packages: thenify@3.3.1: resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} - thingies@2.5.0: - resolution: {integrity: sha512-s+2Bwztg6PhWUD7XMfeYm5qliDdSiZm7M7n8KjTkIsm3l/2lgVRc2/Gx/v+ZX8lT4FMA+i8aQvhcWylldc+ZNw==} + thingies@2.6.0: + resolution: {integrity: sha512-rMHRjmlFLM1R96UYPvpmnc3LYtdFrT33JIB7L9hetGue1qAPfn1N2LJeEjxUSidu1Iku+haLZXDuEXUHNGO/lg==} engines: {node: '>=10.18'} peerDependencies: tslib: ^2 @@ -12746,10 +13068,6 @@ packages: resolution: {integrity: sha512-B71/4oyj61iNH0KeCamLuE2rmKuTO5byTOSVwECM5FA7TiAiAW+UqTKZ9ERueC4qvgSttUhdmq1mXC3kJqGX7A==} engines: {node: '>=12.22'} - throttleit@2.1.0: - resolution: {integrity: sha512-nt6AMGKW1p/70DF/hGBdJB57B8Tspmbp5gfJ8ilhLnt7kkr2ye7hzD6NVG8GGErk2HWF34igrL2CXmNIkzKqKw==} - engines: {node: '>=18'} - through2@2.0.5: resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} @@ -12783,14 +13101,10 @@ packages: tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} - tinyexec@1.0.4: - resolution: {integrity: sha512-u9r3uZC0bdpGOXtlxUIdwf9pkmvhqJdrVCH9fapQtgy/OeTTMZ1nqH7agtvEfmGui6e1XxjcdrlxvxJvc3sMqw==} + tinyexec@1.2.4: + resolution: {integrity: sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==} 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'} @@ -12886,8 +13200,8 @@ packages: trough@2.2.0: resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} - ts-dedent@2.2.0: - resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} + ts-dedent@2.3.0: + resolution: {integrity: sha512-JfJeIHke7y2egdGGgRAvpCwYFUsHlM2gPcrVOxFkznt/4uzQ7HFmvE63iFHVLBJNDuyDOQgijDK/tXH/f6Msjg==} engines: {node: '>=6.10'} ts-interface-checker@0.1.13: @@ -12924,8 +13238,8 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - tsx@4.21.0: - resolution: {integrity: sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==} + tsx@4.22.4: + resolution: {integrity: sha512-X8EX+XV4QR5xCsrgxaED954zTDfY8KqlDtskKEL0cHhyS/P8b4IFOvGDQpsC9Q1XnLq915wEfwwY/zzskCtmhg==} engines: {node: '>=18.0.0'} hasBin: true @@ -12964,17 +13278,17 @@ packages: resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} engines: {node: '>=16'} - type-fest@5.6.0: - resolution: {integrity: sha512-8ZiHFm91orbSAe2PSAiSVBVko18pbhbiB3U9GglSzF/zCGkR+rxpHx6sEMCUm4kxY4LjDIUGgCfUMtwfZfjfUA==} + type-fest@5.7.0: + resolution: {integrity: sha512-1URUxUqfHFM1c+zfSPsa3gnkO7Aq21qyH75SIduNYz4SzY964rn1X2vCMQaHSHhktiw+0kPa2iyb6PUpXqB6Vg==} engines: {node: '>=20'} type-is@1.6.18: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} - type-is@2.0.1: - resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==} - engines: {node: '>= 0.6'} + type-is@2.1.0: + resolution: {integrity: sha512-faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA==} + engines: {node: '>= 18'} typed-array-buffer@1.0.3: resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} @@ -12988,8 +13302,8 @@ packages: resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} engines: {node: '>= 0.4'} - typed-array-length@1.0.7: - resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} + typed-array-length@1.0.8: + resolution: {integrity: sha512-phPGCwqr2+Qo0fwniCE8e4pKnGu/yFb5nD5Y8bf0EEeiI5GklnACYA9GFy/DrAeRrKHXvHn+1SUsOWgJp6RO+g==} engines: {node: '>= 0.4'} typedarray-to-buffer@3.1.5: @@ -13005,10 +13319,6 @@ packages: engines: {node: '>=14.17'} hasBin: true - ua-parser-js@1.0.41: - resolution: {integrity: sha512-LbBDqdIC5s8iROCUjMbW1f5dJQTEFB1+KO9ogbvlb3nm9n4YHa5p4KTvFPWvh2Hs8gZMBuiB1/8+pdfe/tDPug==} - hasBin: true - unbash@2.2.0: resolution: {integrity: sha512-X2wH19RAPZE3+ldGicOkoj/SIA83OIxcJ6Cuaw23hf8Xc6fQpvZXY0SftE2JgS0QhYLUG4uwodSI3R53keyh7w==} engines: {node: '>=14'} @@ -13024,8 +13334,8 @@ packages: undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} - undici-types@7.16.0: - resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} + undici-types@7.24.6: + resolution: {integrity: sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==} unicode-canonical-property-names-ecmascript@2.0.1: resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==} @@ -13077,8 +13387,8 @@ packages: unist-util-visit-parents@6.0.2: resolution: {integrity: sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==} - unist-util-visit@5.0.0: - resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} + unist-util-visit@5.1.0: + resolution: {integrity: sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==} universalify@0.2.0: resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} @@ -13205,8 +13515,8 @@ packages: resolution: {integrity: sha512-hVDIBwsRruT73PbK7uP5ebUt+ezEtCmzZz3F59BSr2F6OVFnJ/6h8liuvdLrQ88Xmnk6/+xGGuq+pG9WwTuy3A==} engines: {node: ^20.17.0 || >=22.9.0} - validator@13.15.23: - resolution: {integrity: sha512-4yoz1kEWqUjzi5zsPbAS/903QXSYp0UOtHsPpp7p9rHAw/W+dkInskAE386Fat3oKRROwO98d9ZB0G4cObgUyw==} + validator@13.15.35: + resolution: {integrity: sha512-TQ5pAGhd5whStmqWvYF4OjQROlmv9SMFVt37qoCBdqRffuuklWYQlCNnEs2ZaIBD1kZRNnikiZOS1eqgkar0iw==} engines: {node: '>= 0.10'} value-equal@1.0.1: @@ -13391,15 +13701,15 @@ packages: resolution: {integrity: sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==} engines: {node: '>=18.0.0'} - webpack-sources@3.3.4: - resolution: {integrity: sha512-7tP1PdV4vF+lYPnkMR0jMY5/la2ub5Fc/8VQrrU+lXkiM6C4TjVfGw7iKfyhnTQOsD+6Q/iKw0eFciziRgD58Q==} + webpack-sources@3.5.0: + resolution: {integrity: sha512-HPuy+uuoTCaaoEoI1LQ3JN9+vrPBvEesnnX1jADHy728cHSMlq4wUc4afYqahq2B1mhQVZxCXOkNTnXltr+2vQ==} engines: {node: '>=10.13.0'} webpack-virtual-modules@0.6.2: resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} - webpack@5.105.4: - resolution: {integrity: sha512-jTywjboN9aHxFlToqb0K0Zs9SbBoW4zRUlGzI2tYNxVYcEi/IPpn+Xi4ye5jTLvX2YeLuic/IvxNot+Q1jMoOw==} + webpack@5.107.2: + resolution: {integrity: sha512-v7RhXaJbpMlV0D7hC7lb2EbnxkoeUqf9qhKr6lozx3Q48pmFrqqNRmZFUEGmi7pSwm6fCQ2H1IjvCkHqdpVdjQ==} engines: {node: '>=10.13.0'} hasBin: true peerDependencies: @@ -13420,8 +13730,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: @@ -13456,8 +13766,8 @@ packages: resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} engines: {node: '>= 0.4'} - which-typed-array@1.1.19: - resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==} + which-typed-array@1.1.22: + resolution: {integrity: sha512-fvO4ExWMFsqyhG3AiPAObMuY1lxaqgYcxbc49CNdWDDECOJNgQyvsOWVwbZc+qf3rzRtxojBK+CMEv0Ld5CYpw==} engines: {node: '>= 0.4'} which@1.0.9: @@ -13493,8 +13803,8 @@ packages: resolution: {integrity: sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A==} engines: {node: '>= 12.0.0'} - winston@3.18.3: - resolution: {integrity: sha512-NoBZauFNNWENgsnC9YpgyYwOVrl2m58PpQ8lNHjV3kosGs7KJ7Npk9pCUE+WJlawVSe8mykWDKWFSVfs3QO9ww==} + winston@3.19.0: + resolution: {integrity: sha512-LZNJgPzfKR+/J3cHkxcpHKpKKvGfDZVPS4hfJCc4cCG0CgYzvlD6yE/S3CIL/Yt91ak327YCpiF/0MyeZHEHKA==} engines: {node: '>= 12.0.0'} wkx@0.5.0: @@ -13625,151 +13935,145 @@ packages: zen-observable@0.8.15: resolution: {integrity: sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ==} - zod@4.1.13: - resolution: {integrity: sha512-AvvthqfqrAhNH9dnfmrfKzX5upOdjUVJYFqNSlkmGf64gRaTzlPwz99IHYnVs28qYAybvAlBV+H7pn0saFY4Ig==} + zod@4.4.3: + resolution: {integrity: sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==} zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} snapshots: - '@adobe/css-tools@4.4.4': {} - - '@ai-sdk/gateway@2.0.17(zod@4.1.13)': - dependencies: - '@ai-sdk/provider': 2.0.0 - '@ai-sdk/provider-utils': 3.0.18(zod@4.1.13) - '@vercel/oidc': 3.0.5 - zod: 4.1.13 - - '@ai-sdk/provider-utils@3.0.18(zod@4.1.13)': - dependencies: - '@ai-sdk/provider': 2.0.0 - '@standard-schema/spec': 1.1.0 - eventsource-parser: 3.1.0 - zod: 4.1.13 + '@adobe/css-tools@4.5.0': {} - '@ai-sdk/provider@2.0.0': + '@algolia/abtesting@1.19.0': dependencies: - json-schema: 0.4.0 + '@algolia/client-common': 5.53.0 + '@algolia/requester-browser-xhr': 5.53.0 + '@algolia/requester-fetch': 5.53.0 + '@algolia/requester-node-http': 5.53.0 - '@ai-sdk/react@2.0.105(react@19.2.0)(zod@4.1.13)': + '@algolia/autocomplete-core@1.19.2(@algolia/client-search@5.53.0)(algoliasearch@5.53.0)(search-insights@2.17.3)': dependencies: - '@ai-sdk/provider-utils': 3.0.18(zod@4.1.13) - ai: 5.0.105(zod@4.1.13) - react: 19.2.0 - swr: 2.3.7(react@19.2.0) - throttleit: 2.1.0 - optionalDependencies: - zod: 4.1.13 + '@algolia/autocomplete-plugin-algolia-insights': 1.19.2(@algolia/client-search@5.53.0)(algoliasearch@5.53.0)(search-insights@2.17.3) + '@algolia/autocomplete-shared': 1.19.2(@algolia/client-search@5.53.0)(algoliasearch@5.53.0) + transitivePeerDependencies: + - '@algolia/client-search' + - algoliasearch + - search-insights - '@algolia/abtesting@1.11.0': + '@algolia/autocomplete-core@1.19.8(@algolia/client-search@5.53.0)(algoliasearch@5.53.0)(search-insights@2.17.3)': dependencies: - '@algolia/client-common': 5.45.0 - '@algolia/requester-browser-xhr': 5.45.0 - '@algolia/requester-fetch': 5.45.0 - '@algolia/requester-node-http': 5.45.0 + '@algolia/autocomplete-plugin-algolia-insights': 1.19.8(@algolia/client-search@5.53.0)(algoliasearch@5.53.0)(search-insights@2.17.3) + '@algolia/autocomplete-shared': 1.19.8(@algolia/client-search@5.53.0)(algoliasearch@5.53.0) + transitivePeerDependencies: + - '@algolia/client-search' + - algoliasearch + - search-insights - '@algolia/autocomplete-core@1.19.2(@algolia/client-search@5.45.0)(algoliasearch@5.45.0)(search-insights@2.17.3)': + '@algolia/autocomplete-plugin-algolia-insights@1.19.2(@algolia/client-search@5.53.0)(algoliasearch@5.53.0)(search-insights@2.17.3)': dependencies: - '@algolia/autocomplete-plugin-algolia-insights': 1.19.2(@algolia/client-search@5.45.0)(algoliasearch@5.45.0)(search-insights@2.17.3) - '@algolia/autocomplete-shared': 1.19.2(@algolia/client-search@5.45.0)(algoliasearch@5.45.0) + '@algolia/autocomplete-shared': 1.19.2(@algolia/client-search@5.53.0)(algoliasearch@5.53.0) + search-insights: 2.17.3 transitivePeerDependencies: - '@algolia/client-search' - algoliasearch - - search-insights - '@algolia/autocomplete-plugin-algolia-insights@1.19.2(@algolia/client-search@5.45.0)(algoliasearch@5.45.0)(search-insights@2.17.3)': + '@algolia/autocomplete-plugin-algolia-insights@1.19.8(@algolia/client-search@5.53.0)(algoliasearch@5.53.0)(search-insights@2.17.3)': dependencies: - '@algolia/autocomplete-shared': 1.19.2(@algolia/client-search@5.45.0)(algoliasearch@5.45.0) + '@algolia/autocomplete-shared': 1.19.8(@algolia/client-search@5.53.0)(algoliasearch@5.53.0) search-insights: 2.17.3 transitivePeerDependencies: - '@algolia/client-search' - algoliasearch - '@algolia/autocomplete-shared@1.19.2(@algolia/client-search@5.45.0)(algoliasearch@5.45.0)': + '@algolia/autocomplete-shared@1.19.2(@algolia/client-search@5.53.0)(algoliasearch@5.53.0)': + dependencies: + '@algolia/client-search': 5.53.0 + algoliasearch: 5.53.0 + + '@algolia/autocomplete-shared@1.19.8(@algolia/client-search@5.53.0)(algoliasearch@5.53.0)': dependencies: - '@algolia/client-search': 5.45.0 - algoliasearch: 5.45.0 + '@algolia/client-search': 5.53.0 + algoliasearch: 5.53.0 - '@algolia/client-abtesting@5.45.0': + '@algolia/client-abtesting@5.53.0': dependencies: - '@algolia/client-common': 5.45.0 - '@algolia/requester-browser-xhr': 5.45.0 - '@algolia/requester-fetch': 5.45.0 - '@algolia/requester-node-http': 5.45.0 + '@algolia/client-common': 5.53.0 + '@algolia/requester-browser-xhr': 5.53.0 + '@algolia/requester-fetch': 5.53.0 + '@algolia/requester-node-http': 5.53.0 - '@algolia/client-analytics@5.45.0': + '@algolia/client-analytics@5.53.0': dependencies: - '@algolia/client-common': 5.45.0 - '@algolia/requester-browser-xhr': 5.45.0 - '@algolia/requester-fetch': 5.45.0 - '@algolia/requester-node-http': 5.45.0 + '@algolia/client-common': 5.53.0 + '@algolia/requester-browser-xhr': 5.53.0 + '@algolia/requester-fetch': 5.53.0 + '@algolia/requester-node-http': 5.53.0 - '@algolia/client-common@5.45.0': {} + '@algolia/client-common@5.53.0': {} - '@algolia/client-insights@5.45.0': + '@algolia/client-insights@5.53.0': dependencies: - '@algolia/client-common': 5.45.0 - '@algolia/requester-browser-xhr': 5.45.0 - '@algolia/requester-fetch': 5.45.0 - '@algolia/requester-node-http': 5.45.0 + '@algolia/client-common': 5.53.0 + '@algolia/requester-browser-xhr': 5.53.0 + '@algolia/requester-fetch': 5.53.0 + '@algolia/requester-node-http': 5.53.0 - '@algolia/client-personalization@5.45.0': + '@algolia/client-personalization@5.53.0': dependencies: - '@algolia/client-common': 5.45.0 - '@algolia/requester-browser-xhr': 5.45.0 - '@algolia/requester-fetch': 5.45.0 - '@algolia/requester-node-http': 5.45.0 + '@algolia/client-common': 5.53.0 + '@algolia/requester-browser-xhr': 5.53.0 + '@algolia/requester-fetch': 5.53.0 + '@algolia/requester-node-http': 5.53.0 - '@algolia/client-query-suggestions@5.45.0': + '@algolia/client-query-suggestions@5.53.0': dependencies: - '@algolia/client-common': 5.45.0 - '@algolia/requester-browser-xhr': 5.45.0 - '@algolia/requester-fetch': 5.45.0 - '@algolia/requester-node-http': 5.45.0 + '@algolia/client-common': 5.53.0 + '@algolia/requester-browser-xhr': 5.53.0 + '@algolia/requester-fetch': 5.53.0 + '@algolia/requester-node-http': 5.53.0 - '@algolia/client-search@5.45.0': + '@algolia/client-search@5.53.0': dependencies: - '@algolia/client-common': 5.45.0 - '@algolia/requester-browser-xhr': 5.45.0 - '@algolia/requester-fetch': 5.45.0 - '@algolia/requester-node-http': 5.45.0 + '@algolia/client-common': 5.53.0 + '@algolia/requester-browser-xhr': 5.53.0 + '@algolia/requester-fetch': 5.53.0 + '@algolia/requester-node-http': 5.53.0 '@algolia/events@4.0.1': {} - '@algolia/ingestion@1.45.0': + '@algolia/ingestion@1.53.0': dependencies: - '@algolia/client-common': 5.45.0 - '@algolia/requester-browser-xhr': 5.45.0 - '@algolia/requester-fetch': 5.45.0 - '@algolia/requester-node-http': 5.45.0 + '@algolia/client-common': 5.53.0 + '@algolia/requester-browser-xhr': 5.53.0 + '@algolia/requester-fetch': 5.53.0 + '@algolia/requester-node-http': 5.53.0 - '@algolia/monitoring@1.45.0': + '@algolia/monitoring@1.53.0': dependencies: - '@algolia/client-common': 5.45.0 - '@algolia/requester-browser-xhr': 5.45.0 - '@algolia/requester-fetch': 5.45.0 - '@algolia/requester-node-http': 5.45.0 + '@algolia/client-common': 5.53.0 + '@algolia/requester-browser-xhr': 5.53.0 + '@algolia/requester-fetch': 5.53.0 + '@algolia/requester-node-http': 5.53.0 - '@algolia/recommend@5.45.0': + '@algolia/recommend@5.53.0': dependencies: - '@algolia/client-common': 5.45.0 - '@algolia/requester-browser-xhr': 5.45.0 - '@algolia/requester-fetch': 5.45.0 - '@algolia/requester-node-http': 5.45.0 + '@algolia/client-common': 5.53.0 + '@algolia/requester-browser-xhr': 5.53.0 + '@algolia/requester-fetch': 5.53.0 + '@algolia/requester-node-http': 5.53.0 - '@algolia/requester-browser-xhr@5.45.0': + '@algolia/requester-browser-xhr@5.53.0': dependencies: - '@algolia/client-common': 5.45.0 + '@algolia/client-common': 5.53.0 - '@algolia/requester-fetch@5.45.0': + '@algolia/requester-fetch@5.53.0': dependencies: - '@algolia/client-common': 5.45.0 + '@algolia/client-common': 5.53.0 - '@algolia/requester-node-http@5.45.0': + '@algolia/requester-node-http@5.53.0': dependencies: - '@algolia/client-common': 5.45.0 + '@algolia/client-common': 5.53.0 '@alloc/quick-lru@5.2.0': {} @@ -13779,14 +14083,15 @@ snapshots: minimist: 1.2.8 parsecurrency: 1.1.1 ts-morph: 28.0.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)(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.8(@opentelemetry/api@1.9.0)(@types/node@22.19.20)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(jsdom@26.1.0)(vite@8.0.16(@types/node@22.19.20)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3)) - '@ant-design/cli@6.3.5(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': + '@ant-design/cli@6.4.3': dependencies: - oxc-parser: 0.121.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) - transitivePeerDependencies: - - '@emnapi/core' - - '@emnapi/runtime' + fast-glob: 3.3.3 + fast-levenshtein: 3.0.0 + oxc-parser: 0.130.0 + semver: 7.8.4 + string-width: 8.2.1 '@ant-design/colors@7.2.1': dependencies: @@ -13796,212 +14101,212 @@ snapshots: dependencies: '@ant-design/fast-color': 3.0.1 - '@ant-design/cssinjs-utils@2.1.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@ant-design/cssinjs-utils@2.1.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - '@ant-design/cssinjs': 2.1.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@babel/runtime': 7.28.4 - '@rc-component/util': 1.10.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + '@ant-design/cssinjs': 2.1.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@babel/runtime': 7.29.7 + '@rc-component/util': 1.11.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) - '@ant-design/cssinjs@1.24.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@ant-design/cssinjs@1.24.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - '@babel/runtime': 7.28.4 + '@babel/runtime': 7.29.7 '@emotion/hash': 0.8.0 '@emotion/unitless': 0.7.5 classnames: 2.5.1 csstype: 3.2.3 - rc-util: 5.44.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - stylis: 4.3.6 + rc-util: 5.44.4(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) + stylis: 4.4.0 - '@ant-design/cssinjs@2.1.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@ant-design/cssinjs@2.1.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - '@babel/runtime': 7.28.4 + '@babel/runtime': 7.29.7 '@emotion/hash': 0.8.0 '@emotion/unitless': 0.7.5 - '@rc-component/util': 1.10.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@rc-component/util': 1.11.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) clsx: 2.1.1 csstype: 3.2.3 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - stylis: 4.3.6 + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) + stylis: 4.4.0 '@ant-design/fast-color@2.0.6': dependencies: - '@babel/runtime': 7.28.4 + '@babel/runtime': 7.29.7 '@ant-design/fast-color@3.0.1': {} '@ant-design/icons-svg@4.4.2': {} - '@ant-design/icons@5.6.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@ant-design/icons@5.6.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: '@ant-design/colors': 7.2.1 '@ant-design/icons-svg': 4.4.2 - '@babel/runtime': 7.28.4 + '@babel/runtime': 7.29.7 classnames: 2.5.1 - rc-util: 5.44.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + rc-util: 5.44.4(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) - '@ant-design/icons@6.1.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@ant-design/icons@6.2.5(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: '@ant-design/colors': 8.0.1 '@ant-design/icons-svg': 4.4.2 - '@rc-component/util': 1.10.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@rc-component/util': 1.11.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) clsx: 2.1.1 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) - '@ant-design/pro-layout@7.22.7(antd@6.3.5(luxon@3.7.2)(moment@2.30.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@ant-design/pro-layout@7.22.7(antd@6.3.5(luxon@3.7.2)(moment@2.30.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - '@ant-design/cssinjs': 1.24.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@ant-design/icons': 5.6.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@ant-design/pro-provider': 2.16.2(antd@6.3.5(luxon@3.7.2)(moment@2.30.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@ant-design/pro-utils': 2.18.0(antd@6.3.5(luxon@3.7.2)(moment@2.30.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@babel/runtime': 7.28.4 + '@ant-design/cssinjs': 1.24.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@ant-design/icons': 5.6.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@ant-design/pro-provider': 2.16.2(antd@6.3.5(luxon@3.7.2)(moment@2.30.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@ant-design/pro-utils': 2.18.0(antd@6.3.5(luxon@3.7.2)(moment@2.30.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@babel/runtime': 7.29.7 '@umijs/route-utils': 4.0.3 - '@umijs/use-params': 1.0.9(react@19.2.0) - antd: 6.3.5(luxon@3.7.2)(moment@2.30.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@umijs/use-params': 1.0.9(react@19.2.7) + antd: 6.3.5(luxon@3.7.2)(moment@2.30.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) classnames: 2.5.1 lodash: 4.18.1 lodash-es: 4.18.1 - path-to-regexp: 8.4.0 - rc-resize-observer: 1.4.3(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - rc-util: 5.44.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - swr: 2.3.7(react@19.2.0) + path-to-regexp: 8.4.2 + rc-resize-observer: 1.4.3(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + rc-util: 5.44.4(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) + swr: 2.4.1(react@19.2.7) warning: 4.0.3 - '@ant-design/pro-provider@2.16.2(antd@6.3.5(luxon@3.7.2)(moment@2.30.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@ant-design/pro-provider@2.16.2(antd@6.3.5(luxon@3.7.2)(moment@2.30.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - '@ant-design/cssinjs': 1.24.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@babel/runtime': 7.28.4 + '@ant-design/cssinjs': 1.24.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@babel/runtime': 7.29.7 '@ctrl/tinycolor': 3.6.1 - antd: 6.3.5(luxon@3.7.2)(moment@2.30.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - dayjs: 1.11.19 - rc-util: 5.44.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - swr: 2.3.7(react@19.2.0) - - '@ant-design/pro-utils@2.18.0(antd@6.3.5(luxon@3.7.2)(moment@2.30.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': - dependencies: - '@ant-design/icons': 5.6.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@ant-design/pro-provider': 2.16.2(antd@6.3.5(luxon@3.7.2)(moment@2.30.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@babel/runtime': 7.28.4 - antd: 6.3.5(luxon@3.7.2)(moment@2.30.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + antd: 6.3.5(luxon@3.7.2)(moment@2.30.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + dayjs: 1.11.21 + rc-util: 5.44.4(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) + swr: 2.4.1(react@19.2.7) + + '@ant-design/pro-utils@2.18.0(antd@6.3.5(luxon@3.7.2)(moment@2.30.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + dependencies: + '@ant-design/icons': 5.6.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@ant-design/pro-provider': 2.16.2(antd@6.3.5(luxon@3.7.2)(moment@2.30.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@babel/runtime': 7.29.7 + antd: 6.3.5(luxon@3.7.2)(moment@2.30.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) classnames: 2.5.1 - dayjs: 1.11.19 + dayjs: 1.11.21 lodash: 4.18.1 lodash-es: 4.18.1 - rc-util: 5.44.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + rc-util: 5.44.4(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) safe-stable-stringify: 2.5.0 - swr: 2.3.7(react@19.2.0) + swr: 2.4.1(react@19.2.7) - '@ant-design/react-slick@2.0.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@ant-design/react-slick@2.0.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - '@babel/runtime': 7.28.4 + '@babel/runtime': 7.29.7 clsx: 2.1.1 json2mq: 0.2.0 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) throttle-debounce: 5.0.2 - '@apollo/cache-control-types@1.0.3(graphql@16.12.0)': + '@apollo/cache-control-types@1.0.3(graphql@16.14.2)': dependencies: - graphql: 16.12.0 + graphql: 16.14.2 - '@apollo/client@3.14.0(@types/react@19.2.7)(graphql-ws@6.0.6(graphql@16.12.0)(ws@8.21.0))(graphql@16.12.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@apollo/client@3.14.1(@types/react@19.2.17)(graphql-ws@6.0.8(graphql@16.14.2)(ws@8.21.0))(graphql@16.14.2)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - '@graphql-typed-document-node/core': 3.2.0(graphql@16.12.0) + '@graphql-typed-document-node/core': 3.2.0(graphql@16.14.2) '@wry/caches': 1.0.1 '@wry/equality': 0.5.7 '@wry/trie': 0.5.0 - graphql: 16.12.0 - graphql-tag: 2.12.6(graphql@16.12.0) + graphql: 16.14.2 + graphql-tag: 2.12.6(graphql@16.14.2) hoist-non-react-statics: 3.3.2 optimism: 0.18.1 prop-types: 15.8.1 - rehackt: 0.1.0(@types/react@19.2.7)(react@19.2.0) + rehackt: 0.1.0(@types/react@19.2.17)(react@19.2.7) symbol-observable: 4.0.0 ts-invariant: 0.10.3 tslib: 2.8.1 zen-observable-ts: 1.2.5 optionalDependencies: - graphql-ws: 6.0.6(graphql@16.12.0)(ws@8.21.0) - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + graphql-ws: 6.0.8(graphql@16.14.2)(ws@8.21.0) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) transitivePeerDependencies: - '@types/react' - '@apollo/protobufjs@1.2.7': + '@apollo/protobufjs@1.2.8': dependencies: '@protobufjs/aspromise': 1.1.2 '@protobufjs/base64': 1.1.2 '@protobufjs/codegen': 2.0.5 - '@protobufjs/eventemitter': 1.1.0 - '@protobufjs/fetch': 1.1.0 + '@protobufjs/eventemitter': 1.1.1 + '@protobufjs/fetch': 1.1.1 '@protobufjs/float': 1.0.2 - '@protobufjs/inquire': 1.1.1 + '@protobufjs/inquire': 1.1.2 '@protobufjs/path': 1.1.2 '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.1 '@types/long': 4.0.2 long: 4.0.0 - '@apollo/server-gateway-interface@2.0.0(graphql@16.12.0)': + '@apollo/server-gateway-interface@2.0.0(graphql@16.14.2)': dependencies: - '@apollo/usage-reporting-protobuf': 4.1.1 + '@apollo/usage-reporting-protobuf': 4.1.2 '@apollo/utils.fetcher': 3.1.0 '@apollo/utils.keyvaluecache': 4.0.0 '@apollo/utils.logger': 3.0.0 - graphql: 16.12.0 + graphql: 16.14.2 - '@apollo/server@5.5.0(graphql@16.12.0)': + '@apollo/server@5.5.0(graphql@16.14.2)': dependencies: - '@apollo/cache-control-types': 1.0.3(graphql@16.12.0) - '@apollo/server-gateway-interface': 2.0.0(graphql@16.12.0) - '@apollo/usage-reporting-protobuf': 4.1.1 + '@apollo/cache-control-types': 1.0.3(graphql@16.14.2) + '@apollo/server-gateway-interface': 2.0.0(graphql@16.14.2) + '@apollo/usage-reporting-protobuf': 4.1.2 '@apollo/utils.createhash': 3.0.1 '@apollo/utils.fetcher': 3.1.0 '@apollo/utils.isnodelike': 3.0.0 '@apollo/utils.keyvaluecache': 4.0.0 '@apollo/utils.logger': 3.0.0 - '@apollo/utils.usagereporting': 2.1.0(graphql@16.12.0) + '@apollo/utils.usagereporting': 2.1.0(graphql@16.14.2) '@apollo/utils.withrequired': 3.0.0 - '@graphql-tools/schema': 10.0.30(graphql@16.12.0) + '@graphql-tools/schema': 10.0.33(graphql@16.14.2) async-retry: 1.3.3 body-parser: 2.2.2 content-type: 1.0.5 - cors: 2.8.5 + cors: 2.8.6 finalhandler: 2.1.1 - graphql: 16.12.0 + graphql: 16.14.2 loglevel: 1.9.2 - lru-cache: 11.3.6 + lru-cache: 11.5.1 negotiator: 1.0.0 uuid: 11.1.1 whatwg-mimetype: 4.0.0 transitivePeerDependencies: - supports-color - '@apollo/usage-reporting-protobuf@4.1.1': + '@apollo/usage-reporting-protobuf@4.1.2': dependencies: - '@apollo/protobufjs': 1.2.7 + '@apollo/protobufjs': 1.2.8 '@apollo/utils.createhash@3.0.1': dependencies: '@apollo/utils.isnodelike': 3.0.0 sha.js: 2.4.12 - '@apollo/utils.dropunuseddefinitions@2.0.1(graphql@16.12.0)': + '@apollo/utils.dropunuseddefinitions@2.0.1(graphql@16.14.2)': dependencies: - graphql: 16.12.0 + graphql: 16.14.2 '@apollo/utils.fetcher@3.1.0': {} @@ -14010,54 +14315,45 @@ snapshots: '@apollo/utils.keyvaluecache@4.0.0': dependencies: '@apollo/utils.logger': 3.0.0 - lru-cache: 11.3.6 + lru-cache: 11.5.1 '@apollo/utils.logger@3.0.0': {} - '@apollo/utils.printwithreducedwhitespace@2.0.1(graphql@16.12.0)': + '@apollo/utils.printwithreducedwhitespace@2.0.1(graphql@16.14.2)': dependencies: - graphql: 16.12.0 + graphql: 16.14.2 - '@apollo/utils.removealiases@2.0.1(graphql@16.12.0)': + '@apollo/utils.removealiases@2.0.1(graphql@16.14.2)': dependencies: - graphql: 16.12.0 + graphql: 16.14.2 - '@apollo/utils.sortast@2.0.1(graphql@16.12.0)': + '@apollo/utils.sortast@2.0.1(graphql@16.14.2)': dependencies: - graphql: 16.12.0 + graphql: 16.14.2 lodash.sortby: 4.7.0 - '@apollo/utils.stripsensitiveliterals@2.0.1(graphql@16.12.0)': + '@apollo/utils.stripsensitiveliterals@2.0.1(graphql@16.14.2)': dependencies: - graphql: 16.12.0 + graphql: 16.14.2 - '@apollo/utils.usagereporting@2.1.0(graphql@16.12.0)': + '@apollo/utils.usagereporting@2.1.0(graphql@16.14.2)': dependencies: - '@apollo/usage-reporting-protobuf': 4.1.1 - '@apollo/utils.dropunuseddefinitions': 2.0.1(graphql@16.12.0) - '@apollo/utils.printwithreducedwhitespace': 2.0.1(graphql@16.12.0) - '@apollo/utils.removealiases': 2.0.1(graphql@16.12.0) - '@apollo/utils.sortast': 2.0.1(graphql@16.12.0) - '@apollo/utils.stripsensitiveliterals': 2.0.1(graphql@16.12.0) - graphql: 16.12.0 + '@apollo/usage-reporting-protobuf': 4.1.2 + '@apollo/utils.dropunuseddefinitions': 2.0.1(graphql@16.14.2) + '@apollo/utils.printwithreducedwhitespace': 2.0.1(graphql@16.14.2) + '@apollo/utils.removealiases': 2.0.1(graphql@16.14.2) + '@apollo/utils.sortast': 2.0.1(graphql@16.14.2) + '@apollo/utils.stripsensitiveliterals': 2.0.1(graphql@16.14.2) + graphql: 16.14.2 '@apollo/utils.withrequired@3.0.0': {} - '@ardatan/relay-compiler@12.0.3(graphql@16.12.0)': + '@ardatan/relay-compiler@13.0.1(graphql@16.14.2)': dependencies: - '@babel/generator': 7.29.1 - '@babel/parser': 7.29.2 - '@babel/runtime': 7.28.4 - chalk: 4.1.2 - fb-watchman: 2.0.2 - graphql: 16.12.0 + '@babel/runtime': 7.29.7 + graphql: 16.14.2 immutable: 3.8.3 invariant: 2.2.4 - nullthrows: 1.1.1 - relay-runtime: 12.0.0 - signedsource: 1.0.0 - transitivePeerDependencies: - - encoding '@asamuzakjp/css-color@3.2.0': dependencies: @@ -14067,13 +14363,13 @@ snapshots: '@csstools/css-tokenizer': 3.0.4 lru-cache: 10.4.3 - '@azure-rest/core-client@2.5.1': + '@azure-rest/core-client@2.6.1': dependencies: '@azure/abort-controller': 2.1.2 '@azure/core-auth': 1.10.1 - '@azure/core-rest-pipeline': 1.22.2 + '@azure/core-rest-pipeline': 1.24.0 '@azure/core-tracing': 1.3.1 - '@typespec/ts-http-runtime': 0.3.2 + '@typespec/ts-http-runtime': 0.3.6 tslib: 2.8.1 transitivePeerDependencies: - supports-color @@ -14102,11 +14398,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@azure/core-client@1.10.1': + '@azure/core-client@1.10.2': dependencies: '@azure/abort-controller': 2.1.2 '@azure/core-auth': 1.10.1 - '@azure/core-rest-pipeline': 1.22.2 + '@azure/core-rest-pipeline': 1.24.0 '@azure/core-tracing': 1.3.1 '@azure/core-util': 1.13.1 '@azure/logger': 1.3.0 @@ -14114,13 +14410,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@azure/core-http-compat@2.3.1': + '@azure/core-http-compat@2.4.0(@azure/core-client@1.10.2)(@azure/core-rest-pipeline@1.24.0)': dependencies: '@azure/abort-controller': 2.1.2 - '@azure/core-client': 1.10.1 - '@azure/core-rest-pipeline': 1.22.2 - transitivePeerDependencies: - - supports-color + '@azure/core-client': 1.10.2 + '@azure/core-rest-pipeline': 1.24.0 '@azure/core-lro@2.7.2': dependencies: @@ -14138,7 +14432,7 @@ snapshots: '@azure/core-rest-pipeline@1.16.3': dependencies: '@azure/abort-controller': 2.1.2 - '@azure/core-auth': 1.10.1 + '@azure/core-auth': 1.7.2 '@azure/core-tracing': 1.3.1 '@azure/core-util': 1.13.1 '@azure/logger': 1.3.0 @@ -14148,14 +14442,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@azure/core-rest-pipeline@1.22.2': + '@azure/core-rest-pipeline@1.24.0': dependencies: '@azure/abort-controller': 2.1.2 '@azure/core-auth': 1.10.1 '@azure/core-tracing': 1.3.1 '@azure/core-util': 1.13.1 '@azure/logger': 1.3.0 - '@typespec/ts-http-runtime': 0.3.2 + '@typespec/ts-http-runtime': 0.3.6 tslib: 2.8.1 transitivePeerDependencies: - supports-color @@ -14167,7 +14461,7 @@ snapshots: '@azure/core-util@1.13.1': dependencies: '@azure/abort-controller': 2.1.2 - '@typespec/ts-http-runtime': 0.3.2 + '@typespec/ts-http-runtime': 0.3.6 tslib: 2.8.1 transitivePeerDependencies: - supports-color @@ -14197,13 +14491,13 @@ snapshots: dependencies: '@azure/abort-controller': 2.1.2 '@azure/core-auth': 1.10.1 - '@azure/core-client': 1.10.1 - '@azure/core-rest-pipeline': 1.22.2 + '@azure/core-client': 1.10.2 + '@azure/core-rest-pipeline': 1.24.0 '@azure/core-tracing': 1.3.1 '@azure/core-util': 1.13.1 '@azure/logger': 1.3.0 - '@azure/msal-browser': 5.10.1 - '@azure/msal-node': 5.2.1 + '@azure/msal-browser': 5.12.0 + '@azure/msal-node': 5.2.3 open: 10.2.0 tslib: 2.8.1 transitivePeerDependencies: @@ -14213,27 +14507,27 @@ snapshots: dependencies: '@azure/abort-controller': 1.1.0 '@azure/core-auth': 1.10.1 - '@azure/core-client': 1.10.1 - '@azure/core-rest-pipeline': 1.22.2 + '@azure/core-client': 1.10.2 + '@azure/core-rest-pipeline': 1.24.0 '@azure/core-tracing': 1.3.1 '@azure/core-util': 1.13.1 '@azure/logger': 1.3.0 '@azure/msal-browser': 3.30.0 '@azure/msal-node': 2.16.3 events: 3.3.0 - jws: 4.0.0 + jws: 4.0.1 open: 8.4.2 stoppable: 1.1.0 tslib: 2.8.1 transitivePeerDependencies: - supports-color - '@azure/keyvault-common@2.0.0': + '@azure/keyvault-common@2.1.0': dependencies: + '@azure-rest/core-client': 2.6.1 '@azure/abort-controller': 2.1.2 '@azure/core-auth': 1.10.1 - '@azure/core-client': 1.10.1 - '@azure/core-rest-pipeline': 1.22.2 + '@azure/core-rest-pipeline': 1.24.0 '@azure/core-tracing': 1.3.1 '@azure/core-util': 1.13.1 '@azure/logger': 1.3.0 @@ -14241,18 +14535,17 @@ snapshots: transitivePeerDependencies: - supports-color - '@azure/keyvault-keys@4.10.0': + '@azure/keyvault-keys@4.10.2': dependencies: - '@azure-rest/core-client': 2.5.1 + '@azure-rest/core-client': 2.6.1 '@azure/abort-controller': 2.1.2 '@azure/core-auth': 1.10.1 - '@azure/core-http-compat': 2.3.1 '@azure/core-lro': 2.7.2 '@azure/core-paging': 1.6.2 - '@azure/core-rest-pipeline': 1.22.2 + '@azure/core-rest-pipeline': 1.24.0 '@azure/core-tracing': 1.3.1 '@azure/core-util': 1.13.1 - '@azure/keyvault-common': 2.0.0 + '@azure/keyvault-common': 2.1.0 '@azure/logger': 1.3.0 tslib: 2.8.1 transitivePeerDependencies: @@ -14260,7 +14553,7 @@ snapshots: '@azure/logger@1.3.0': dependencies: - '@typespec/ts-http-runtime': 0.3.2 + '@typespec/ts-http-runtime': 0.3.6 tslib: 2.8.1 transitivePeerDependencies: - supports-color @@ -14268,8 +14561,8 @@ snapshots: '@azure/monitor-opentelemetry-exporter@1.0.0-beta.31': dependencies: '@azure/core-auth': 1.10.1 - '@azure/core-client': 1.10.1 - '@azure/core-rest-pipeline': 1.22.2 + '@azure/core-client': 1.10.2 + '@azure/core-rest-pipeline': 1.24.0 '@opentelemetry/api': 1.9.0 '@opentelemetry/api-logs': 0.57.2 '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) @@ -14300,89 +14593,90 @@ snapshots: dependencies: '@azure/msal-common': 14.16.1 - '@azure/msal-browser@5.10.1': + '@azure/msal-browser@5.12.0': dependencies: - '@azure/msal-common': 16.6.1 + '@azure/msal-common': 16.7.0 '@azure/msal-common@14.16.1': {} - '@azure/msal-common@16.6.1': {} + '@azure/msal-common@16.7.0': {} '@azure/msal-node@2.16.3': dependencies: '@azure/msal-common': 14.16.1 - jsonwebtoken: 9.0.2 + jsonwebtoken: 9.0.3 uuid: 8.3.2 - '@azure/msal-node@5.2.1': + '@azure/msal-node@5.2.3': dependencies: - '@azure/msal-common': 16.6.1 - jsonwebtoken: 9.0.2 + '@azure/msal-common': 16.7.0 + jsonwebtoken: 9.0.3 - '@azure/opentelemetry-instrumentation-azure-sdk@1.0.0-beta.9': + '@azure/opentelemetry-instrumentation-azure-sdk@1.0.0': dependencies: '@azure/core-tracing': 1.3.1 '@azure/logger': 1.3.0 '@opentelemetry/api': 1.9.0 '@opentelemetry/core': 2.8.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation': 0.200.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-web': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.211.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-web': 2.7.1(@opentelemetry/api@1.9.0) tslib: 2.8.1 transitivePeerDependencies: - supports-color - '@azure/storage-blob@12.31.0': + '@azure/storage-blob@12.32.0': dependencies: '@azure/abort-controller': 2.1.2 '@azure/core-auth': 1.10.1 - '@azure/core-client': 1.10.1 - '@azure/core-http-compat': 2.3.1 + '@azure/core-client': 1.10.2 + '@azure/core-http-compat': 2.4.0(@azure/core-client@1.10.2)(@azure/core-rest-pipeline@1.24.0) '@azure/core-lro': 2.7.2 '@azure/core-paging': 1.6.2 - '@azure/core-rest-pipeline': 1.22.2 + '@azure/core-rest-pipeline': 1.24.0 '@azure/core-tracing': 1.3.1 '@azure/core-util': 1.13.1 '@azure/core-xml': 1.5.1 '@azure/logger': 1.3.0 - '@azure/storage-common': 12.3.0 + '@azure/storage-common': 12.4.0(@azure/core-client@1.10.2) events: 3.3.0 tslib: 2.8.1 transitivePeerDependencies: - supports-color - '@azure/storage-common@12.3.0': + '@azure/storage-common@12.4.0(@azure/core-client@1.10.2)': dependencies: '@azure/abort-controller': 2.1.2 '@azure/core-auth': 1.10.1 - '@azure/core-http-compat': 2.3.1 - '@azure/core-rest-pipeline': 1.22.2 + '@azure/core-http-compat': 2.4.0(@azure/core-client@1.10.2)(@azure/core-rest-pipeline@1.24.0) + '@azure/core-rest-pipeline': 1.24.0 '@azure/core-tracing': 1.3.1 '@azure/core-util': 1.13.1 '@azure/logger': 1.3.0 events: 3.3.0 tslib: 2.8.1 transitivePeerDependencies: + - '@azure/core-client' - supports-color - '@babel/code-frame@7.29.0': + '@babel/code-frame@7.29.7': dependencies: - '@babel/helper-validator-identifier': 7.28.5 + '@babel/helper-validator-identifier': 7.29.7 js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/compat-data@7.29.0': {} + '@babel/compat-data@7.29.7': {} '@babel/core@7.29.6': dependencies: - '@babel/code-frame': 7.29.0 + '@babel/code-frame': 7.29.7 '@babel/generator': 7.29.7 - '@babel/helper-compilation-targets': 7.28.6 - '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.6) - '@babel/helpers': 7.29.2 + '@babel/helper-compilation-targets': 7.29.7 + '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.6) + '@babel/helpers': 7.29.7 '@babel/parser': 7.29.7 - '@babel/template': 7.28.6 - '@babel/traverse': 7.29.0 - '@babel/types': 7.29.0 + '@babel/template': 7.29.7 + '@babel/traverse': 7.29.7 + '@babel/types': 7.29.7 '@jridgewell/remapping': 2.3.5 convert-source-map: 2.0.0 debug: 4.4.3(supports-color@8.1.1) @@ -14392,22 +14686,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/generator@7.28.5': - dependencies: - '@babel/parser': 7.29.2 - '@babel/types': 7.29.0 - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.31 - jsesc: 3.1.0 - - '@babel/generator@7.29.1': - dependencies: - '@babel/parser': 7.29.2 - '@babel/types': 7.29.0 - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.31 - jsesc: 3.1.0 - '@babel/generator@7.29.7': dependencies: '@babel/parser': 7.29.7 @@ -14416,170 +14694,168 @@ snapshots: '@jridgewell/trace-mapping': 0.3.31 jsesc: 3.1.0 - '@babel/helper-annotate-as-pure@7.27.3': + '@babel/helper-annotate-as-pure@7.29.7': dependencies: - '@babel/types': 7.29.0 + '@babel/types': 7.29.7 - '@babel/helper-compilation-targets@7.28.6': + '@babel/helper-compilation-targets@7.29.7': dependencies: - '@babel/compat-data': 7.29.0 - '@babel/helper-validator-option': 7.27.1 - browserslist: 4.28.1 + '@babel/compat-data': 7.29.7 + '@babel/helper-validator-option': 7.29.7 + browserslist: 4.28.2 lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-create-class-features-plugin@7.28.5(@babel/core@7.29.6)': + '@babel/helper-create-class-features-plugin@7.29.7(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-member-expression-to-functions': 7.28.5 - '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/helper-replace-supers': 7.27.1(@babel/core@7.29.6) - '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/traverse': 7.29.0 + '@babel/helper-annotate-as-pure': 7.29.7 + '@babel/helper-member-expression-to-functions': 7.29.7 + '@babel/helper-optimise-call-expression': 7.29.7 + '@babel/helper-replace-supers': 7.29.7(@babel/core@7.29.6) + '@babel/helper-skip-transparent-expression-wrappers': 7.29.7 + '@babel/traverse': 7.29.7 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/helper-create-regexp-features-plugin@7.28.5(@babel/core@7.29.6)': + '@babel/helper-create-regexp-features-plugin@7.29.7(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-annotate-as-pure': 7.29.7 regexpu-core: 6.4.0 semver: 6.3.1 - '@babel/helper-define-polyfill-provider@0.6.5(@babel/core@7.29.6)': + '@babel/helper-define-polyfill-provider@0.6.8(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/helper-compilation-targets': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-compilation-targets': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 debug: 4.4.3(supports-color@8.1.1) lodash.debounce: 4.0.8 - resolve: 1.22.11 + resolve: 1.22.12 transitivePeerDependencies: - supports-color - '@babel/helper-globals@7.28.0': {} + '@babel/helper-globals@7.29.7': {} - '@babel/helper-member-expression-to-functions@7.28.5': + '@babel/helper-member-expression-to-functions@7.29.7': dependencies: - '@babel/traverse': 7.29.0 - '@babel/types': 7.29.0 + '@babel/traverse': 7.29.7 + '@babel/types': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/helper-module-imports@7.28.6': + '@babel/helper-module-imports@7.29.7': dependencies: - '@babel/traverse': 7.29.0 - '@babel/types': 7.29.0 + '@babel/traverse': 7.29.7 + '@babel/types': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.28.6(@babel/core@7.29.6)': + '@babel/helper-module-transforms@7.29.7(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/helper-module-imports': 7.28.6 - '@babel/helper-validator-identifier': 7.28.5 - '@babel/traverse': 7.29.0 + '@babel/helper-module-imports': 7.29.7 + '@babel/helper-validator-identifier': 7.29.7 + '@babel/traverse': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/helper-optimise-call-expression@7.27.1': + '@babel/helper-optimise-call-expression@7.29.7': dependencies: - '@babel/types': 7.29.0 - - '@babel/helper-plugin-utils@7.27.1': {} + '@babel/types': 7.29.7 - '@babel/helper-plugin-utils@7.28.6': {} + '@babel/helper-plugin-utils@7.29.7': {} - '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.29.6)': + '@babel/helper-remap-async-to-generator@7.29.7(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-wrap-function': 7.28.3 - '@babel/traverse': 7.29.0 + '@babel/helper-annotate-as-pure': 7.29.7 + '@babel/helper-wrap-function': 7.29.7 + '@babel/traverse': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/helper-replace-supers@7.27.1(@babel/core@7.29.6)': + '@babel/helper-replace-supers@7.29.7(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/helper-member-expression-to-functions': 7.28.5 - '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/traverse': 7.29.0 + '@babel/helper-member-expression-to-functions': 7.29.7 + '@babel/helper-optimise-call-expression': 7.29.7 + '@babel/traverse': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/helper-skip-transparent-expression-wrappers@7.27.1': + '@babel/helper-skip-transparent-expression-wrappers@7.29.7': dependencies: - '@babel/traverse': 7.29.0 - '@babel/types': 7.29.0 + '@babel/traverse': 7.29.7 + '@babel/types': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/helper-string-parser@7.27.1': {} - '@babel/helper-string-parser@7.29.7': {} - '@babel/helper-validator-identifier@7.28.5': {} - '@babel/helper-validator-identifier@7.29.7': {} - '@babel/helper-validator-option@7.27.1': {} + '@babel/helper-validator-option@7.29.7': {} - '@babel/helper-wrap-function@7.28.3': + '@babel/helper-wrap-function@7.29.7': dependencies: - '@babel/template': 7.28.6 - '@babel/traverse': 7.29.0 - '@babel/types': 7.29.0 + '@babel/template': 7.29.7 + '@babel/traverse': 7.29.7 + '@babel/types': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/helpers@7.29.2': + '@babel/helpers@7.29.7': dependencies: - '@babel/template': 7.28.6 - '@babel/types': 7.29.0 - - '@babel/parser@7.29.2': - dependencies: - '@babel/types': 7.29.0 + '@babel/template': 7.29.7 + '@babel/types': 7.29.7 '@babel/parser@7.29.7': dependencies: '@babel/types': 7.29.7 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.28.5(@babel/core@7.29.6)': + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.29.7(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/traverse': 7.29.0 + '@babel/helper-plugin-utils': 7.29.7 + '@babel/traverse': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1(@babel/core@7.29.6)': + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.29.7(@babel/core@7.29.6)': + dependencies: + '@babel/core': 7.29.6 + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.29.7(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.29.6)': + '@babel/plugin-bugfix-safari-rest-destructuring-rhs-array@7.29.7(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-plugin-utils': 7.29.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.29.7 + transitivePeerDependencies: + - supports-color - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.29.6)': + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.29.7(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/plugin-transform-optional-chaining': 7.28.5(@babel/core@7.29.6) + '@babel/helper-plugin-utils': 7.29.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.29.7 + '@babel/plugin-transform-optional-chaining': 7.29.7(@babel/core@7.29.6) transitivePeerDependencies: - supports-color - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.3(@babel/core@7.29.6)': + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.29.7(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/traverse': 7.29.0 + '@babel/helper-plugin-utils': 7.29.7 + '@babel/traverse': 7.29.7 transitivePeerDependencies: - supports-color @@ -14590,496 +14866,497 @@ snapshots: '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-syntax-import-assertions@7.27.1(@babel/core@7.29.6)': + '@babel/plugin-syntax-import-assertions@7.29.7(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.29.6)': + '@babel/plugin-syntax-import-attributes@7.29.7(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.6)': + '@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.29.6)': + '@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-plugin-utils': 7.29.7 '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.6) - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.29.6) + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.29.6)': + '@babel/plugin-transform-arrow-functions@7.29.7(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-async-generator-functions@7.28.0(@babel/core@7.29.6)': + '@babel/plugin-transform-async-generator-functions@7.29.7(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.29.6) - '@babel/traverse': 7.29.0 + '@babel/helper-plugin-utils': 7.29.7 + '@babel/helper-remap-async-to-generator': 7.29.7(@babel/core@7.29.6) + '@babel/traverse': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-async-to-generator@7.27.1(@babel/core@7.29.6)': + '@babel/plugin-transform-async-to-generator@7.29.7(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/helper-module-imports': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.29.6) + '@babel/helper-module-imports': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 + '@babel/helper-remap-async-to-generator': 7.29.7(@babel/core@7.29.6) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.29.6)': + '@babel/plugin-transform-block-scoped-functions@7.29.7(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-block-scoping@7.28.5(@babel/core@7.29.6)': + '@babel/plugin-transform-block-scoping@7.29.7(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-class-properties@7.27.1(@babel/core@7.29.6)': + '@babel/plugin-transform-class-properties@7.29.7(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.29.6) - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-create-class-features-plugin': 7.29.7(@babel/core@7.29.6) + '@babel/helper-plugin-utils': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-class-static-block@7.28.3(@babel/core@7.29.6)': + '@babel/plugin-transform-class-static-block@7.29.7(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.29.6) - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-create-class-features-plugin': 7.29.7(@babel/core@7.29.6) + '@babel/helper-plugin-utils': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-classes@7.28.4(@babel/core@7.29.6)': + '@babel/plugin-transform-classes@7.29.7(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-compilation-targets': 7.28.6 - '@babel/helper-globals': 7.28.0 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-replace-supers': 7.27.1(@babel/core@7.29.6) - '@babel/traverse': 7.29.0 + '@babel/helper-annotate-as-pure': 7.29.7 + '@babel/helper-compilation-targets': 7.29.7 + '@babel/helper-globals': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 + '@babel/helper-replace-supers': 7.29.7(@babel/core@7.29.6) + '@babel/traverse': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-computed-properties@7.27.1(@babel/core@7.29.6)': + '@babel/plugin-transform-computed-properties@7.29.7(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/template': 7.28.6 + '@babel/helper-plugin-utils': 7.29.7 + '@babel/template': 7.29.7 - '@babel/plugin-transform-destructuring@7.28.5(@babel/core@7.29.6)': + '@babel/plugin-transform-destructuring@7.29.7(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/traverse': 7.29.0 + '@babel/helper-plugin-utils': 7.29.7 + '@babel/traverse': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-dotall-regex@7.27.1(@babel/core@7.29.6)': + '@babel/plugin-transform-dotall-regex@7.29.7(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.6) - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.29.6) + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.29.6)': + '@babel/plugin-transform-duplicate-keys@7.29.7(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1(@babel/core@7.29.6)': + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.29.7(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.6) - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.29.6) + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.29.6)': + '@babel/plugin-transform-dynamic-import@7.29.7(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-explicit-resource-management@7.28.0(@babel/core@7.29.6)': + '@babel/plugin-transform-explicit-resource-management@7.29.7(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.29.6) + '@babel/helper-plugin-utils': 7.29.7 + '@babel/plugin-transform-destructuring': 7.29.7(@babel/core@7.29.6) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-exponentiation-operator@7.28.5(@babel/core@7.29.6)': + '@babel/plugin-transform-exponentiation-operator@7.29.7(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.29.6)': + '@babel/plugin-transform-export-namespace-from@7.29.7(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.29.6)': + '@babel/plugin-transform-for-of@7.29.7(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/helper-plugin-utils': 7.29.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.29.6)': + '@babel/plugin-transform-function-name@7.29.7(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/helper-compilation-targets': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/traverse': 7.29.0 + '@babel/helper-compilation-targets': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 + '@babel/traverse': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-json-strings@7.27.1(@babel/core@7.29.6)': + '@babel/plugin-transform-json-strings@7.29.7(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-literals@7.27.1(@babel/core@7.29.6)': + '@babel/plugin-transform-literals@7.29.7(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-logical-assignment-operators@7.28.5(@babel/core@7.29.6)': + '@babel/plugin-transform-logical-assignment-operators@7.29.7(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.29.6)': + '@babel/plugin-transform-member-expression-literals@7.29.7(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.29.6)': + '@babel/plugin-transform-modules-amd@7.29.7(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.6) - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.6) + '@babel/helper-plugin-utils': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.29.6)': + '@babel/plugin-transform-modules-commonjs@7.29.7(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.6) - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.6) + '@babel/helper-plugin-utils': 7.29.7 transitivePeerDependencies: - supports-color '@babel/plugin-transform-modules-systemjs@7.29.4(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.6) - '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-validator-identifier': 7.28.5 - '@babel/traverse': 7.29.0 + '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.6) + '@babel/helper-plugin-utils': 7.29.7 + '@babel/helper-validator-identifier': 7.29.7 + '@babel/traverse': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.29.6)': + '@babel/plugin-transform-modules-umd@7.29.7(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.6) - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.6) + '@babel/helper-plugin-utils': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-named-capturing-groups-regex@7.27.1(@babel/core@7.29.6)': + '@babel/plugin-transform-named-capturing-groups-regex@7.29.7(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.6) - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.29.6) + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-new-target@7.27.1(@babel/core@7.29.6)': + '@babel/plugin-transform-new-target@7.29.7(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-nullish-coalescing-operator@7.27.1(@babel/core@7.29.6)': + '@babel/plugin-transform-nullish-coalescing-operator@7.29.7(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-numeric-separator@7.27.1(@babel/core@7.29.6)': + '@babel/plugin-transform-numeric-separator@7.29.7(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-object-rest-spread@7.28.4(@babel/core@7.29.6)': + '@babel/plugin-transform-object-rest-spread@7.29.7(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/helper-compilation-targets': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.29.6) - '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.29.6) - '@babel/traverse': 7.29.0 + '@babel/helper-compilation-targets': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 + '@babel/plugin-transform-destructuring': 7.29.7(@babel/core@7.29.6) + '@babel/plugin-transform-parameters': 7.29.7(@babel/core@7.29.6) + '@babel/traverse': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-object-super@7.27.1(@babel/core@7.29.6)': + '@babel/plugin-transform-object-super@7.29.7(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-replace-supers': 7.27.1(@babel/core@7.29.6) + '@babel/helper-plugin-utils': 7.29.7 + '@babel/helper-replace-supers': 7.29.7(@babel/core@7.29.6) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-optional-catch-binding@7.27.1(@babel/core@7.29.6)': + '@babel/plugin-transform-optional-catch-binding@7.29.7(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-optional-chaining@7.28.5(@babel/core@7.29.6)': + '@babel/plugin-transform-optional-chaining@7.29.7(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/helper-plugin-utils': 7.29.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-parameters@7.27.7(@babel/core@7.29.6)': + '@babel/plugin-transform-parameters@7.29.7(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-private-methods@7.27.1(@babel/core@7.29.6)': + '@babel/plugin-transform-private-methods@7.29.7(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.29.6) - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-create-class-features-plugin': 7.29.7(@babel/core@7.29.6) + '@babel/helper-plugin-utils': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-private-property-in-object@7.27.1(@babel/core@7.29.6)': + '@babel/plugin-transform-private-property-in-object@7.29.7(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.29.6) - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-annotate-as-pure': 7.29.7 + '@babel/helper-create-class-features-plugin': 7.29.7(@babel/core@7.29.6) + '@babel/helper-plugin-utils': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-property-literals@7.27.1(@babel/core@7.29.6)': + '@babel/plugin-transform-property-literals@7.29.7(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-react-constant-elements@7.27.1(@babel/core@7.29.6)': + '@babel/plugin-transform-react-constant-elements@7.29.7(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-react-display-name@7.28.0(@babel/core@7.29.6)': + '@babel/plugin-transform-react-display-name@7.29.7(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-react-jsx-development@7.27.1(@babel/core@7.29.6)': + '@babel/plugin-transform-react-jsx-development@7.29.7(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.29.6) + '@babel/plugin-transform-react-jsx': 7.29.7(@babel/core@7.29.6) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.29.6)': + '@babel/plugin-transform-react-jsx@7.29.7(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-module-imports': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.29.6) - '@babel/types': 7.29.0 + '@babel/helper-annotate-as-pure': 7.29.7 + '@babel/helper-module-imports': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 + '@babel/plugin-syntax-jsx': 7.29.7(@babel/core@7.29.6) + '@babel/types': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-react-pure-annotations@7.27.1(@babel/core@7.29.6)': + '@babel/plugin-transform-react-pure-annotations@7.29.7(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-annotate-as-pure': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-regenerator@7.28.4(@babel/core@7.29.6)': + '@babel/plugin-transform-regenerator@7.29.7(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-regexp-modifiers@7.27.1(@babel/core@7.29.6)': + '@babel/plugin-transform-regexp-modifiers@7.29.7(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.6) - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.29.6) + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.29.6)': + '@babel/plugin-transform-reserved-words@7.29.7(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-runtime@7.28.5(@babel/core@7.29.6)': + '@babel/plugin-transform-runtime@7.29.7(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/helper-module-imports': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - babel-plugin-polyfill-corejs2: 0.4.14(@babel/core@7.29.6) + '@babel/helper-module-imports': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 + babel-plugin-polyfill-corejs2: 0.4.17(@babel/core@7.29.6) babel-plugin-polyfill-corejs3: 0.13.0(@babel/core@7.29.6) - babel-plugin-polyfill-regenerator: 0.6.5(@babel/core@7.29.6) + babel-plugin-polyfill-regenerator: 0.6.8(@babel/core@7.29.6) semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.29.6)': + '@babel/plugin-transform-shorthand-properties@7.29.7(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-spread@7.27.1(@babel/core@7.29.6)': + '@babel/plugin-transform-spread@7.29.7(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/helper-plugin-utils': 7.29.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.29.6)': + '@babel/plugin-transform-sticky-regex@7.29.7(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.29.6)': + '@babel/plugin-transform-template-literals@7.29.7(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.29.6)': + '@babel/plugin-transform-typeof-symbol@7.29.7(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-typescript@7.28.5(@babel/core@7.29.6)': + '@babel/plugin-transform-typescript@7.29.7(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.29.6) - '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.29.6) + '@babel/helper-annotate-as-pure': 7.29.7 + '@babel/helper-create-class-features-plugin': 7.29.7(@babel/core@7.29.6) + '@babel/helper-plugin-utils': 7.29.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.29.7 + '@babel/plugin-syntax-typescript': 7.29.7(@babel/core@7.29.6) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.29.6)': + '@babel/plugin-transform-unicode-escapes@7.29.7(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-unicode-property-regex@7.27.1(@babel/core@7.29.6)': + '@babel/plugin-transform-unicode-property-regex@7.29.7(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.6) - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.29.6) + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.29.6)': + '@babel/plugin-transform-unicode-regex@7.29.7(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.6) - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.29.6) + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-unicode-sets-regex@7.27.1(@babel/core@7.29.6)': + '@babel/plugin-transform-unicode-sets-regex@7.29.7(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.6) - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.29.6) + '@babel/helper-plugin-utils': 7.29.7 - '@babel/preset-env@7.28.5(@babel/core@7.29.6)': + '@babel/preset-env@7.29.7(@babel/core@7.29.6)': dependencies: - '@babel/compat-data': 7.29.0 + '@babel/compat-data': 7.29.7 '@babel/core': 7.29.6 - '@babel/helper-compilation-targets': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-validator-option': 7.27.1 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.28.5(@babel/core@7.29.6) - '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.27.1(@babel/core@7.29.6) - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.27.1(@babel/core@7.29.6) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.27.1(@babel/core@7.29.6) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.28.3(@babel/core@7.29.6) + '@babel/helper-compilation-targets': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 + '@babel/helper-validator-option': 7.29.7 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.29.7(@babel/core@7.29.6) + '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.29.7(@babel/core@7.29.6) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.29.7(@babel/core@7.29.6) + '@babel/plugin-bugfix-safari-rest-destructuring-rhs-array': 7.29.7(@babel/core@7.29.6) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.29.7(@babel/core@7.29.6) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.29.7(@babel/core@7.29.6) '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.29.6) - '@babel/plugin-syntax-import-assertions': 7.27.1(@babel/core@7.29.6) - '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.29.6) + '@babel/plugin-syntax-import-assertions': 7.29.7(@babel/core@7.29.6) + '@babel/plugin-syntax-import-attributes': 7.29.7(@babel/core@7.29.6) '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.29.6) - '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.29.6) - '@babel/plugin-transform-async-generator-functions': 7.28.0(@babel/core@7.29.6) - '@babel/plugin-transform-async-to-generator': 7.27.1(@babel/core@7.29.6) - '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.29.6) - '@babel/plugin-transform-block-scoping': 7.28.5(@babel/core@7.29.6) - '@babel/plugin-transform-class-properties': 7.27.1(@babel/core@7.29.6) - '@babel/plugin-transform-class-static-block': 7.28.3(@babel/core@7.29.6) - '@babel/plugin-transform-classes': 7.28.4(@babel/core@7.29.6) - '@babel/plugin-transform-computed-properties': 7.27.1(@babel/core@7.29.6) - '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.29.6) - '@babel/plugin-transform-dotall-regex': 7.27.1(@babel/core@7.29.6) - '@babel/plugin-transform-duplicate-keys': 7.27.1(@babel/core@7.29.6) - '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.27.1(@babel/core@7.29.6) - '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.29.6) - '@babel/plugin-transform-explicit-resource-management': 7.28.0(@babel/core@7.29.6) - '@babel/plugin-transform-exponentiation-operator': 7.28.5(@babel/core@7.29.6) - '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.29.6) - '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.29.6) - '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.29.6) - '@babel/plugin-transform-json-strings': 7.27.1(@babel/core@7.29.6) - '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.29.6) - '@babel/plugin-transform-logical-assignment-operators': 7.28.5(@babel/core@7.29.6) - '@babel/plugin-transform-member-expression-literals': 7.27.1(@babel/core@7.29.6) - '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.29.6) - '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.29.6) + '@babel/plugin-transform-arrow-functions': 7.29.7(@babel/core@7.29.6) + '@babel/plugin-transform-async-generator-functions': 7.29.7(@babel/core@7.29.6) + '@babel/plugin-transform-async-to-generator': 7.29.7(@babel/core@7.29.6) + '@babel/plugin-transform-block-scoped-functions': 7.29.7(@babel/core@7.29.6) + '@babel/plugin-transform-block-scoping': 7.29.7(@babel/core@7.29.6) + '@babel/plugin-transform-class-properties': 7.29.7(@babel/core@7.29.6) + '@babel/plugin-transform-class-static-block': 7.29.7(@babel/core@7.29.6) + '@babel/plugin-transform-classes': 7.29.7(@babel/core@7.29.6) + '@babel/plugin-transform-computed-properties': 7.29.7(@babel/core@7.29.6) + '@babel/plugin-transform-destructuring': 7.29.7(@babel/core@7.29.6) + '@babel/plugin-transform-dotall-regex': 7.29.7(@babel/core@7.29.6) + '@babel/plugin-transform-duplicate-keys': 7.29.7(@babel/core@7.29.6) + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.29.7(@babel/core@7.29.6) + '@babel/plugin-transform-dynamic-import': 7.29.7(@babel/core@7.29.6) + '@babel/plugin-transform-explicit-resource-management': 7.29.7(@babel/core@7.29.6) + '@babel/plugin-transform-exponentiation-operator': 7.29.7(@babel/core@7.29.6) + '@babel/plugin-transform-export-namespace-from': 7.29.7(@babel/core@7.29.6) + '@babel/plugin-transform-for-of': 7.29.7(@babel/core@7.29.6) + '@babel/plugin-transform-function-name': 7.29.7(@babel/core@7.29.6) + '@babel/plugin-transform-json-strings': 7.29.7(@babel/core@7.29.6) + '@babel/plugin-transform-literals': 7.29.7(@babel/core@7.29.6) + '@babel/plugin-transform-logical-assignment-operators': 7.29.7(@babel/core@7.29.6) + '@babel/plugin-transform-member-expression-literals': 7.29.7(@babel/core@7.29.6) + '@babel/plugin-transform-modules-amd': 7.29.7(@babel/core@7.29.6) + '@babel/plugin-transform-modules-commonjs': 7.29.7(@babel/core@7.29.6) '@babel/plugin-transform-modules-systemjs': 7.29.4(@babel/core@7.29.6) - '@babel/plugin-transform-modules-umd': 7.27.1(@babel/core@7.29.6) - '@babel/plugin-transform-named-capturing-groups-regex': 7.27.1(@babel/core@7.29.6) - '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.29.6) - '@babel/plugin-transform-nullish-coalescing-operator': 7.27.1(@babel/core@7.29.6) - '@babel/plugin-transform-numeric-separator': 7.27.1(@babel/core@7.29.6) - '@babel/plugin-transform-object-rest-spread': 7.28.4(@babel/core@7.29.6) - '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.29.6) - '@babel/plugin-transform-optional-catch-binding': 7.27.1(@babel/core@7.29.6) - '@babel/plugin-transform-optional-chaining': 7.28.5(@babel/core@7.29.6) - '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.29.6) - '@babel/plugin-transform-private-methods': 7.27.1(@babel/core@7.29.6) - '@babel/plugin-transform-private-property-in-object': 7.27.1(@babel/core@7.29.6) - '@babel/plugin-transform-property-literals': 7.27.1(@babel/core@7.29.6) - '@babel/plugin-transform-regenerator': 7.28.4(@babel/core@7.29.6) - '@babel/plugin-transform-regexp-modifiers': 7.27.1(@babel/core@7.29.6) - '@babel/plugin-transform-reserved-words': 7.27.1(@babel/core@7.29.6) - '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.29.6) - '@babel/plugin-transform-spread': 7.27.1(@babel/core@7.29.6) - '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.29.6) - '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.29.6) - '@babel/plugin-transform-typeof-symbol': 7.27.1(@babel/core@7.29.6) - '@babel/plugin-transform-unicode-escapes': 7.27.1(@babel/core@7.29.6) - '@babel/plugin-transform-unicode-property-regex': 7.27.1(@babel/core@7.29.6) - '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.29.6) - '@babel/plugin-transform-unicode-sets-regex': 7.27.1(@babel/core@7.29.6) + '@babel/plugin-transform-modules-umd': 7.29.7(@babel/core@7.29.6) + '@babel/plugin-transform-named-capturing-groups-regex': 7.29.7(@babel/core@7.29.6) + '@babel/plugin-transform-new-target': 7.29.7(@babel/core@7.29.6) + '@babel/plugin-transform-nullish-coalescing-operator': 7.29.7(@babel/core@7.29.6) + '@babel/plugin-transform-numeric-separator': 7.29.7(@babel/core@7.29.6) + '@babel/plugin-transform-object-rest-spread': 7.29.7(@babel/core@7.29.6) + '@babel/plugin-transform-object-super': 7.29.7(@babel/core@7.29.6) + '@babel/plugin-transform-optional-catch-binding': 7.29.7(@babel/core@7.29.6) + '@babel/plugin-transform-optional-chaining': 7.29.7(@babel/core@7.29.6) + '@babel/plugin-transform-parameters': 7.29.7(@babel/core@7.29.6) + '@babel/plugin-transform-private-methods': 7.29.7(@babel/core@7.29.6) + '@babel/plugin-transform-private-property-in-object': 7.29.7(@babel/core@7.29.6) + '@babel/plugin-transform-property-literals': 7.29.7(@babel/core@7.29.6) + '@babel/plugin-transform-regenerator': 7.29.7(@babel/core@7.29.6) + '@babel/plugin-transform-regexp-modifiers': 7.29.7(@babel/core@7.29.6) + '@babel/plugin-transform-reserved-words': 7.29.7(@babel/core@7.29.6) + '@babel/plugin-transform-shorthand-properties': 7.29.7(@babel/core@7.29.6) + '@babel/plugin-transform-spread': 7.29.7(@babel/core@7.29.6) + '@babel/plugin-transform-sticky-regex': 7.29.7(@babel/core@7.29.6) + '@babel/plugin-transform-template-literals': 7.29.7(@babel/core@7.29.6) + '@babel/plugin-transform-typeof-symbol': 7.29.7(@babel/core@7.29.6) + '@babel/plugin-transform-unicode-escapes': 7.29.7(@babel/core@7.29.6) + '@babel/plugin-transform-unicode-property-regex': 7.29.7(@babel/core@7.29.6) + '@babel/plugin-transform-unicode-regex': 7.29.7(@babel/core@7.29.6) + '@babel/plugin-transform-unicode-sets-regex': 7.29.7(@babel/core@7.29.6) '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.29.6) - babel-plugin-polyfill-corejs2: 0.4.14(@babel/core@7.29.6) - babel-plugin-polyfill-corejs3: 0.13.0(@babel/core@7.29.6) - babel-plugin-polyfill-regenerator: 0.6.5(@babel/core@7.29.6) - core-js-compat: 3.47.0 + babel-plugin-polyfill-corejs2: 0.4.17(@babel/core@7.29.6) + babel-plugin-polyfill-corejs3: 0.14.2(@babel/core@7.29.6) + babel-plugin-polyfill-regenerator: 0.6.8(@babel/core@7.29.6) + core-js-compat: 3.49.0 semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -15087,69 +15364,53 @@ snapshots: '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/types': 7.29.0 + '@babel/helper-plugin-utils': 7.29.7 + '@babel/types': 7.29.7 esutils: 2.0.3 - '@babel/preset-react@7.28.5(@babel/core@7.29.6)': + '@babel/preset-react@7.29.7(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-validator-option': 7.27.1 - '@babel/plugin-transform-react-display-name': 7.28.0(@babel/core@7.29.6) - '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.29.6) - '@babel/plugin-transform-react-jsx-development': 7.27.1(@babel/core@7.29.6) - '@babel/plugin-transform-react-pure-annotations': 7.27.1(@babel/core@7.29.6) + '@babel/helper-plugin-utils': 7.29.7 + '@babel/helper-validator-option': 7.29.7 + '@babel/plugin-transform-react-display-name': 7.29.7(@babel/core@7.29.6) + '@babel/plugin-transform-react-jsx': 7.29.7(@babel/core@7.29.6) + '@babel/plugin-transform-react-jsx-development': 7.29.7(@babel/core@7.29.6) + '@babel/plugin-transform-react-pure-annotations': 7.29.7(@babel/core@7.29.6) transitivePeerDependencies: - supports-color - '@babel/preset-typescript@7.28.5(@babel/core@7.29.6)': + '@babel/preset-typescript@7.29.7(@babel/core@7.29.6)': dependencies: '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-validator-option': 7.27.1 - '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.29.6) - '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.29.6) - '@babel/plugin-transform-typescript': 7.28.5(@babel/core@7.29.6) + '@babel/helper-plugin-utils': 7.29.7 + '@babel/helper-validator-option': 7.29.7 + '@babel/plugin-syntax-jsx': 7.29.7(@babel/core@7.29.6) + '@babel/plugin-transform-modules-commonjs': 7.29.7(@babel/core@7.29.6) + '@babel/plugin-transform-typescript': 7.29.7(@babel/core@7.29.6) transitivePeerDependencies: - supports-color - '@babel/runtime@7.28.4': {} + '@babel/runtime@7.29.7': {} - '@babel/template@7.27.2': + '@babel/template@7.29.7': dependencies: - '@babel/code-frame': 7.29.0 - '@babel/parser': 7.29.2 - '@babel/types': 7.29.0 - - '@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/traverse@7.29.0': + '@babel/traverse@7.29.7': dependencies: - '@babel/code-frame': 7.29.0 - '@babel/generator': 7.29.1 - '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.29.2 - '@babel/template': 7.28.6 - '@babel/types': 7.29.0 + '@babel/code-frame': 7.29.7 + '@babel/generator': 7.29.7 + '@babel/helper-globals': 7.29.7 + '@babel/parser': 7.29.7 + '@babel/template': 7.29.7 + '@babel/types': 7.29.7 debug: 4.4.3(supports-color@8.1.1) transitivePeerDependencies: - supports-color - '@babel/types@7.28.5': - dependencies: - '@babel/helper-string-parser': 7.27.1 - '@babel/helper-validator-identifier': 7.28.5 - - '@babel/types@7.29.0': - dependencies: - '@babel/helper-string-parser': 7.27.1 - '@babel/helper-validator-identifier': 7.28.5 - '@babel/types@7.29.7': dependencies: '@babel/helper-string-parser': 7.29.7 @@ -15194,13 +15455,13 @@ snapshots: '@blazediff/core@1.9.1': {} - '@chromatic-com/storybook@5.2.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))': + '@chromatic-com/storybook@5.2.1(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))': dependencies: '@neoconfetti/react': 1.0.0 chromatic: 16.10.0 - jsonfile: 6.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) - strip-ansi: 7.1.2 + jsonfile: 6.2.1 + storybook: 10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + strip-ansi: 7.2.0 transitivePeerDependencies: - '@chromatic-com/cypress' - '@chromatic-com/playwright' @@ -15252,9 +15513,9 @@ snapshots: '@csstools/postcss-cascade-layers@5.0.2(postcss@8.5.10)': dependencies: - '@csstools/selector-specificity': 5.0.0(postcss-selector-parser@7.1.1) + '@csstools/selector-specificity': 5.0.0(postcss-selector-parser@7.1.2) postcss: 8.5.10 - postcss-selector-parser: 7.1.1 + postcss-selector-parser: 7.1.2 '@csstools/postcss-color-function-display-p3-linear@1.0.1(postcss@8.5.10)': dependencies: @@ -15360,9 +15621,9 @@ snapshots: '@csstools/postcss-is-pseudo-class@5.0.3(postcss@8.5.10)': dependencies: - '@csstools/selector-specificity': 5.0.0(postcss-selector-parser@7.1.1) + '@csstools/selector-specificity': 5.0.0(postcss-selector-parser@7.1.2) postcss: 8.5.10 - postcss-selector-parser: 7.1.1 + postcss-selector-parser: 7.1.2 '@csstools/postcss-light-dark-function@2.0.11(postcss@8.5.10)': dependencies: @@ -15416,7 +15677,7 @@ snapshots: postcss: 8.5.10 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.1(postcss@8.5.10)': dependencies: postcss: 8.5.10 postcss-value-parser: 4.2.0 @@ -15430,11 +15691,21 @@ snapshots: '@csstools/utilities': 2.0.0(postcss@8.5.10) postcss: 8.5.10 + '@csstools/postcss-position-area-property@1.0.0(postcss@8.5.10)': + dependencies: + postcss: 8.5.10 + '@csstools/postcss-progressive-custom-properties@4.2.1(postcss@8.5.10)': dependencies: postcss: 8.5.10 postcss-value-parser: 4.2.0 + '@csstools/postcss-property-rule-prelude-list@1.0.0(postcss@8.5.10)': + dependencies: + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 + postcss: 8.5.10 + '@csstools/postcss-random-function@2.0.1(postcss@8.5.10)': 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) @@ -15454,7 +15725,7 @@ snapshots: '@csstools/postcss-scope-pseudo-class@4.0.1(postcss@8.5.10)': dependencies: postcss: 8.5.10 - postcss-selector-parser: 7.1.1 + postcss-selector-parser: 7.1.2 '@csstools/postcss-sign-functions@1.1.4(postcss@8.5.10)': dependencies: @@ -15470,6 +15741,17 @@ snapshots: '@csstools/css-tokenizer': 3.0.4 postcss: 8.5.10 + '@csstools/postcss-syntax-descriptor-syntax-production@1.0.1(postcss@8.5.10)': + dependencies: + '@csstools/css-tokenizer': 3.0.4 + postcss: 8.5.10 + + '@csstools/postcss-system-ui-font-family@1.0.0(postcss@8.5.10)': + dependencies: + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 + postcss: 8.5.10 + '@csstools/postcss-text-decoration-shorthand@4.0.3(postcss@8.5.10)': dependencies: '@csstools/color-helpers': 5.1.0 @@ -15487,13 +15769,13 @@ snapshots: dependencies: postcss: 8.5.10 - '@csstools/selector-resolve-nested@3.1.0(postcss-selector-parser@7.1.1)': + '@csstools/selector-resolve-nested@3.1.0(postcss-selector-parser@7.1.2)': dependencies: - postcss-selector-parser: 7.1.1 + postcss-selector-parser: 7.1.2 - '@csstools/selector-specificity@5.0.0(postcss-selector-parser@7.1.1)': + '@csstools/selector-specificity@5.0.0(postcss-selector-parser@7.1.2)': dependencies: - postcss-selector-parser: 7.1.1 + postcss-selector-parser: 7.1.2 '@csstools/utilities@2.0.0(postcss@8.5.10)': dependencies: @@ -15566,7 +15848,7 @@ snapshots: '@cucumber/gherkin-utils@11.0.0': dependencies: '@cucumber/gherkin': 38.0.0 - '@cucumber/messages': 32.3.1 + '@cucumber/messages': 32.2.0 '@teppeis/multimaps': 3.0.0 commander: 14.0.2 source-map-support: 0.5.21 @@ -15577,7 +15859,7 @@ snapshots: '@cucumber/gherkin@38.0.0': dependencies: - '@cucumber/messages': 32.3.1 + '@cucumber/messages': 32.2.0 '@cucumber/gherkin@39.1.0': dependencies: @@ -15656,7 +15938,7 @@ snapshots: ansi-styles: 5.2.0 cli-table3: 0.6.5 figures: 3.2.0 - ts-dedent: 2.2.0 + ts-dedent: 2.3.0 '@cucumber/pretty-formatter@1.0.1(@cucumber/cucumber@12.8.1)(@cucumber/messages@32.3.1)': dependencies: @@ -15665,7 +15947,7 @@ snapshots: ansi-styles: 5.2.0 cli-table3: 0.6.5 figures: 3.2.0 - ts-dedent: 2.2.0 + ts-dedent: 2.3.0 '@cucumber/query@13.6.0(@cucumber/messages@27.2.0)': dependencies: @@ -15691,88 +15973,129 @@ snapshots: '@discoveryjs/json-ext@0.5.7': {} - '@docsearch/core@4.3.1(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@docsearch/core@4.6.3(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': optionalDependencies: - '@types/react': 19.2.7 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - - '@docsearch/css@4.3.2': {} - - '@docsearch/react@4.3.2(@algolia/client-search@5.45.0)(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(search-insights@2.17.3)': - dependencies: - '@ai-sdk/react': 2.0.105(react@19.2.0)(zod@4.1.13) - '@algolia/autocomplete-core': 1.19.2(@algolia/client-search@5.45.0)(algoliasearch@5.45.0)(search-insights@2.17.3) - '@docsearch/core': 4.3.1(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docsearch/css': 4.3.2 - ai: 5.0.105(zod@4.1.13) - algoliasearch: 5.45.0 - marked: 16.4.2 - zod: 4.1.13 + '@types/react': 19.2.17 + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) + + '@docsearch/css@4.6.3': {} + + '@docsearch/react@4.6.3(@algolia/client-search@5.53.0)(@types/react@19.2.17)(algoliasearch@5.53.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(search-insights@2.17.3)': + dependencies: + '@algolia/autocomplete-core': 1.19.2(@algolia/client-search@5.53.0)(algoliasearch@5.53.0)(search-insights@2.17.3) + '@docsearch/core': 4.6.3(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docsearch/css': 4.6.3 optionalDependencies: - '@types/react': 19.2.7 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + '@types/react': 19.2.17 + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) search-insights: 2.17.3 transitivePeerDependencies: - '@algolia/client-search' + - algoliasearch - '@docusaurus/babel@3.10.1(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@docusaurus/babel@3.10.1(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.10))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: '@babel/core': 7.29.6 - '@babel/generator': 7.29.1 + '@babel/generator': 7.29.7 '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.29.6) - '@babel/plugin-transform-runtime': 7.28.5(@babel/core@7.29.6) - '@babel/preset-env': 7.28.5(@babel/core@7.29.6) - '@babel/preset-react': 7.28.5(@babel/core@7.29.6) - '@babel/preset-typescript': 7.28.5(@babel/core@7.29.6) - '@babel/runtime': 7.28.4 - '@babel/traverse': 7.29.0 + '@babel/plugin-transform-runtime': 7.29.7(@babel/core@7.29.6) + '@babel/preset-env': 7.29.7(@babel/core@7.29.6) + '@babel/preset-react': 7.29.7(@babel/core@7.29.6) + '@babel/preset-typescript': 7.29.7(@babel/core@7.29.6) + '@babel/runtime': 7.29.7 + '@babel/traverse': 7.29.7 '@docusaurus/logger': 3.10.1 - '@docusaurus/utils': 3.10.1(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/utils': 3.10.1(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.10))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) babel-plugin-dynamic-import-node: 2.3.3 - fs-extra: 11.3.2 + fs-extra: 11.3.5 tslib: 2.8.1 transitivePeerDependencies: + - '@minify-html/node' - '@swc/core' + - '@swc/css' + - '@swc/html' + - clean-css + - cssnano + - csso - esbuild + - html-minifier-terser + - lightningcss + - postcss - react - react-dom - supports-color - uglify-js - webpack-cli - '@docusaurus/bundler@3.10.1(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@6.0.3)': + '@docusaurus/babel@3.10.1(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: '@babel/core': 7.29.6 - '@docusaurus/babel': 3.10.1(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@babel/generator': 7.29.7 + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.29.6) + '@babel/plugin-transform-runtime': 7.29.7(@babel/core@7.29.6) + '@babel/preset-env': 7.29.7(@babel/core@7.29.6) + '@babel/preset-react': 7.29.7(@babel/core@7.29.6) + '@babel/preset-typescript': 7.29.7(@babel/core@7.29.6) + '@babel/runtime': 7.29.7 + '@babel/traverse': 7.29.7 + '@docusaurus/logger': 3.10.1 + '@docusaurus/utils': 3.10.1(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + babel-plugin-dynamic-import-node: 2.3.3 + fs-extra: 11.3.5 + tslib: 2.8.1 + transitivePeerDependencies: + - '@minify-html/node' + - '@swc/core' + - '@swc/css' + - '@swc/html' + - clean-css + - cssnano + - csso + - esbuild + - html-minifier-terser + - lightningcss + - postcss + - react + - react-dom + - supports-color + - uglify-js + - webpack-cli + + '@docusaurus/bundler@3.10.1(esbuild@0.28.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@6.0.3)': + dependencies: + '@babel/core': 7.29.6 + '@docusaurus/babel': 3.10.1(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.10))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) '@docusaurus/cssnano-preset': 3.10.1 '@docusaurus/logger': 3.10.1 - '@docusaurus/types': 3.10.1(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/utils': 3.10.1(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - babel-loader: 9.2.1(@babel/core@7.29.6)(webpack@5.105.4(esbuild@0.28.1)) + '@docusaurus/types': 3.10.1(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.10))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/utils': 3.10.1(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.10))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + babel-loader: 9.2.1(@babel/core@7.29.6)(webpack@5.107.2(esbuild@0.28.1)(postcss@8.5.10)) clean-css: 5.3.3 - 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)) + copy-webpack-plugin: 11.0.0(webpack@5.107.2(esbuild@0.28.1)(postcss@8.5.10)) + css-loader: 6.11.0(webpack@5.107.2(esbuild@0.28.1)(postcss@8.5.10)) + css-minimizer-webpack-plugin: 5.0.1(clean-css@5.3.3)(esbuild@0.28.1)(webpack@5.107.2(esbuild@0.28.1)(postcss@8.5.10)) cssnano: 6.1.2(postcss@8.5.10) - file-loader: 6.2.0(webpack@5.105.4(esbuild@0.28.1)) + file-loader: 6.2.0(webpack@5.107.2(esbuild@0.28.1)(postcss@8.5.10)) 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)) + mini-css-extract-plugin: 2.10.2(webpack@5.107.2(esbuild@0.28.1)(postcss@8.5.10)) + null-loader: 4.0.1(webpack@5.107.2(esbuild@0.28.1)(postcss@8.5.10)) 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) - terser-webpack-plugin: 5.4.0(esbuild@0.28.1)(webpack@5.105.4(esbuild@0.28.1)) + postcss-loader: 7.3.4(postcss@8.5.10)(typescript@6.0.3)(webpack@5.107.2(esbuild@0.28.1)(postcss@8.5.10)) + postcss-preset-env: 10.6.1(postcss@8.5.10) + terser-webpack-plugin: 5.6.1(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.10))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.10)(webpack@5.107.2(esbuild@0.28.1)(postcss@8.5.10)) 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)) - webpack: 5.105.4(esbuild@0.28.1) - webpackbar: 7.0.0(webpack@5.105.4(esbuild@0.28.1)) + url-loader: 4.1.1(file-loader@6.2.0(webpack@5.107.2(esbuild@0.28.1)(postcss@8.5.10)))(webpack@5.107.2(esbuild@0.28.1)(postcss@8.5.10)) + webpack: 5.107.2(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.10))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.10) + webpackbar: 7.0.0(webpack@5.107.2(esbuild@0.28.1)(postcss@8.5.10)) transitivePeerDependencies: + - '@minify-html/node' - '@parcel/css' - '@rspack/core' - '@swc/core' - '@swc/css' + - '@swc/html' - csso - esbuild - lightningcss @@ -15783,62 +16106,68 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/core@3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.7)(react@19.2.0))(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@6.0.3)': + '@docusaurus/core@3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@6.0.3)': dependencies: - '@docusaurus/babel': 3.10.1(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/bundler': 3.10.1(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@6.0.3) + '@docusaurus/babel': 3.10.1(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/bundler': 3.10.1(esbuild@0.28.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@6.0.3) '@docusaurus/logger': 3.10.1 - '@docusaurus/mdx-loader': 3.10.1(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/utils': 3.10.1(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/utils-common': 3.10.1(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/utils-validation': 3.10.1(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@mdx-js/react': 3.1.1(@types/react@19.2.7)(react@19.2.0) + '@docusaurus/mdx-loader': 3.10.1(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/utils': 3.10.1(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/utils-common': 3.10.1(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/utils-validation': 3.10.1(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@mdx-js/react': 3.1.1(@types/react@19.2.17)(react@19.2.7) boxen: 6.2.1 chalk: 4.1.2 chokidar: 3.6.0 cli-table3: 0.6.5 combine-promises: 1.2.0 commander: 5.1.0 - core-js: 3.47.0 + core-js: 3.49.0 detect-port: 1.6.1 escape-html: 1.0.3 eta: 2.2.0 eval: 0.1.8 execa: 5.1.1 - fs-extra: 11.3.2 + fs-extra: 11.3.5 html-tags: 3.3.1 - html-webpack-plugin: 5.6.5(webpack@5.105.4(esbuild@0.28.1)) + html-webpack-plugin: 5.6.7(webpack@5.107.2(esbuild@0.28.1)(postcss@8.5.10)) leven: 3.1.0 lodash: 4.18.1 open: 8.4.2 p-map: 4.0.0 prompts: 2.4.2 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - react-helmet-async: '@slorber/react-helmet-async@1.3.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)' - react-loadable: '@docusaurus/react-loadable@6.0.0(react@19.2.0)' - react-loadable-ssr-addon-v5-slorber: 1.0.3(@docusaurus/react-loadable@6.0.0(react@19.2.0))(webpack@5.105.4(esbuild@0.28.1)) - react-router: 5.3.4(react@19.2.0) - react-router-config: 5.1.1(react-router@5.3.4(react@19.2.0))(react@19.2.0) - react-router-dom: 5.3.4(react@19.2.0) - semver: 7.7.4 + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) + react-helmet-async: '@slorber/react-helmet-async@1.3.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7)' + react-loadable: '@docusaurus/react-loadable@6.0.0(react@19.2.7)' + react-loadable-ssr-addon-v5-slorber: 1.0.3(@docusaurus/react-loadable@6.0.0(react@19.2.7))(webpack@5.107.2(esbuild@0.28.1)(postcss@8.5.10)) + react-router: 5.3.4(react@19.2.7) + react-router-config: 5.1.1(react-router@5.3.4(react@19.2.7))(react@19.2.7) + react-router-dom: 5.3.4(react@19.2.7) + semver: 7.8.4 serve-handler: 6.1.7 tinypool: 1.1.1 tslib: 2.8.1 update-notifier: 6.0.2 - webpack: 5.105.4(esbuild@0.28.1) + webpack: 5.107.2(esbuild@0.28.1)(postcss@8.5.10) webpack-bundle-analyzer: 4.10.2 - webpack-dev-server: 5.2.5(webpack@5.105.4(esbuild@0.28.1)) + webpack-dev-server: 5.2.5(tslib@2.8.1)(webpack@5.107.2(esbuild@0.28.1)(postcss@8.5.10)) webpack-merge: 6.0.1 transitivePeerDependencies: + - '@minify-html/node' - '@parcel/css' - '@rspack/core' - '@swc/core' - '@swc/css' + - '@swc/html' - bufferutil + - clean-css + - cssnano - csso - esbuild + - html-minifier-terser - lightningcss + - postcss - supports-color - typescript - uglify-js @@ -15857,22 +16186,22 @@ snapshots: chalk: 4.1.2 tslib: 2.8.1 - '@docusaurus/mdx-loader@3.10.1(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@docusaurus/mdx-loader@3.10.1(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: '@docusaurus/logger': 3.10.1 - '@docusaurus/utils': 3.10.1(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/utils-validation': 3.10.1(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/utils': 3.10.1(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/utils-validation': 3.10.1(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) '@mdx-js/mdx': 3.1.1 '@slorber/remark-comment': 1.0.0 escape-html: 1.0.3 estree-util-value-to-estree: 3.5.0 - file-loader: 6.2.0(webpack@5.105.4(esbuild@0.28.1)) - fs-extra: 11.3.2 + file-loader: 6.2.0(webpack@5.107.2(esbuild@0.28.1)(postcss@8.5.10)) + fs-extra: 11.3.5 image-size: 2.0.2 mdast-util-mdx: 3.0.0 mdast-util-to-string: 4.0.0 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) rehype-raw: 7.0.0 remark-directive: 3.0.1 remark-emoji: 4.0.1 @@ -15881,162 +16210,204 @@ snapshots: stringify-object: 3.3.0 tslib: 2.8.1 unified: 11.0.5 - unist-util-visit: 5.0.0 - 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)) + unist-util-visit: 5.1.0 + url-loader: 4.1.1(file-loader@6.2.0(webpack@5.107.2(esbuild@0.28.1)(postcss@8.5.10)))(webpack@5.107.2(esbuild@0.28.1)(postcss@8.5.10)) vfile: 6.0.3 - webpack: 5.105.4(esbuild@0.28.1) + webpack: 5.107.2(esbuild@0.28.1)(postcss@8.5.10) transitivePeerDependencies: + - '@minify-html/node' - '@swc/core' + - '@swc/css' + - '@swc/html' + - clean-css + - cssnano + - csso - esbuild + - html-minifier-terser + - lightningcss + - postcss - supports-color - uglify-js - webpack-cli - '@docusaurus/module-type-aliases@3.10.1(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@docusaurus/module-type-aliases@3.10.1(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - '@docusaurus/types': 3.10.1(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/types': 3.10.1(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) '@types/history': 4.7.11 - '@types/react': 19.2.7 + '@types/react': 19.2.17 '@types/react-router-config': 5.0.11 '@types/react-router-dom': 5.3.3 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - react-helmet-async: '@slorber/react-helmet-async@1.3.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)' - react-loadable: '@docusaurus/react-loadable@6.0.0(react@19.2.0)' + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) + react-helmet-async: '@slorber/react-helmet-async@1.3.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7)' + react-loadable: '@docusaurus/react-loadable@6.0.0(react@19.2.7)' transitivePeerDependencies: + - '@minify-html/node' - '@swc/core' + - '@swc/css' + - '@swc/html' + - clean-css + - cssnano + - csso - esbuild + - html-minifier-terser + - lightningcss + - postcss - supports-color - uglify-js - webpack-cli - '@docusaurus/plugin-content-blog@3.10.1(@docusaurus/plugin-content-docs@3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.7)(react@19.2.0))(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@6.0.3))(@mdx-js/react@3.1.1(@types/react@19.2.7)(react@19.2.0))(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@6.0.3)': + '@docusaurus/plugin-content-blog@3.10.1(@docusaurus/plugin-content-docs@3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@6.0.3))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@6.0.3)': dependencies: - '@docusaurus/core': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.7)(react@19.2.0))(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@6.0.3) + '@docusaurus/core': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@6.0.3) '@docusaurus/logger': 3.10.1 - '@docusaurus/mdx-loader': 3.10.1(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/plugin-content-docs': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.7)(react@19.2.0))(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@6.0.3) - '@docusaurus/theme-common': 3.10.1(@docusaurus/plugin-content-docs@3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.7)(react@19.2.0))(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@6.0.3))(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/types': 3.10.1(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/utils': 3.10.1(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/utils-common': 3.10.1(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/utils-validation': 3.10.1(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/mdx-loader': 3.10.1(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/plugin-content-docs': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@6.0.3) + '@docusaurus/theme-common': 3.10.1(@docusaurus/plugin-content-docs@3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@6.0.3))(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/types': 3.10.1(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/utils': 3.10.1(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/utils-common': 3.10.1(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/utils-validation': 3.10.1(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) cheerio: 1.0.0-rc.12 combine-promises: 1.2.0 feed: 4.2.2 - fs-extra: 11.3.2 + fs-extra: 11.3.5 lodash: 4.18.1 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) schema-dts: 1.1.5 srcset: 4.0.0 tslib: 2.8.1 - unist-util-visit: 5.0.0 + unist-util-visit: 5.1.0 utility-types: 3.11.0 - webpack: 5.105.4(esbuild@0.28.1) + webpack: 5.107.2(esbuild@0.28.1)(postcss@8.5.10) transitivePeerDependencies: - '@docusaurus/faster' - '@mdx-js/react' + - '@minify-html/node' - '@parcel/css' - '@rspack/core' - '@swc/core' - '@swc/css' + - '@swc/html' - bufferutil + - clean-css + - cssnano - csso - esbuild + - html-minifier-terser - lightningcss + - postcss - supports-color - typescript - uglify-js - utf-8-validate - webpack-cli - '@docusaurus/plugin-content-docs@3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.7)(react@19.2.0))(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@6.0.3)': + '@docusaurus/plugin-content-docs@3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@6.0.3)': dependencies: - '@docusaurus/core': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.7)(react@19.2.0))(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@6.0.3) + '@docusaurus/core': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@6.0.3) '@docusaurus/logger': 3.10.1 - '@docusaurus/mdx-loader': 3.10.1(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/module-type-aliases': 3.10.1(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/theme-common': 3.10.1(@docusaurus/plugin-content-docs@3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.7)(react@19.2.0))(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@6.0.3))(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/types': 3.10.1(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/utils': 3.10.1(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/utils-common': 3.10.1(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/utils-validation': 3.10.1(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/mdx-loader': 3.10.1(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/module-type-aliases': 3.10.1(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/theme-common': 3.10.1(@docusaurus/plugin-content-docs@3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@6.0.3))(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/types': 3.10.1(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/utils': 3.10.1(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/utils-common': 3.10.1(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/utils-validation': 3.10.1(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) '@types/react-router-config': 5.0.11 combine-promises: 1.2.0 - fs-extra: 11.3.2 + fs-extra: 11.3.5 js-yaml: 4.2.0 lodash: 4.18.1 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) schema-dts: 1.1.5 tslib: 2.8.1 utility-types: 3.11.0 - webpack: 5.105.4(esbuild@0.28.1) + webpack: 5.107.2(esbuild@0.28.1)(postcss@8.5.10) transitivePeerDependencies: - '@docusaurus/faster' - '@mdx-js/react' + - '@minify-html/node' - '@parcel/css' - '@rspack/core' - '@swc/core' - '@swc/css' + - '@swc/html' - bufferutil + - clean-css + - cssnano - csso - esbuild + - html-minifier-terser - lightningcss + - postcss - supports-color - typescript - uglify-js - utf-8-validate - webpack-cli - '@docusaurus/plugin-content-pages@3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.7)(react@19.2.0))(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@6.0.3)': + '@docusaurus/plugin-content-pages@3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@6.0.3)': dependencies: - '@docusaurus/core': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.7)(react@19.2.0))(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@6.0.3) - '@docusaurus/mdx-loader': 3.10.1(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/types': 3.10.1(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/utils': 3.10.1(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/utils-validation': 3.10.1(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - fs-extra: 11.3.2 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + '@docusaurus/core': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@6.0.3) + '@docusaurus/mdx-loader': 3.10.1(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/types': 3.10.1(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/utils': 3.10.1(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/utils-validation': 3.10.1(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + fs-extra: 11.3.5 + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) tslib: 2.8.1 - webpack: 5.105.4(esbuild@0.28.1) + webpack: 5.107.2(esbuild@0.28.1)(postcss@8.5.10) transitivePeerDependencies: - '@docusaurus/faster' - '@mdx-js/react' + - '@minify-html/node' - '@parcel/css' - '@rspack/core' - '@swc/core' - '@swc/css' + - '@swc/html' - bufferutil + - clean-css + - cssnano - csso - esbuild + - html-minifier-terser - lightningcss + - postcss - supports-color - typescript - uglify-js - utf-8-validate - webpack-cli - '@docusaurus/plugin-css-cascade-layers@3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.7)(react@19.2.0))(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@6.0.3)': + '@docusaurus/plugin-css-cascade-layers@3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@6.0.3)': dependencies: - '@docusaurus/core': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.7)(react@19.2.0))(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@6.0.3) - '@docusaurus/types': 3.10.1(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/utils': 3.10.1(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/utils-validation': 3.10.1(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/core': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@6.0.3) + '@docusaurus/types': 3.10.1(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/utils': 3.10.1(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/utils-validation': 3.10.1(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) tslib: 2.8.1 transitivePeerDependencies: - '@docusaurus/faster' - '@mdx-js/react' + - '@minify-html/node' - '@parcel/css' - '@rspack/core' - '@swc/core' - '@swc/css' + - '@swc/html' - bufferutil + - clean-css + - cssnano - csso - esbuild + - html-minifier-terser - lightningcss + - postcss - react - react-dom - supports-color @@ -16045,200 +16416,242 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/plugin-debug@3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.7)(react@19.2.0))(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@6.0.3)': + '@docusaurus/plugin-debug@3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@6.0.3)': dependencies: - '@docusaurus/core': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.7)(react@19.2.0))(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@6.0.3) - '@docusaurus/types': 3.10.1(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/utils': 3.10.1(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - fs-extra: 11.3.2 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - react-json-view-lite: 2.5.0(react@19.2.0) + '@docusaurus/core': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@6.0.3) + '@docusaurus/types': 3.10.1(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/utils': 3.10.1(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + fs-extra: 11.3.5 + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) + react-json-view-lite: 2.5.0(react@19.2.7) tslib: 2.8.1 transitivePeerDependencies: - '@docusaurus/faster' - '@mdx-js/react' + - '@minify-html/node' - '@parcel/css' - '@rspack/core' - '@swc/core' - '@swc/css' + - '@swc/html' - bufferutil + - clean-css + - cssnano - csso - esbuild + - html-minifier-terser - lightningcss + - postcss - supports-color - typescript - uglify-js - utf-8-validate - webpack-cli - '@docusaurus/plugin-google-analytics@3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.7)(react@19.2.0))(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@6.0.3)': + '@docusaurus/plugin-google-analytics@3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@6.0.3)': dependencies: - '@docusaurus/core': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.7)(react@19.2.0))(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@6.0.3) - '@docusaurus/types': 3.10.1(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/utils-validation': 3.10.1(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + '@docusaurus/core': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@6.0.3) + '@docusaurus/types': 3.10.1(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/utils-validation': 3.10.1(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) tslib: 2.8.1 transitivePeerDependencies: - '@docusaurus/faster' - '@mdx-js/react' + - '@minify-html/node' - '@parcel/css' - '@rspack/core' - '@swc/core' - '@swc/css' + - '@swc/html' - bufferutil + - clean-css + - cssnano - csso - esbuild + - html-minifier-terser - lightningcss + - postcss - supports-color - typescript - uglify-js - utf-8-validate - webpack-cli - '@docusaurus/plugin-google-gtag@3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.7)(react@19.2.0))(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@6.0.3)': + '@docusaurus/plugin-google-gtag@3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@6.0.3)': dependencies: - '@docusaurus/core': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.7)(react@19.2.0))(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@6.0.3) - '@docusaurus/types': 3.10.1(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/utils-validation': 3.10.1(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/core': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@6.0.3) + '@docusaurus/types': 3.10.1(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/utils-validation': 3.10.1(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) '@types/gtag.js': 0.0.20 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) tslib: 2.8.1 transitivePeerDependencies: - '@docusaurus/faster' - '@mdx-js/react' + - '@minify-html/node' - '@parcel/css' - '@rspack/core' - '@swc/core' - '@swc/css' + - '@swc/html' - bufferutil + - clean-css + - cssnano - csso - esbuild + - html-minifier-terser - lightningcss + - postcss - supports-color - typescript - uglify-js - utf-8-validate - webpack-cli - '@docusaurus/plugin-google-tag-manager@3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.7)(react@19.2.0))(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@6.0.3)': + '@docusaurus/plugin-google-tag-manager@3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@6.0.3)': dependencies: - '@docusaurus/core': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.7)(react@19.2.0))(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@6.0.3) - '@docusaurus/types': 3.10.1(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/utils-validation': 3.10.1(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + '@docusaurus/core': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@6.0.3) + '@docusaurus/types': 3.10.1(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/utils-validation': 3.10.1(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) tslib: 2.8.1 transitivePeerDependencies: - '@docusaurus/faster' - '@mdx-js/react' + - '@minify-html/node' - '@parcel/css' - '@rspack/core' - '@swc/core' - '@swc/css' + - '@swc/html' - bufferutil + - clean-css + - cssnano - csso - esbuild + - html-minifier-terser - lightningcss + - postcss - supports-color - typescript - uglify-js - utf-8-validate - webpack-cli - '@docusaurus/plugin-sitemap@3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.7)(react@19.2.0))(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@6.0.3)': + '@docusaurus/plugin-sitemap@3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@6.0.3)': dependencies: - '@docusaurus/core': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.7)(react@19.2.0))(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@6.0.3) + '@docusaurus/core': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@6.0.3) '@docusaurus/logger': 3.10.1 - '@docusaurus/types': 3.10.1(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/utils': 3.10.1(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/utils-common': 3.10.1(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/utils-validation': 3.10.1(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - fs-extra: 11.3.2 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - sitemap: 7.1.2 + '@docusaurus/types': 3.10.1(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/utils': 3.10.1(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/utils-common': 3.10.1(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/utils-validation': 3.10.1(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + fs-extra: 11.3.5 + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) + sitemap: 7.1.3 tslib: 2.8.1 transitivePeerDependencies: - '@docusaurus/faster' - '@mdx-js/react' + - '@minify-html/node' - '@parcel/css' - '@rspack/core' - '@swc/core' - '@swc/css' + - '@swc/html' - bufferutil + - clean-css + - cssnano - csso - esbuild + - html-minifier-terser - lightningcss + - postcss - supports-color - typescript - uglify-js - utf-8-validate - webpack-cli - '@docusaurus/plugin-svgr@3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.7)(react@19.2.0))(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@6.0.3)': + '@docusaurus/plugin-svgr@3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@6.0.3)': dependencies: - '@docusaurus/core': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.7)(react@19.2.0))(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@6.0.3) - '@docusaurus/types': 3.10.1(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/utils': 3.10.1(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/utils-validation': 3.10.1(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/core': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@6.0.3) + '@docusaurus/types': 3.10.1(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/utils': 3.10.1(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/utils-validation': 3.10.1(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) '@svgr/core': 8.1.0(typescript@6.0.3) '@svgr/webpack': 8.1.0(typescript@6.0.3) - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) tslib: 2.8.1 - webpack: 5.105.4(esbuild@0.28.1) + webpack: 5.107.2(esbuild@0.28.1)(postcss@8.5.10) transitivePeerDependencies: - '@docusaurus/faster' - '@mdx-js/react' + - '@minify-html/node' - '@parcel/css' - '@rspack/core' - '@swc/core' - '@swc/css' + - '@swc/html' - bufferutil + - clean-css + - cssnano - csso - esbuild + - html-minifier-terser - lightningcss + - postcss - supports-color - typescript - uglify-js - utf-8-validate - webpack-cli - '@docusaurus/preset-classic@3.10.1(@algolia/client-search@5.45.0)(@mdx-js/react@3.1.1(@types/react@19.2.7)(react@19.2.0))(@types/react@19.2.7)(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(search-insights@2.17.3)(typescript@6.0.3)': - dependencies: - '@docusaurus/core': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.7)(react@19.2.0))(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@6.0.3) - '@docusaurus/plugin-content-blog': 3.10.1(@docusaurus/plugin-content-docs@3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.7)(react@19.2.0))(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@6.0.3))(@mdx-js/react@3.1.1(@types/react@19.2.7)(react@19.2.0))(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@6.0.3) - '@docusaurus/plugin-content-docs': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.7)(react@19.2.0))(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@6.0.3) - '@docusaurus/plugin-content-pages': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.7)(react@19.2.0))(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@6.0.3) - '@docusaurus/plugin-css-cascade-layers': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.7)(react@19.2.0))(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@6.0.3) - '@docusaurus/plugin-debug': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.7)(react@19.2.0))(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@6.0.3) - '@docusaurus/plugin-google-analytics': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.7)(react@19.2.0))(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@6.0.3) - '@docusaurus/plugin-google-gtag': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.7)(react@19.2.0))(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@6.0.3) - '@docusaurus/plugin-google-tag-manager': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.7)(react@19.2.0))(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@6.0.3) - '@docusaurus/plugin-sitemap': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.7)(react@19.2.0))(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@6.0.3) - '@docusaurus/plugin-svgr': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.7)(react@19.2.0))(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@6.0.3) - '@docusaurus/theme-classic': 3.10.1(@types/react@19.2.7)(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@6.0.3) - '@docusaurus/theme-common': 3.10.1(@docusaurus/plugin-content-docs@3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.7)(react@19.2.0))(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@6.0.3))(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/theme-search-algolia': 3.10.1(@algolia/client-search@5.45.0)(@mdx-js/react@3.1.1(@types/react@19.2.7)(react@19.2.0))(@types/react@19.2.7)(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(search-insights@2.17.3)(typescript@6.0.3) - '@docusaurus/types': 3.10.1(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + '@docusaurus/preset-classic@3.10.1(@algolia/client-search@5.53.0)(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@types/react@19.2.17)(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(search-insights@2.17.3)(typescript@6.0.3)': + dependencies: + '@docusaurus/core': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@6.0.3) + '@docusaurus/plugin-content-blog': 3.10.1(@docusaurus/plugin-content-docs@3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@6.0.3))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@6.0.3) + '@docusaurus/plugin-content-docs': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@6.0.3) + '@docusaurus/plugin-content-pages': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@6.0.3) + '@docusaurus/plugin-css-cascade-layers': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@6.0.3) + '@docusaurus/plugin-debug': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@6.0.3) + '@docusaurus/plugin-google-analytics': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@6.0.3) + '@docusaurus/plugin-google-gtag': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@6.0.3) + '@docusaurus/plugin-google-tag-manager': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@6.0.3) + '@docusaurus/plugin-sitemap': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@6.0.3) + '@docusaurus/plugin-svgr': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@6.0.3) + '@docusaurus/theme-classic': 3.10.1(@types/react@19.2.17)(esbuild@0.28.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@6.0.3) + '@docusaurus/theme-common': 3.10.1(@docusaurus/plugin-content-docs@3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@6.0.3))(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/theme-search-algolia': 3.10.1(@algolia/client-search@5.53.0)(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@types/react@19.2.17)(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(search-insights@2.17.3)(typescript@6.0.3) + '@docusaurus/types': 3.10.1(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) transitivePeerDependencies: - '@algolia/client-search' - '@docusaurus/faster' - '@mdx-js/react' + - '@minify-html/node' - '@parcel/css' - '@rspack/core' - '@swc/core' - '@swc/css' + - '@swc/html' - '@types/react' - bufferutil + - clean-css + - cssnano - csso - esbuild + - html-minifier-terser - lightningcss + - postcss - search-insights - supports-color - typescript @@ -16246,51 +16659,56 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/react-loadable@6.0.0(react@19.2.0)': + '@docusaurus/react-loadable@6.0.0(react@19.2.7)': dependencies: - '@types/react': 19.2.7 - react: 19.2.0 + '@types/react': 19.2.17 + react: 19.2.7 - '@docusaurus/theme-classic@3.10.1(@types/react@19.2.7)(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@6.0.3)': + '@docusaurus/theme-classic@3.10.1(@types/react@19.2.17)(esbuild@0.28.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@6.0.3)': dependencies: - '@docusaurus/core': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.7)(react@19.2.0))(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@6.0.3) + '@docusaurus/core': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@6.0.3) '@docusaurus/logger': 3.10.1 - '@docusaurus/mdx-loader': 3.10.1(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/module-type-aliases': 3.10.1(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/plugin-content-blog': 3.10.1(@docusaurus/plugin-content-docs@3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.7)(react@19.2.0))(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@6.0.3))(@mdx-js/react@3.1.1(@types/react@19.2.7)(react@19.2.0))(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@6.0.3) - '@docusaurus/plugin-content-docs': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.7)(react@19.2.0))(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@6.0.3) - '@docusaurus/plugin-content-pages': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.7)(react@19.2.0))(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@6.0.3) - '@docusaurus/theme-common': 3.10.1(@docusaurus/plugin-content-docs@3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.7)(react@19.2.0))(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@6.0.3))(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/mdx-loader': 3.10.1(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/module-type-aliases': 3.10.1(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/plugin-content-blog': 3.10.1(@docusaurus/plugin-content-docs@3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@6.0.3))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@6.0.3) + '@docusaurus/plugin-content-docs': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@6.0.3) + '@docusaurus/plugin-content-pages': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@6.0.3) + '@docusaurus/theme-common': 3.10.1(@docusaurus/plugin-content-docs@3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@6.0.3))(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) '@docusaurus/theme-translations': 3.10.1 - '@docusaurus/types': 3.10.1(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/utils': 3.10.1(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/utils-common': 3.10.1(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/utils-validation': 3.10.1(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@mdx-js/react': 3.1.1(@types/react@19.2.7)(react@19.2.0) + '@docusaurus/types': 3.10.1(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/utils': 3.10.1(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/utils-common': 3.10.1(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/utils-validation': 3.10.1(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@mdx-js/react': 3.1.1(@types/react@19.2.17)(react@19.2.7) clsx: 2.1.1 copy-text-to-clipboard: 3.2.2 infima: 0.2.0-alpha.45 lodash: 4.18.1 nprogress: 0.2.0 postcss: 8.5.10 - prism-react-renderer: 2.4.1(react@19.2.0) + prism-react-renderer: 2.4.1(react@19.2.7) prismjs: 1.30.0 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - react-router-dom: 5.3.4(react@19.2.0) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) + react-router-dom: 5.3.4(react@19.2.7) rtlcss: 4.3.0 tslib: 2.8.1 utility-types: 3.11.0 transitivePeerDependencies: - '@docusaurus/faster' + - '@minify-html/node' - '@parcel/css' - '@rspack/core' - '@swc/core' - '@swc/css' + - '@swc/html' - '@types/react' - bufferutil + - clean-css + - cssnano - csso - esbuild + - html-minifier-terser - lightningcss - supports-color - typescript @@ -16298,64 +16716,79 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/theme-common@3.10.1(@docusaurus/plugin-content-docs@3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.7)(react@19.2.0))(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@6.0.3))(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@docusaurus/theme-common@3.10.1(@docusaurus/plugin-content-docs@3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@6.0.3))(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - '@docusaurus/mdx-loader': 3.10.1(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/module-type-aliases': 3.10.1(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/plugin-content-docs': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.7)(react@19.2.0))(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@6.0.3) - '@docusaurus/utils': 3.10.1(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/utils-common': 3.10.1(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/mdx-loader': 3.10.1(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/module-type-aliases': 3.10.1(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/plugin-content-docs': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@6.0.3) + '@docusaurus/utils': 3.10.1(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/utils-common': 3.10.1(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) '@types/history': 4.7.11 - '@types/react': 19.2.7 + '@types/react': 19.2.17 '@types/react-router-config': 5.0.11 clsx: 2.1.1 parse-numeric-range: 1.3.0 - prism-react-renderer: 2.4.1(react@19.2.0) - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + prism-react-renderer: 2.4.1(react@19.2.7) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) tslib: 2.8.1 utility-types: 3.11.0 transitivePeerDependencies: + - '@minify-html/node' - '@swc/core' + - '@swc/css' + - '@swc/html' + - clean-css + - cssnano + - csso - esbuild + - html-minifier-terser + - lightningcss + - postcss - supports-color - uglify-js - webpack-cli - '@docusaurus/theme-search-algolia@3.10.1(@algolia/client-search@5.45.0)(@mdx-js/react@3.1.1(@types/react@19.2.7)(react@19.2.0))(@types/react@19.2.7)(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(search-insights@2.17.3)(typescript@6.0.3)': + '@docusaurus/theme-search-algolia@3.10.1(@algolia/client-search@5.53.0)(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@types/react@19.2.17)(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(search-insights@2.17.3)(typescript@6.0.3)': dependencies: - '@algolia/autocomplete-core': 1.19.2(@algolia/client-search@5.45.0)(algoliasearch@5.45.0)(search-insights@2.17.3) - '@docsearch/react': 4.3.2(@algolia/client-search@5.45.0)(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(search-insights@2.17.3) - '@docusaurus/core': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.7)(react@19.2.0))(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@6.0.3) + '@algolia/autocomplete-core': 1.19.8(@algolia/client-search@5.53.0)(algoliasearch@5.53.0)(search-insights@2.17.3) + '@docsearch/react': 4.6.3(@algolia/client-search@5.53.0)(@types/react@19.2.17)(algoliasearch@5.53.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(search-insights@2.17.3) + '@docusaurus/core': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@6.0.3) '@docusaurus/logger': 3.10.1 - '@docusaurus/plugin-content-docs': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.7)(react@19.2.0))(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@6.0.3) - '@docusaurus/theme-common': 3.10.1(@docusaurus/plugin-content-docs@3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.7)(react@19.2.0))(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@6.0.3))(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/plugin-content-docs': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@6.0.3) + '@docusaurus/theme-common': 3.10.1(@docusaurus/plugin-content-docs@3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@6.0.3))(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) '@docusaurus/theme-translations': 3.10.1 - '@docusaurus/utils': 3.10.1(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/utils-validation': 3.10.1(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - algoliasearch: 5.45.0 - algoliasearch-helper: 3.26.1(algoliasearch@5.45.0) + '@docusaurus/utils': 3.10.1(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/utils-validation': 3.10.1(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + algoliasearch: 5.53.0 + algoliasearch-helper: 3.29.1(algoliasearch@5.53.0) clsx: 2.1.1 eta: 2.2.0 - fs-extra: 11.3.2 + fs-extra: 11.3.5 lodash: 4.18.1 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) tslib: 2.8.1 utility-types: 3.11.0 transitivePeerDependencies: - '@algolia/client-search' - '@docusaurus/faster' - '@mdx-js/react' + - '@minify-html/node' - '@parcel/css' - '@rspack/core' - '@swc/core' - '@swc/css' + - '@swc/html' - '@types/react' - bufferutil + - clean-css + - cssnano - csso - esbuild + - html-minifier-terser - lightningcss + - postcss - search-insights - supports-color - typescript @@ -16365,73 +16798,152 @@ snapshots: '@docusaurus/theme-translations@3.10.1': dependencies: - fs-extra: 11.3.2 + fs-extra: 11.3.5 tslib: 2.8.1 '@docusaurus/tsconfig@3.10.1': {} - '@docusaurus/types@3.10.1(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@docusaurus/types@3.10.1(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.10))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: '@mdx-js/mdx': 3.1.1 '@types/history': 4.7.11 '@types/mdast': 4.0.4 - '@types/react': 19.2.7 + '@types/react': 19.2.17 commander: 5.1.0 joi: 18.2.1 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - react-helmet-async: '@slorber/react-helmet-async@1.3.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)' + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) + react-helmet-async: '@slorber/react-helmet-async@1.3.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7)' utility-types: 3.11.0 - webpack: 5.105.4(esbuild@0.28.1) + webpack: 5.107.2(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.10))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.10) webpack-merge: 5.10.0 transitivePeerDependencies: + - '@minify-html/node' - '@swc/core' + - '@swc/css' + - '@swc/html' + - clean-css + - cssnano + - csso + - esbuild + - html-minifier-terser + - lightningcss + - postcss + - supports-color + - uglify-js + - webpack-cli + + '@docusaurus/types@3.10.1(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + dependencies: + '@mdx-js/mdx': 3.1.1 + '@types/history': 4.7.11 + '@types/mdast': 4.0.4 + '@types/react': 19.2.17 + commander: 5.1.0 + joi: 18.2.1 + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) + react-helmet-async: '@slorber/react-helmet-async@1.3.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7)' + utility-types: 3.11.0 + webpack: 5.107.2(esbuild@0.28.1)(postcss@8.5.10) + webpack-merge: 5.10.0 + transitivePeerDependencies: + - '@minify-html/node' + - '@swc/core' + - '@swc/css' + - '@swc/html' + - clean-css + - cssnano + - csso + - esbuild + - html-minifier-terser + - lightningcss + - postcss + - supports-color + - uglify-js + - webpack-cli + + '@docusaurus/utils-common@3.10.1(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.10))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + dependencies: + '@docusaurus/types': 3.10.1(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.10))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + tslib: 2.8.1 + transitivePeerDependencies: + - '@minify-html/node' + - '@swc/core' + - '@swc/css' + - '@swc/html' + - clean-css + - cssnano + - csso - esbuild + - html-minifier-terser + - lightningcss + - postcss + - react + - react-dom - supports-color - uglify-js - webpack-cli - '@docusaurus/utils-common@3.10.1(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@docusaurus/utils-common@3.10.1(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - '@docusaurus/types': 3.10.1(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/types': 3.10.1(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) tslib: 2.8.1 transitivePeerDependencies: + - '@minify-html/node' - '@swc/core' + - '@swc/css' + - '@swc/html' + - clean-css + - cssnano + - csso - esbuild + - html-minifier-terser + - lightningcss + - postcss - react - react-dom - supports-color - uglify-js - webpack-cli - '@docusaurus/utils-validation@3.10.1(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@docusaurus/utils-validation@3.10.1(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: '@docusaurus/logger': 3.10.1 - '@docusaurus/utils': 3.10.1(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/utils-common': 3.10.1(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - fs-extra: 11.3.2 + '@docusaurus/utils': 3.10.1(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/utils-common': 3.10.1(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + fs-extra: 11.3.5 joi: 18.2.1 js-yaml: 4.2.0 lodash: 4.18.1 tslib: 2.8.1 transitivePeerDependencies: + - '@minify-html/node' - '@swc/core' + - '@swc/css' + - '@swc/html' + - clean-css + - cssnano + - csso - esbuild + - html-minifier-terser + - lightningcss + - postcss - react - react-dom - supports-color - uglify-js - webpack-cli - '@docusaurus/utils@3.10.1(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@docusaurus/utils@3.10.1(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.10))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: '@docusaurus/logger': 3.10.1 - '@docusaurus/types': 3.10.1(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/utils-common': 3.10.1(esbuild@0.28.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/types': 3.10.1(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.10))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/utils-common': 3.10.1(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.10))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) escape-string-regexp: 4.0.0 execa: 5.1.1 - file-loader: 6.2.0(webpack@5.105.4(esbuild@0.28.1)) - fs-extra: 11.3.2 + file-loader: 6.2.0(webpack@5.107.2(esbuild@0.28.1)(postcss@8.5.10)) + fs-extra: 11.3.5 github-slugger: 1.5.0 globby: 11.1.0 gray-matter: 4.0.3 @@ -16443,22 +16955,73 @@ snapshots: prompts: 2.4.2 resolve-pathname: 3.0.0 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)) + url-loader: 4.1.1(file-loader@6.2.0(webpack@5.107.2(esbuild@0.28.1)(postcss@8.5.10)))(webpack@5.107.2(esbuild@0.28.1)(postcss@8.5.10)) utility-types: 3.11.0 - webpack: 5.105.4(esbuild@0.28.1) + webpack: 5.107.2(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.10))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.10) transitivePeerDependencies: + - '@minify-html/node' - '@swc/core' + - '@swc/css' + - '@swc/html' + - clean-css + - cssnano + - csso - esbuild + - html-minifier-terser + - lightningcss + - postcss - react - react-dom - supports-color - uglify-js - webpack-cli - '@dr.pogodin/react-helmet@3.0.4(react@19.2.0)': + '@docusaurus/utils@3.10.1(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - '@babel/runtime': 7.28.4 - react: 19.2.0 + '@docusaurus/logger': 3.10.1 + '@docusaurus/types': 3.10.1(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/utils-common': 3.10.1(esbuild@0.28.1)(postcss@8.5.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + escape-string-regexp: 4.0.0 + execa: 5.1.1 + file-loader: 6.2.0(webpack@5.107.2(esbuild@0.28.1)(postcss@8.5.10)) + fs-extra: 11.3.5 + github-slugger: 1.5.0 + globby: 11.1.0 + gray-matter: 4.0.3 + jiti: 2.6.1 + js-yaml: 4.2.0 + lodash: 4.18.1 + micromatch: 4.0.8 + p-queue: 6.6.2 + prompts: 2.4.2 + resolve-pathname: 3.0.0 + tslib: 2.8.1 + url-loader: 4.1.1(file-loader@6.2.0(webpack@5.107.2(esbuild@0.28.1)(postcss@8.5.10)))(webpack@5.107.2(esbuild@0.28.1)(postcss@8.5.10)) + utility-types: 3.11.0 + webpack: 5.107.2(esbuild@0.28.1)(postcss@8.5.10) + transitivePeerDependencies: + - '@minify-html/node' + - '@swc/core' + - '@swc/css' + - '@swc/html' + - clean-css + - cssnano + - csso + - esbuild + - html-minifier-terser + - lightningcss + - postcss + - react + - react-dom + - supports-color + - uglify-js + - webpack-cli + + '@dr.pogodin/react-helmet@3.2.2(react@19.2.7)': + dependencies: + '@babel/runtime': 7.29.7 + react: 19.2.7 + react-compiler-runtime: 1.0.0(react@19.2.7) '@emnapi/core@1.10.0': dependencies: @@ -16491,7 +17054,7 @@ snapshots: '@emotion/unitless@0.7.5': {} - '@envelop/core@5.4.0': + '@envelop/core@5.5.1': dependencies: '@envelop/instrumentation': 1.0.0 '@envelop/types': 5.2.1 @@ -16588,38 +17151,38 @@ snapshots: '@fastify/busboy@3.2.0': {} - '@graphql-codegen/add@5.0.3(graphql@16.12.0)': + '@graphql-codegen/add@5.0.3(graphql@16.14.2)': dependencies: - '@graphql-codegen/plugin-helpers': 5.1.1(graphql@16.12.0) - graphql: 16.12.0 + '@graphql-codegen/plugin-helpers': 5.1.1(graphql@16.14.2) + graphql: 16.14.2 tslib: 2.6.3 - '@graphql-codegen/cli@5.0.7(@parcel/watcher@2.5.1)(@types/node@22.19.15)(graphql@16.12.0)(typescript@6.0.3)': - dependencies: - '@babel/generator': 7.28.5 - '@babel/template': 7.27.2 - '@babel/types': 7.28.5 - '@graphql-codegen/client-preset': 4.8.3(graphql@16.12.0) - '@graphql-codegen/core': 4.0.2(graphql@16.12.0) - '@graphql-codegen/plugin-helpers': 5.1.1(graphql@16.12.0) - '@graphql-tools/apollo-engine-loader': 8.0.27(graphql@16.12.0) - '@graphql-tools/code-file-loader': 8.1.27(graphql@16.12.0) - '@graphql-tools/git-loader': 8.0.31(graphql@16.12.0) - '@graphql-tools/github-loader': 8.0.22(@types/node@22.19.15)(graphql@16.12.0) - '@graphql-tools/graphql-file-loader': 8.1.8(graphql@16.12.0) - '@graphql-tools/json-file-loader': 8.0.25(graphql@16.12.0) - '@graphql-tools/load': 8.1.7(graphql@16.12.0) - '@graphql-tools/prisma-loader': 8.0.17(@types/node@22.19.15)(graphql@16.12.0) - '@graphql-tools/url-loader': 8.0.33(@types/node@22.19.15)(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) + '@graphql-codegen/cli@5.0.7(@parcel/watcher@2.5.6)(@types/node@22.19.20)(graphql@16.14.2)(typescript@6.0.3)': + dependencies: + '@babel/generator': 7.29.7 + '@babel/template': 7.29.7 + '@babel/types': 7.29.7 + '@graphql-codegen/client-preset': 4.8.3(graphql@16.14.2) + '@graphql-codegen/core': 4.0.2(graphql@16.14.2) + '@graphql-codegen/plugin-helpers': 5.1.1(graphql@16.14.2) + '@graphql-tools/apollo-engine-loader': 8.0.30(graphql@16.14.2) + '@graphql-tools/code-file-loader': 8.1.32(graphql@16.14.2) + '@graphql-tools/git-loader': 8.0.36(graphql@16.14.2) + '@graphql-tools/github-loader': 8.0.22(@types/node@22.19.20)(graphql@16.14.2) + '@graphql-tools/graphql-file-loader': 8.1.14(graphql@16.14.2) + '@graphql-tools/json-file-loader': 8.0.28(graphql@16.14.2) + '@graphql-tools/load': 8.1.10(graphql@16.14.2) + '@graphql-tools/prisma-loader': 8.0.17(@types/node@22.19.20)(graphql@16.14.2) + '@graphql-tools/url-loader': 8.0.33(@types/node@22.19.20)(graphql@16.14.2) + '@graphql-tools/utils': 10.11.0(graphql@16.14.2) '@whatwg-node/fetch': 0.10.13 chalk: 4.1.2 cosmiconfig: 8.3.6(typescript@6.0.3) debounce: 1.2.1 detect-indent: 6.1.0 - graphql: 16.12.0 - graphql-config: 5.1.5(@types/node@22.19.15)(graphql@16.12.0)(typescript@6.0.3) - inquirer: 8.2.7(@types/node@22.19.15) + graphql: 16.14.2 + graphql-config: 5.1.6(@types/node@22.19.20)(graphql@16.14.2)(typescript@6.0.3) + inquirer: 8.2.7(@types/node@22.19.20) is-glob: 4.0.3 jiti: 2.6.1 json-to-pretty-yaml: 1.2.2 @@ -16633,7 +17196,7 @@ snapshots: yaml: 2.8.3 yargs: 17.7.2 optionalDependencies: - '@parcel/watcher': 2.5.1 + '@parcel/watcher': 2.5.6 transitivePeerDependencies: - '@fastify/websocket' - '@types/node' @@ -16645,219 +17208,230 @@ snapshots: - graphql-sock - supports-color - typescript - - uWebSockets.js - utf-8-validate - '@graphql-codegen/client-preset@4.8.3(graphql@16.12.0)': - dependencies: - '@babel/helper-plugin-utils': 7.27.1 - '@babel/template': 7.28.6 - '@graphql-codegen/add': 5.0.3(graphql@16.12.0) - '@graphql-codegen/gql-tag-operations': 4.0.17(graphql@16.12.0) - '@graphql-codegen/plugin-helpers': 5.1.1(graphql@16.12.0) - '@graphql-codegen/typed-document-node': 5.1.2(graphql@16.12.0) - '@graphql-codegen/typescript': 4.1.6(graphql@16.12.0) - '@graphql-codegen/typescript-operations': 4.6.1(graphql@16.12.0) - '@graphql-codegen/visitor-plugin-common': 5.8.0(graphql@16.12.0) - '@graphql-tools/documents': 1.0.1(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - '@graphql-typed-document-node/core': 3.2.0(graphql@16.12.0) - graphql: 16.12.0 + '@graphql-codegen/client-preset@4.8.3(graphql@16.14.2)': + dependencies: + '@babel/helper-plugin-utils': 7.29.7 + '@babel/template': 7.29.7 + '@graphql-codegen/add': 5.0.3(graphql@16.14.2) + '@graphql-codegen/gql-tag-operations': 4.0.17(graphql@16.14.2) + '@graphql-codegen/plugin-helpers': 5.1.1(graphql@16.14.2) + '@graphql-codegen/typed-document-node': 5.1.2(graphql@16.14.2) + '@graphql-codegen/typescript': 4.1.6(graphql@16.14.2) + '@graphql-codegen/typescript-operations': 4.6.1(graphql@16.14.2) + '@graphql-codegen/visitor-plugin-common': 5.8.0(graphql@16.14.2) + '@graphql-tools/documents': 1.0.1(graphql@16.14.2) + '@graphql-tools/utils': 10.11.0(graphql@16.14.2) + '@graphql-typed-document-node/core': 3.2.0(graphql@16.14.2) + graphql: 16.14.2 tslib: 2.6.3 - transitivePeerDependencies: - - encoding - '@graphql-codegen/core@4.0.2(graphql@16.12.0)': + '@graphql-codegen/core@4.0.2(graphql@16.14.2)': dependencies: - '@graphql-codegen/plugin-helpers': 5.1.1(graphql@16.12.0) - '@graphql-tools/schema': 10.0.30(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - graphql: 16.12.0 + '@graphql-codegen/plugin-helpers': 5.1.1(graphql@16.14.2) + '@graphql-tools/schema': 10.0.33(graphql@16.14.2) + '@graphql-tools/utils': 10.11.0(graphql@16.14.2) + graphql: 16.14.2 tslib: 2.6.3 - '@graphql-codegen/gql-tag-operations@4.0.17(graphql@16.12.0)': + '@graphql-codegen/gql-tag-operations@4.0.17(graphql@16.14.2)': dependencies: - '@graphql-codegen/plugin-helpers': 5.1.1(graphql@16.12.0) - '@graphql-codegen/visitor-plugin-common': 5.8.0(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) + '@graphql-codegen/plugin-helpers': 5.1.1(graphql@16.14.2) + '@graphql-codegen/visitor-plugin-common': 5.8.0(graphql@16.14.2) + '@graphql-tools/utils': 10.11.0(graphql@16.14.2) auto-bind: 4.0.0 - graphql: 16.12.0 + graphql: 16.14.2 tslib: 2.6.3 - transitivePeerDependencies: - - encoding - '@graphql-codegen/introspection@4.0.3(graphql@16.12.0)': + '@graphql-codegen/introspection@4.0.3(graphql@16.14.2)': dependencies: - '@graphql-codegen/plugin-helpers': 5.1.1(graphql@16.12.0) - '@graphql-codegen/visitor-plugin-common': 5.8.0(graphql@16.12.0) - graphql: 16.12.0 + '@graphql-codegen/plugin-helpers': 5.1.1(graphql@16.14.2) + '@graphql-codegen/visitor-plugin-common': 5.8.0(graphql@16.14.2) + graphql: 16.14.2 tslib: 2.6.3 - transitivePeerDependencies: - - encoding - '@graphql-codegen/plugin-helpers@5.1.1(graphql@16.12.0)': + '@graphql-codegen/plugin-helpers@5.1.1(graphql@16.14.2)': dependencies: - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) + '@graphql-tools/utils': 10.11.0(graphql@16.14.2) change-case-all: 1.0.15 common-tags: 1.8.2 - graphql: 16.12.0 + graphql: 16.14.2 import-from: 4.0.0 lodash: 4.18.1 tslib: 2.6.3 - '@graphql-codegen/schema-ast@4.1.0(graphql@16.12.0)': + '@graphql-codegen/schema-ast@4.1.0(graphql@16.14.2)': dependencies: - '@graphql-codegen/plugin-helpers': 5.1.1(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - graphql: 16.12.0 + '@graphql-codegen/plugin-helpers': 5.1.1(graphql@16.14.2) + '@graphql-tools/utils': 10.11.0(graphql@16.14.2) + graphql: 16.14.2 tslib: 2.6.3 - '@graphql-codegen/typed-document-node@5.1.2(graphql@16.12.0)': + '@graphql-codegen/typed-document-node@5.1.2(graphql@16.14.2)': dependencies: - '@graphql-codegen/plugin-helpers': 5.1.1(graphql@16.12.0) - '@graphql-codegen/visitor-plugin-common': 5.8.0(graphql@16.12.0) + '@graphql-codegen/plugin-helpers': 5.1.1(graphql@16.14.2) + '@graphql-codegen/visitor-plugin-common': 5.8.0(graphql@16.14.2) auto-bind: 4.0.0 change-case-all: 1.0.15 - graphql: 16.12.0 + graphql: 16.14.2 tslib: 2.6.3 - transitivePeerDependencies: - - encoding - '@graphql-codegen/typescript-operations@4.6.1(graphql@16.12.0)': + '@graphql-codegen/typescript-operations@4.6.1(graphql@16.14.2)': dependencies: - '@graphql-codegen/plugin-helpers': 5.1.1(graphql@16.12.0) - '@graphql-codegen/typescript': 4.1.6(graphql@16.12.0) - '@graphql-codegen/visitor-plugin-common': 5.8.0(graphql@16.12.0) + '@graphql-codegen/plugin-helpers': 5.1.1(graphql@16.14.2) + '@graphql-codegen/typescript': 4.1.6(graphql@16.14.2) + '@graphql-codegen/visitor-plugin-common': 5.8.0(graphql@16.14.2) auto-bind: 4.0.0 - graphql: 16.12.0 + graphql: 16.14.2 tslib: 2.6.3 - transitivePeerDependencies: - - encoding - '@graphql-codegen/typescript-resolvers@4.5.2(graphql@16.12.0)': + '@graphql-codegen/typescript-resolvers@4.5.2(graphql@16.14.2)': dependencies: - '@graphql-codegen/plugin-helpers': 5.1.1(graphql@16.12.0) - '@graphql-codegen/typescript': 4.1.6(graphql@16.12.0) - '@graphql-codegen/visitor-plugin-common': 5.8.0(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) + '@graphql-codegen/plugin-helpers': 5.1.1(graphql@16.14.2) + '@graphql-codegen/typescript': 4.1.6(graphql@16.14.2) + '@graphql-codegen/visitor-plugin-common': 5.8.0(graphql@16.14.2) + '@graphql-tools/utils': 10.11.0(graphql@16.14.2) auto-bind: 4.0.0 - graphql: 16.12.0 + graphql: 16.14.2 tslib: 2.6.3 - transitivePeerDependencies: - - encoding - '@graphql-codegen/typescript@4.1.6(graphql@16.12.0)': + '@graphql-codegen/typescript@4.1.6(graphql@16.14.2)': dependencies: - '@graphql-codegen/plugin-helpers': 5.1.1(graphql@16.12.0) - '@graphql-codegen/schema-ast': 4.1.0(graphql@16.12.0) - '@graphql-codegen/visitor-plugin-common': 5.8.0(graphql@16.12.0) + '@graphql-codegen/plugin-helpers': 5.1.1(graphql@16.14.2) + '@graphql-codegen/schema-ast': 4.1.0(graphql@16.14.2) + '@graphql-codegen/visitor-plugin-common': 5.8.0(graphql@16.14.2) auto-bind: 4.0.0 - graphql: 16.12.0 + graphql: 16.14.2 tslib: 2.6.3 - transitivePeerDependencies: - - encoding - '@graphql-codegen/visitor-plugin-common@5.8.0(graphql@16.12.0)': + '@graphql-codegen/visitor-plugin-common@5.8.0(graphql@16.14.2)': dependencies: - '@graphql-codegen/plugin-helpers': 5.1.1(graphql@16.12.0) - '@graphql-tools/optimize': 2.0.0(graphql@16.12.0) - '@graphql-tools/relay-operation-optimizer': 7.0.26(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) + '@graphql-codegen/plugin-helpers': 5.1.1(graphql@16.14.2) + '@graphql-tools/optimize': 2.0.0(graphql@16.14.2) + '@graphql-tools/relay-operation-optimizer': 7.1.4(graphql@16.14.2) + '@graphql-tools/utils': 10.11.0(graphql@16.14.2) auto-bind: 4.0.0 change-case-all: 1.0.15 dependency-graph: 0.11.0 - graphql: 16.12.0 - graphql-tag: 2.12.6(graphql@16.12.0) + graphql: 16.14.2 + graphql-tag: 2.12.6(graphql@16.14.2) parse-filepath: 1.0.2 tslib: 2.6.3 - transitivePeerDependencies: - - encoding '@graphql-hive/signal@1.0.0': {} - '@graphql-tools/apollo-engine-loader@8.0.27(graphql@16.12.0)': + '@graphql-hive/signal@2.0.0': {} + + '@graphql-tools/apollo-engine-loader@8.0.30(graphql@16.14.2)': dependencies: - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) + '@graphql-tools/utils': 11.1.0(graphql@16.14.2) '@whatwg-node/fetch': 0.10.13 - graphql: 16.12.0 - sync-fetch: 0.6.0-2 + graphql: 16.14.2 + sync-fetch: 0.6.0 tslib: 2.8.1 - '@graphql-tools/batch-execute@8.5.1(graphql@16.12.0)': + '@graphql-tools/batch-execute@10.0.8(graphql@16.14.2)': dependencies: - '@graphql-tools/utils': 8.9.0(graphql@16.12.0) - dataloader: 2.1.0 - graphql: 16.12.0 + '@graphql-tools/utils': 11.1.0(graphql@16.14.2) + '@whatwg-node/promise-helpers': 1.3.2 + dataloader: 2.2.3 + graphql: 16.14.2 tslib: 2.8.1 + + '@graphql-tools/batch-execute@8.5.1(graphql@16.14.2)': + dependencies: + '@graphql-tools/utils': 8.9.0(graphql@16.14.2) + dataloader: 2.1.0 + graphql: 16.14.2 + tslib: 2.4.1 value-or-promise: 1.0.11 - '@graphql-tools/batch-execute@9.0.19(graphql@16.12.0)': + '@graphql-tools/batch-execute@9.0.19(graphql@16.14.2)': dependencies: - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) + '@graphql-tools/utils': 10.11.0(graphql@16.14.2) '@whatwg-node/promise-helpers': 1.3.2 dataloader: 2.2.3 - graphql: 16.12.0 + graphql: 16.14.2 tslib: 2.8.1 - '@graphql-tools/code-file-loader@8.1.27(graphql@16.12.0)': + '@graphql-tools/code-file-loader@8.1.32(graphql@16.14.2)': dependencies: - '@graphql-tools/graphql-tag-pluck': 8.3.26(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) + '@graphql-tools/graphql-tag-pluck': 8.3.31(graphql@16.14.2) + '@graphql-tools/utils': 11.1.0(graphql@16.14.2) globby: 11.1.0 - graphql: 16.12.0 + graphql: 16.14.2 tslib: 2.8.1 unixify: 1.0.0 transitivePeerDependencies: - supports-color - '@graphql-tools/delegate@10.2.23(graphql@16.12.0)': + '@graphql-tools/delegate@10.2.23(graphql@16.14.2)': dependencies: - '@graphql-tools/batch-execute': 9.0.19(graphql@16.12.0) - '@graphql-tools/executor': 1.5.0(graphql@16.12.0) - '@graphql-tools/schema': 10.0.30(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - '@repeaterjs/repeater': 3.0.6 + '@graphql-tools/batch-execute': 9.0.19(graphql@16.14.2) + '@graphql-tools/executor': 1.5.3(graphql@16.14.2) + '@graphql-tools/schema': 10.0.33(graphql@16.14.2) + '@graphql-tools/utils': 10.11.0(graphql@16.14.2) + '@repeaterjs/repeater': 3.1.0 '@whatwg-node/promise-helpers': 1.3.2 dataloader: 2.2.3 dset: 3.1.4 - graphql: 16.12.0 + graphql: 16.14.2 tslib: 2.8.1 - '@graphql-tools/delegate@8.8.1(graphql@16.12.0)': + '@graphql-tools/delegate@12.0.17(graphql@16.14.2)': dependencies: - '@graphql-tools/batch-execute': 8.5.1(graphql@16.12.0) - '@graphql-tools/schema': 8.5.1(graphql@16.12.0) - '@graphql-tools/utils': 8.9.0(graphql@16.12.0) + '@graphql-tools/batch-execute': 10.0.8(graphql@16.14.2) + '@graphql-tools/executor': 1.5.3(graphql@16.14.2) + '@graphql-tools/schema': 10.0.33(graphql@16.14.2) + '@graphql-tools/utils': 11.1.0(graphql@16.14.2) + '@repeaterjs/repeater': 3.1.0 + '@whatwg-node/promise-helpers': 1.3.2 + dataloader: 2.2.3 + graphql: 16.14.2 + tslib: 2.8.1 + + '@graphql-tools/delegate@8.8.1(graphql@16.14.2)': + dependencies: + '@graphql-tools/batch-execute': 8.5.1(graphql@16.14.2) + '@graphql-tools/schema': 8.5.1(graphql@16.14.2) + '@graphql-tools/utils': 8.9.0(graphql@16.14.2) dataloader: 2.1.0 - graphql: 16.12.0 + graphql: 16.14.2 tslib: 2.4.1 value-or-promise: 1.0.11 - '@graphql-tools/documents@1.0.1(graphql@16.12.0)': + '@graphql-tools/documents@1.0.1(graphql@16.14.2)': dependencies: - graphql: 16.12.0 + graphql: 16.14.2 lodash.sortby: 4.7.0 tslib: 2.8.1 - '@graphql-tools/executor-common@0.0.4(graphql@16.12.0)': + '@graphql-tools/executor-common@0.0.4(graphql@16.14.2)': dependencies: - '@envelop/core': 5.4.0 - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - graphql: 16.12.0 + '@envelop/core': 5.5.1 + '@graphql-tools/utils': 10.11.0(graphql@16.14.2) + graphql: 16.14.2 - '@graphql-tools/executor-common@0.0.6(graphql@16.12.0)': + '@graphql-tools/executor-common@0.0.6(graphql@16.14.2)': dependencies: - '@envelop/core': 5.4.0 - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - graphql: 16.12.0 + '@envelop/core': 5.5.1 + '@graphql-tools/utils': 10.11.0(graphql@16.14.2) + graphql: 16.14.2 - '@graphql-tools/executor-graphql-ws@2.0.7(graphql@16.12.0)': + '@graphql-tools/executor-common@1.0.6(graphql@16.14.2)': dependencies: - '@graphql-tools/executor-common': 0.0.6(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) + '@envelop/core': 5.5.1 + '@graphql-tools/utils': 11.1.0(graphql@16.14.2) + graphql: 16.14.2 + + '@graphql-tools/executor-graphql-ws@2.0.7(graphql@16.14.2)': + dependencies: + '@graphql-tools/executor-common': 0.0.6(graphql@16.14.2) + '@graphql-tools/utils': 10.11.0(graphql@16.14.2) '@whatwg-node/disposablestack': 0.0.6 - graphql: 16.12.0 - graphql-ws: 6.0.6(graphql@16.12.0)(ws@8.21.0) + graphql: 16.14.2 + graphql-ws: 6.0.8(graphql@16.14.2)(ws@8.21.0) isomorphic-ws: 5.0.0(ws@8.21.0) tslib: 2.8.1 ws: 8.21.0 @@ -16865,29 +17439,59 @@ snapshots: - '@fastify/websocket' - bufferutil - crossws - - uWebSockets.js - utf-8-validate - '@graphql-tools/executor-http@1.3.3(@types/node@22.19.15)(graphql@16.12.0)': + '@graphql-tools/executor-graphql-ws@3.1.5(graphql@16.14.2)': + dependencies: + '@graphql-tools/executor-common': 1.0.6(graphql@16.14.2) + '@graphql-tools/utils': 11.1.0(graphql@16.14.2) + '@whatwg-node/disposablestack': 0.0.6 + graphql: 16.14.2 + graphql-ws: 6.0.8(graphql@16.14.2)(ws@8.21.0) + isows: 1.0.7(ws@8.21.0) + tslib: 2.8.1 + ws: 8.21.0 + transitivePeerDependencies: + - '@fastify/websocket' + - bufferutil + - crossws + - utf-8-validate + + '@graphql-tools/executor-http@1.3.3(@types/node@22.19.20)(graphql@16.14.2)': dependencies: '@graphql-hive/signal': 1.0.0 - '@graphql-tools/executor-common': 0.0.4(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - '@repeaterjs/repeater': 3.0.6 + '@graphql-tools/executor-common': 0.0.4(graphql@16.14.2) + '@graphql-tools/utils': 10.11.0(graphql@16.14.2) + '@repeaterjs/repeater': 3.1.0 '@whatwg-node/disposablestack': 0.0.6 '@whatwg-node/fetch': 0.10.13 '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.12.0 - meros: 1.3.2(@types/node@22.19.15) + graphql: 16.14.2 + meros: 1.3.2(@types/node@22.19.20) tslib: 2.8.1 transitivePeerDependencies: - '@types/node' - '@graphql-tools/executor-legacy-ws@1.1.24(graphql@16.12.0)': + '@graphql-tools/executor-http@3.3.0(@types/node@22.19.20)(graphql@16.14.2)': dependencies: - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) + '@graphql-hive/signal': 2.0.0 + '@graphql-tools/executor-common': 1.0.6(graphql@16.14.2) + '@graphql-tools/utils': 11.1.0(graphql@16.14.2) + '@repeaterjs/repeater': 3.1.0 + '@whatwg-node/disposablestack': 0.0.6 + '@whatwg-node/fetch': 0.10.13 + '@whatwg-node/promise-helpers': 1.3.2 + graphql: 16.14.2 + meros: 1.3.2(@types/node@22.19.20) + tslib: 2.8.1 + transitivePeerDependencies: + - '@types/node' + + '@graphql-tools/executor-legacy-ws@1.1.28(graphql@16.14.2)': + dependencies: + '@graphql-tools/utils': 11.1.0(graphql@16.14.2) '@types/ws': 8.18.1 - graphql: 16.12.0 + graphql: 16.14.2 isomorphic-ws: 5.0.0(ws@8.21.0) tslib: 2.8.1 ws: 8.21.0 @@ -16895,21 +17499,21 @@ snapshots: - bufferutil - utf-8-validate - '@graphql-tools/executor@1.5.0(graphql@16.12.0)': + '@graphql-tools/executor@1.5.3(graphql@16.14.2)': dependencies: - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - '@graphql-typed-document-node/core': 3.2.0(graphql@16.12.0) - '@repeaterjs/repeater': 3.0.6 + '@graphql-tools/utils': 11.1.0(graphql@16.14.2) + '@graphql-typed-document-node/core': 3.2.0(graphql@16.14.2) + '@repeaterjs/repeater': 3.1.0 '@whatwg-node/disposablestack': 0.0.6 '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.12.0 + graphql: 16.14.2 tslib: 2.8.1 - '@graphql-tools/git-loader@8.0.31(graphql@16.12.0)': + '@graphql-tools/git-loader@8.0.36(graphql@16.14.2)': dependencies: - '@graphql-tools/graphql-tag-pluck': 8.3.26(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - graphql: 16.12.0 + '@graphql-tools/graphql-tag-pluck': 8.3.31(graphql@16.14.2) + '@graphql-tools/utils': 11.1.0(graphql@16.14.2) + graphql: 16.14.2 is-glob: 4.0.3 micromatch: 4.0.8 tslib: 2.8.1 @@ -16917,98 +17521,93 @@ snapshots: transitivePeerDependencies: - supports-color - '@graphql-tools/github-loader@8.0.22(@types/node@22.19.15)(graphql@16.12.0)': + '@graphql-tools/github-loader@8.0.22(@types/node@22.19.20)(graphql@16.14.2)': dependencies: - '@graphql-tools/executor-http': 1.3.3(@types/node@22.19.15)(graphql@16.12.0) - '@graphql-tools/graphql-tag-pluck': 8.3.26(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) + '@graphql-tools/executor-http': 1.3.3(@types/node@22.19.20)(graphql@16.14.2) + '@graphql-tools/graphql-tag-pluck': 8.3.31(graphql@16.14.2) + '@graphql-tools/utils': 10.11.0(graphql@16.14.2) '@whatwg-node/fetch': 0.10.13 '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.12.0 + graphql: 16.14.2 sync-fetch: 0.6.0-2 tslib: 2.8.1 transitivePeerDependencies: - '@types/node' - supports-color - '@graphql-tools/graphql-file-loader@8.1.8(graphql@16.12.0)': + '@graphql-tools/graphql-file-loader@8.1.14(graphql@16.14.2)': dependencies: - '@graphql-tools/import': 7.1.8(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) + '@graphql-tools/import': 7.1.14(graphql@16.14.2) + '@graphql-tools/utils': 11.1.0(graphql@16.14.2) globby: 11.1.0 - graphql: 16.12.0 + graphql: 16.14.2 tslib: 2.8.1 unixify: 1.0.0 - transitivePeerDependencies: - - supports-color - '@graphql-tools/graphql-tag-pluck@8.3.26(graphql@16.12.0)': + '@graphql-tools/graphql-tag-pluck@8.3.31(graphql@16.14.2)': dependencies: '@babel/core': 7.29.6 - '@babel/parser': 7.29.2 - '@babel/plugin-syntax-import-assertions': 7.27.1(@babel/core@7.29.6) - '@babel/traverse': 7.29.0 - '@babel/types': 7.29.0 - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - graphql: 16.12.0 + '@babel/parser': 7.29.7 + '@babel/plugin-syntax-import-assertions': 7.29.7(@babel/core@7.29.6) + '@babel/traverse': 7.29.7 + '@babel/types': 7.29.7 + '@graphql-tools/utils': 11.1.0(graphql@16.14.2) + graphql: 16.14.2 tslib: 2.8.1 transitivePeerDependencies: - supports-color - '@graphql-tools/import@7.1.8(graphql@16.12.0)': + '@graphql-tools/import@7.1.14(graphql@16.14.2)': dependencies: - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - '@theguild/federation-composition': 0.21.0(graphql@16.12.0) - graphql: 16.12.0 + '@graphql-tools/utils': 11.1.0(graphql@16.14.2) + graphql: 16.14.2 resolve-from: 5.0.0 tslib: 2.8.1 - transitivePeerDependencies: - - supports-color - '@graphql-tools/json-file-loader@8.0.25(graphql@16.12.0)': + '@graphql-tools/json-file-loader@8.0.28(graphql@16.14.2)': dependencies: - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) + '@graphql-tools/utils': 11.1.0(graphql@16.14.2) globby: 11.1.0 - graphql: 16.12.0 + graphql: 16.14.2 tslib: 2.8.1 unixify: 1.0.0 - '@graphql-tools/load@8.1.7(graphql@16.12.0)': + '@graphql-tools/load@8.1.10(graphql@16.14.2)': dependencies: - '@graphql-tools/schema': 10.0.30(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - graphql: 16.12.0 + '@graphql-tools/schema': 10.0.33(graphql@16.14.2) + '@graphql-tools/utils': 11.1.0(graphql@16.14.2) + graphql: 16.14.2 p-limit: 3.1.0 tslib: 2.8.1 - '@graphql-tools/merge@8.3.1(graphql@16.12.0)': + '@graphql-tools/merge@8.3.1(graphql@16.14.2)': dependencies: - '@graphql-tools/utils': 8.9.0(graphql@16.12.0) - graphql: 16.12.0 + '@graphql-tools/utils': 8.9.0(graphql@16.14.2) + graphql: 16.14.2 tslib: 2.8.1 - '@graphql-tools/merge@9.1.6(graphql@16.12.0)': + '@graphql-tools/merge@9.1.9(graphql@16.14.2)': dependencies: - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - graphql: 16.12.0 + '@graphql-tools/utils': 11.1.0(graphql@16.14.2) + graphql: 16.14.2 tslib: 2.8.1 - '@graphql-tools/optimize@2.0.0(graphql@16.12.0)': + '@graphql-tools/optimize@2.0.0(graphql@16.14.2)': dependencies: - graphql: 16.12.0 - tslib: 2.8.1 + graphql: 16.14.2 + tslib: 2.6.3 - '@graphql-tools/prisma-loader@8.0.17(@types/node@22.19.15)(graphql@16.12.0)': + '@graphql-tools/prisma-loader@8.0.17(@types/node@22.19.20)(graphql@16.14.2)': dependencies: - '@graphql-tools/url-loader': 8.0.33(@types/node@22.19.15)(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) + '@graphql-tools/url-loader': 8.0.33(@types/node@22.19.20)(graphql@16.14.2) + '@graphql-tools/utils': 10.11.0(graphql@16.14.2) '@types/js-yaml': 4.0.9 '@whatwg-node/fetch': 0.10.13 chalk: 4.1.2 debug: 4.4.3(supports-color@8.1.1) dotenv: 16.6.1 - graphql: 16.12.0 - graphql-request: 6.1.0(graphql@16.12.0) + graphql: 16.14.2 + graphql-request: 6.1.0(graphql@16.14.2) http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 jose: 5.10.0 @@ -17024,44 +17623,41 @@ snapshots: - crossws - encoding - supports-color - - uWebSockets.js - utf-8-validate - '@graphql-tools/relay-operation-optimizer@7.0.26(graphql@16.12.0)': + '@graphql-tools/relay-operation-optimizer@7.1.4(graphql@16.14.2)': dependencies: - '@ardatan/relay-compiler': 12.0.3(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - graphql: 16.12.0 - tslib: 2.8.1 - transitivePeerDependencies: - - encoding + '@ardatan/relay-compiler': 13.0.1(graphql@16.14.2) + '@graphql-tools/utils': 11.1.0(graphql@16.14.2) + graphql: 16.14.2 + tslib: 2.6.3 - '@graphql-tools/schema@10.0.30(graphql@16.12.0)': + '@graphql-tools/schema@10.0.33(graphql@16.14.2)': dependencies: - '@graphql-tools/merge': 9.1.6(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - graphql: 16.12.0 + '@graphql-tools/merge': 9.1.9(graphql@16.14.2) + '@graphql-tools/utils': 11.1.0(graphql@16.14.2) + graphql: 16.14.2 tslib: 2.8.1 - '@graphql-tools/schema@8.5.1(graphql@16.12.0)': + '@graphql-tools/schema@8.5.1(graphql@16.14.2)': dependencies: - '@graphql-tools/merge': 8.3.1(graphql@16.12.0) - '@graphql-tools/utils': 8.9.0(graphql@16.12.0) - graphql: 16.12.0 + '@graphql-tools/merge': 8.3.1(graphql@16.14.2) + '@graphql-tools/utils': 8.9.0(graphql@16.14.2) + graphql: 16.14.2 tslib: 2.8.1 value-or-promise: 1.0.11 - '@graphql-tools/url-loader@8.0.33(@types/node@22.19.15)(graphql@16.12.0)': + '@graphql-tools/url-loader@8.0.33(@types/node@22.19.20)(graphql@16.14.2)': dependencies: - '@graphql-tools/executor-graphql-ws': 2.0.7(graphql@16.12.0) - '@graphql-tools/executor-http': 1.3.3(@types/node@22.19.15)(graphql@16.12.0) - '@graphql-tools/executor-legacy-ws': 1.1.24(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - '@graphql-tools/wrap': 10.1.4(graphql@16.12.0) + '@graphql-tools/executor-graphql-ws': 2.0.7(graphql@16.14.2) + '@graphql-tools/executor-http': 1.3.3(@types/node@22.19.20)(graphql@16.14.2) + '@graphql-tools/executor-legacy-ws': 1.1.28(graphql@16.14.2) + '@graphql-tools/utils': 10.11.0(graphql@16.14.2) + '@graphql-tools/wrap': 10.1.4(graphql@16.14.2) '@types/ws': 8.18.1 '@whatwg-node/fetch': 0.10.13 '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.12.0 + graphql: 16.14.2 isomorphic-ws: 5.0.0(ws@8.21.0) sync-fetch: 0.6.0-2 tslib: 2.8.1 @@ -17071,41 +17667,79 @@ snapshots: - '@types/node' - bufferutil - crossws - - uWebSockets.js - utf-8-validate - '@graphql-tools/utils@10.11.0(graphql@16.12.0)': + '@graphql-tools/url-loader@9.1.2(@types/node@22.19.20)(graphql@16.14.2)': dependencies: - '@graphql-typed-document-node/core': 3.2.0(graphql@16.12.0) + '@graphql-tools/executor-graphql-ws': 3.1.5(graphql@16.14.2) + '@graphql-tools/executor-http': 3.3.0(@types/node@22.19.20)(graphql@16.14.2) + '@graphql-tools/executor-legacy-ws': 1.1.28(graphql@16.14.2) + '@graphql-tools/utils': 11.1.0(graphql@16.14.2) + '@graphql-tools/wrap': 11.1.16(graphql@16.14.2) + '@types/ws': 8.18.1 + '@whatwg-node/fetch': 0.10.13 + '@whatwg-node/promise-helpers': 1.3.2 + graphql: 16.14.2 + isomorphic-ws: 5.0.0(ws@8.21.0) + sync-fetch: 0.6.0 + tslib: 2.8.1 + ws: 8.21.0 + transitivePeerDependencies: + - '@fastify/websocket' + - '@types/node' + - bufferutil + - crossws + - utf-8-validate + + '@graphql-tools/utils@10.11.0(graphql@16.14.2)': + dependencies: + '@graphql-typed-document-node/core': 3.2.0(graphql@16.14.2) + '@whatwg-node/promise-helpers': 1.3.2 + cross-inspect: 1.0.1 + graphql: 16.14.2 + tslib: 2.8.1 + + '@graphql-tools/utils@11.1.0(graphql@16.14.2)': + dependencies: + '@graphql-typed-document-node/core': 3.2.0(graphql@16.14.2) '@whatwg-node/promise-helpers': 1.3.2 cross-inspect: 1.0.1 - graphql: 16.12.0 + graphql: 16.14.2 tslib: 2.8.1 - '@graphql-tools/utils@8.9.0(graphql@16.12.0)': + '@graphql-tools/utils@8.9.0(graphql@16.14.2)': dependencies: - graphql: 16.12.0 + graphql: 16.14.2 + tslib: 2.8.1 + + '@graphql-tools/wrap@10.1.4(graphql@16.14.2)': + dependencies: + '@graphql-tools/delegate': 10.2.23(graphql@16.14.2) + '@graphql-tools/schema': 10.0.33(graphql@16.14.2) + '@graphql-tools/utils': 10.11.0(graphql@16.14.2) + '@whatwg-node/promise-helpers': 1.3.2 + graphql: 16.14.2 tslib: 2.8.1 - '@graphql-tools/wrap@10.1.4(graphql@16.12.0)': + '@graphql-tools/wrap@11.1.16(graphql@16.14.2)': dependencies: - '@graphql-tools/delegate': 10.2.23(graphql@16.12.0) - '@graphql-tools/schema': 10.0.30(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) + '@graphql-tools/delegate': 12.0.17(graphql@16.14.2) + '@graphql-tools/schema': 10.0.33(graphql@16.14.2) + '@graphql-tools/utils': 11.1.0(graphql@16.14.2) '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.12.0 + graphql: 16.14.2 tslib: 2.8.1 - '@graphql-typed-document-node/core@3.2.0(graphql@16.12.0)': + '@graphql-typed-document-node/core@3.2.0(graphql@16.14.2)': dependencies: - graphql: 16.12.0 + graphql: 16.14.2 '@grpc/grpc-js@1.14.4': dependencies: - '@grpc/proto-loader': 0.8.0 + '@grpc/proto-loader': 0.8.1 '@js-sdsl/ordered-map': 4.4.2 - '@grpc/proto-loader@0.8.0': + '@grpc/proto-loader@0.8.1': dependencies: lodash.camelcase: 4.3.0 long: 5.3.2 @@ -17128,42 +17762,44 @@ snapshots: dependencies: '@hapi/hoek': 11.0.7 - '@inquirer/external-editor@1.0.3(@types/node@22.19.15)': + '@inquirer/external-editor@1.0.3(@types/node@22.19.20)': dependencies: chardet: 2.1.1 - iconv-lite: 0.7.0 + iconv-lite: 0.7.2 optionalDependencies: - '@types/node': 22.19.15 + '@types/node': 22.19.20 '@isaacs/cliui@8.0.2': dependencies: string-width: 5.1.2 string-width-cjs: string-width@4.2.3 - strip-ansi: 7.1.2 + strip-ansi: 7.2.0 strip-ansi-cjs: strip-ansi@6.0.1 wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 - '@istanbuljs/schema@0.1.3': {} + '@isaacs/cliui@9.0.0': {} + + '@istanbuljs/schema@0.1.6': {} '@jest/schemas@29.6.3': dependencies: - '@sinclair/typebox': 0.27.8 + '@sinclair/typebox': 0.27.10 '@jest/types@29.6.3': dependencies: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 24.10.1 + '@types/node': 25.9.2 '@types/yargs': 17.0.35 chalk: 4.1.2 - '@joshwooding/vite-plugin-react-docgen-typescript@0.7.0(typescript@6.0.3)(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))': + '@joshwooding/vite-plugin-react-docgen-typescript@0.7.0(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3))': dependencies: glob: 13.0.6 react-docgen-typescript: 2.4.0(typescript@6.0.3) - 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) + vite: 8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3) optionalDependencies: typescript: 6.0.3 @@ -17191,7 +17827,7 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 - '@js-joda/core@5.6.5': {} + '@js-joda/core@5.7.0': {} '@js-sdsl/ordered-map@4.4.2': {} @@ -17199,14 +17835,82 @@ snapshots: dependencies: tslib: 2.8.1 + '@jsonjoy.com/base64@17.67.0(tslib@2.8.1)': + dependencies: + tslib: 2.8.1 + '@jsonjoy.com/buffers@1.2.1(tslib@2.8.1)': dependencies: tslib: 2.8.1 + '@jsonjoy.com/buffers@17.67.0(tslib@2.8.1)': + dependencies: + tslib: 2.8.1 + '@jsonjoy.com/codegen@1.0.0(tslib@2.8.1)': dependencies: tslib: 2.8.1 + '@jsonjoy.com/codegen@17.67.0(tslib@2.8.1)': + dependencies: + tslib: 2.8.1 + + '@jsonjoy.com/fs-core@4.57.6(tslib@2.8.1)': + dependencies: + '@jsonjoy.com/fs-node-builtins': 4.57.6(tslib@2.8.1) + '@jsonjoy.com/fs-node-utils': 4.57.6(tslib@2.8.1) + thingies: 2.6.0(tslib@2.8.1) + tslib: 2.8.1 + + '@jsonjoy.com/fs-fsa@4.57.6(tslib@2.8.1)': + dependencies: + '@jsonjoy.com/fs-core': 4.57.6(tslib@2.8.1) + '@jsonjoy.com/fs-node-builtins': 4.57.6(tslib@2.8.1) + '@jsonjoy.com/fs-node-utils': 4.57.6(tslib@2.8.1) + thingies: 2.6.0(tslib@2.8.1) + tslib: 2.8.1 + + '@jsonjoy.com/fs-node-builtins@4.57.6(tslib@2.8.1)': + dependencies: + tslib: 2.8.1 + + '@jsonjoy.com/fs-node-to-fsa@4.57.6(tslib@2.8.1)': + dependencies: + '@jsonjoy.com/fs-fsa': 4.57.6(tslib@2.8.1) + '@jsonjoy.com/fs-node-builtins': 4.57.6(tslib@2.8.1) + '@jsonjoy.com/fs-node-utils': 4.57.6(tslib@2.8.1) + tslib: 2.8.1 + + '@jsonjoy.com/fs-node-utils@4.57.6(tslib@2.8.1)': + dependencies: + '@jsonjoy.com/fs-node-builtins': 4.57.6(tslib@2.8.1) + tslib: 2.8.1 + + '@jsonjoy.com/fs-node@4.57.6(tslib@2.8.1)': + dependencies: + '@jsonjoy.com/fs-core': 4.57.6(tslib@2.8.1) + '@jsonjoy.com/fs-node-builtins': 4.57.6(tslib@2.8.1) + '@jsonjoy.com/fs-node-utils': 4.57.6(tslib@2.8.1) + '@jsonjoy.com/fs-print': 4.57.6(tslib@2.8.1) + '@jsonjoy.com/fs-snapshot': 4.57.6(tslib@2.8.1) + glob-to-regex.js: 1.2.0(tslib@2.8.1) + thingies: 2.6.0(tslib@2.8.1) + tslib: 2.8.1 + + '@jsonjoy.com/fs-print@4.57.6(tslib@2.8.1)': + dependencies: + '@jsonjoy.com/fs-node-utils': 4.57.6(tslib@2.8.1) + tree-dump: 1.1.0(tslib@2.8.1) + tslib: 2.8.1 + + '@jsonjoy.com/fs-snapshot@4.57.6(tslib@2.8.1)': + dependencies: + '@jsonjoy.com/buffers': 17.67.0(tslib@2.8.1) + '@jsonjoy.com/fs-node-utils': 4.57.6(tslib@2.8.1) + '@jsonjoy.com/json-pack': 17.67.0(tslib@2.8.1) + '@jsonjoy.com/util': 17.67.0(tslib@2.8.1) + tslib: 2.8.1 + '@jsonjoy.com/json-pack@1.21.0(tslib@2.8.1)': dependencies: '@jsonjoy.com/base64': 1.1.2(tslib@2.8.1) @@ -17215,7 +17919,19 @@ snapshots: '@jsonjoy.com/json-pointer': 1.0.2(tslib@2.8.1) '@jsonjoy.com/util': 1.9.0(tslib@2.8.1) hyperdyperid: 1.2.0 - thingies: 2.5.0(tslib@2.8.1) + thingies: 2.6.0(tslib@2.8.1) + tree-dump: 1.1.0(tslib@2.8.1) + tslib: 2.8.1 + + '@jsonjoy.com/json-pack@17.67.0(tslib@2.8.1)': + dependencies: + '@jsonjoy.com/base64': 17.67.0(tslib@2.8.1) + '@jsonjoy.com/buffers': 17.67.0(tslib@2.8.1) + '@jsonjoy.com/codegen': 17.67.0(tslib@2.8.1) + '@jsonjoy.com/json-pointer': 17.67.0(tslib@2.8.1) + '@jsonjoy.com/util': 17.67.0(tslib@2.8.1) + hyperdyperid: 1.2.0 + thingies: 2.6.0(tslib@2.8.1) tree-dump: 1.1.0(tslib@2.8.1) tslib: 2.8.1 @@ -17225,22 +17941,33 @@ snapshots: '@jsonjoy.com/util': 1.9.0(tslib@2.8.1) tslib: 2.8.1 + '@jsonjoy.com/json-pointer@17.67.0(tslib@2.8.1)': + dependencies: + '@jsonjoy.com/util': 17.67.0(tslib@2.8.1) + tslib: 2.8.1 + '@jsonjoy.com/util@1.9.0(tslib@2.8.1)': dependencies: '@jsonjoy.com/buffers': 1.2.1(tslib@2.8.1) '@jsonjoy.com/codegen': 1.0.0(tslib@2.8.1) tslib: 2.8.1 + '@jsonjoy.com/util@17.67.0(tslib@2.8.1)': + dependencies: + '@jsonjoy.com/buffers': 17.67.0(tslib@2.8.1) + '@jsonjoy.com/codegen': 17.67.0(tslib@2.8.1) + tslib: 2.8.1 + '@leichtgewicht/ip-codec@2.0.5': {} '@lucaspaganini/value-objects@1.3.1': {} '@mdx-js/mdx@3.1.1': dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 '@types/estree-jsx': 1.0.5 '@types/hast': 3.0.4 - '@types/mdx': 2.0.13 + '@types/mdx': 2.0.14 acorn: 8.16.0 collapse-white-space: 2.1.0 devlop: 1.1.0 @@ -17260,42 +17987,35 @@ snapshots: unified: 11.0.5 unist-util-position-from-estree: 2.0.0 unist-util-stringify-position: 4.0.0 - unist-util-visit: 5.0.0 + unist-util-visit: 5.1.0 vfile: 6.0.3 transitivePeerDependencies: - supports-color - '@mdx-js/react@3.1.1(@types/react@19.2.7)(react@19.2.0)': + '@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7)': dependencies: - '@types/mdx': 2.0.13 - '@types/react': 19.2.7 - react: 19.2.0 + '@types/mdx': 2.0.14 + '@types/react': 19.2.17 + react: 19.2.7 '@microsoft/applicationinsights-web-snippet@1.0.1': {} - '@mongodb-js/saslprep@1.3.2': + '@mongodb-js/saslprep@1.4.11': dependencies: sparse-bitfield: 3.0.3 - '@napi-rs/wasm-runtime@1.1.2(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': - dependencies: - '@emnapi/core': 1.10.0 - '@emnapi/runtime': 1.10.0 - '@tybys/wasm-util': 0.10.1 - optional: true - - '@napi-rs/wasm-runtime@1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': + '@napi-rs/wasm-runtime@1.1.5(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': dependencies: '@emnapi/core': 1.10.0 '@emnapi/runtime': 1.10.0 - '@tybys/wasm-util': 0.10.1 + '@tybys/wasm-util': 0.10.2 optional: true - '@napi-rs/wasm-runtime@1.1.4(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)': + '@napi-rs/wasm-runtime@1.1.5(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)': dependencies: '@emnapi/core': 1.9.2 '@emnapi/runtime': 1.9.2 - '@tybys/wasm-util': 0.10.1 + '@tybys/wasm-util': 0.10.2 optional: true '@neoconfetti/react@1.0.0': {} @@ -17304,7 +18024,7 @@ snapshots: '@noble/hashes@1.8.0': {} - '@nodable/entities@2.1.0': {} + '@nodable/entities@2.1.1': {} '@nodelib/fs.scandir@2.1.5': dependencies: @@ -17316,12 +18036,16 @@ snapshots: '@nodelib/fs.walk@1.2.8': dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.19.1 + fastq: 1.20.1 '@opentelemetry/api-logs@0.200.0': dependencies: '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs@0.211.0': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs@0.52.1': dependencies: '@opentelemetry/api': 1.9.0 @@ -17346,7 +18070,7 @@ snapshots: '@opentelemetry/api': 1.9.0 '@opentelemetry/semantic-conventions': 1.28.0 - '@opentelemetry/core@2.2.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/core@2.7.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/semantic-conventions': 1.41.1 @@ -17481,7 +18205,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.8.1 + semver: 7.8.4 transitivePeerDependencies: - supports-color @@ -17505,6 +18229,15 @@ snapshots: transitivePeerDependencies: - supports-color + '@opentelemetry/instrumentation@0.211.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.211.0 + import-in-the-middle: 2.0.6 + require-in-the-middle: 8.0.1 + transitivePeerDependencies: + - supports-color + '@opentelemetry/instrumentation@0.52.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -17512,7 +18245,7 @@ snapshots: '@types/shimmer': 1.2.0 import-in-the-middle: 1.15.0 require-in-the-middle: 7.5.2 - semver: 7.8.1 + semver: 7.8.4 shimmer: 1.2.1 transitivePeerDependencies: - supports-color @@ -17524,7 +18257,7 @@ snapshots: '@types/shimmer': 1.2.0 import-in-the-middle: 1.15.0 require-in-the-middle: 7.5.2 - semver: 7.8.1 + semver: 7.8.4 shimmer: 1.2.1 transitivePeerDependencies: - supports-color @@ -17570,10 +18303,10 @@ snapshots: '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.28.0 - '@opentelemetry/resources@2.2.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/resources@2.7.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.7.1(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.41.1 '@opentelemetry/sdk-logs@0.57.2(@opentelemetry/api@1.9.0)': @@ -17622,11 +18355,11 @@ snapshots: '@opentelemetry/resources': 1.30.1(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.28.0 - '@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/sdk-trace-base@2.7.1(@opentelemetry/api@1.9.0)': dependencies: '@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/core': 2.7.1(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.7.1(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.41.1 '@opentelemetry/sdk-trace-node@1.30.1(@opentelemetry/api@1.9.0)': @@ -17637,13 +18370,13 @@ snapshots: '@opentelemetry/propagator-b3': 1.30.1(@opentelemetry/api@1.9.0) '@opentelemetry/propagator-jaeger': 1.30.1(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-trace-base': 1.30.1(@opentelemetry/api@1.9.0) - semver: 7.8.1 + semver: 7.8.4 - '@opentelemetry/sdk-trace-web@2.2.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/sdk-trace-web@2.7.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.7.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 2.7.1(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions@1.25.1': {} @@ -17651,141 +18384,140 @@ snapshots: '@opentelemetry/semantic-conventions@1.41.1': {} - '@oxc-parser/binding-android-arm-eabi@0.121.0': - optional: true - '@oxc-parser/binding-android-arm-eabi@0.127.0': optional: true - '@oxc-parser/binding-android-arm64@0.121.0': + '@oxc-parser/binding-android-arm-eabi@0.130.0': optional: true '@oxc-parser/binding-android-arm64@0.127.0': optional: true - '@oxc-parser/binding-darwin-arm64@0.121.0': + '@oxc-parser/binding-android-arm64@0.130.0': optional: true '@oxc-parser/binding-darwin-arm64@0.127.0': optional: true - '@oxc-parser/binding-darwin-x64@0.121.0': + '@oxc-parser/binding-darwin-arm64@0.130.0': optional: true '@oxc-parser/binding-darwin-x64@0.127.0': optional: true - '@oxc-parser/binding-freebsd-x64@0.121.0': + '@oxc-parser/binding-darwin-x64@0.130.0': optional: true '@oxc-parser/binding-freebsd-x64@0.127.0': optional: true - '@oxc-parser/binding-linux-arm-gnueabihf@0.121.0': + '@oxc-parser/binding-freebsd-x64@0.130.0': optional: true '@oxc-parser/binding-linux-arm-gnueabihf@0.127.0': optional: true - '@oxc-parser/binding-linux-arm-musleabihf@0.121.0': + '@oxc-parser/binding-linux-arm-gnueabihf@0.130.0': optional: true '@oxc-parser/binding-linux-arm-musleabihf@0.127.0': optional: true - '@oxc-parser/binding-linux-arm64-gnu@0.121.0': + '@oxc-parser/binding-linux-arm-musleabihf@0.130.0': optional: true '@oxc-parser/binding-linux-arm64-gnu@0.127.0': optional: true - '@oxc-parser/binding-linux-arm64-musl@0.121.0': + '@oxc-parser/binding-linux-arm64-gnu@0.130.0': optional: true '@oxc-parser/binding-linux-arm64-musl@0.127.0': optional: true - '@oxc-parser/binding-linux-ppc64-gnu@0.121.0': + '@oxc-parser/binding-linux-arm64-musl@0.130.0': optional: true '@oxc-parser/binding-linux-ppc64-gnu@0.127.0': optional: true - '@oxc-parser/binding-linux-riscv64-gnu@0.121.0': + '@oxc-parser/binding-linux-ppc64-gnu@0.130.0': optional: true '@oxc-parser/binding-linux-riscv64-gnu@0.127.0': optional: true - '@oxc-parser/binding-linux-riscv64-musl@0.121.0': + '@oxc-parser/binding-linux-riscv64-gnu@0.130.0': optional: true '@oxc-parser/binding-linux-riscv64-musl@0.127.0': optional: true - '@oxc-parser/binding-linux-s390x-gnu@0.121.0': + '@oxc-parser/binding-linux-riscv64-musl@0.130.0': optional: true '@oxc-parser/binding-linux-s390x-gnu@0.127.0': optional: true - '@oxc-parser/binding-linux-x64-gnu@0.121.0': + '@oxc-parser/binding-linux-s390x-gnu@0.130.0': optional: true '@oxc-parser/binding-linux-x64-gnu@0.127.0': optional: true - '@oxc-parser/binding-linux-x64-musl@0.121.0': + '@oxc-parser/binding-linux-x64-gnu@0.130.0': optional: true '@oxc-parser/binding-linux-x64-musl@0.127.0': optional: true - '@oxc-parser/binding-openharmony-arm64@0.121.0': + '@oxc-parser/binding-linux-x64-musl@0.130.0': optional: true '@oxc-parser/binding-openharmony-arm64@0.127.0': optional: true - '@oxc-parser/binding-wasm32-wasi@0.121.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': - dependencies: - '@napi-rs/wasm-runtime': 1.1.2(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) - transitivePeerDependencies: - - '@emnapi/core' - - '@emnapi/runtime' + '@oxc-parser/binding-openharmony-arm64@0.130.0': optional: true '@oxc-parser/binding-wasm32-wasi@0.127.0': dependencies: '@emnapi/core': 1.9.2 '@emnapi/runtime': 1.9.2 - '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) + '@napi-rs/wasm-runtime': 1.1.5(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) optional: true - '@oxc-parser/binding-win32-arm64-msvc@0.121.0': + '@oxc-parser/binding-wasm32-wasi@0.130.0': + dependencies: + '@emnapi/core': 1.10.0 + '@emnapi/runtime': 1.10.0 + '@napi-rs/wasm-runtime': 1.1.5(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) optional: true '@oxc-parser/binding-win32-arm64-msvc@0.127.0': optional: true - '@oxc-parser/binding-win32-ia32-msvc@0.121.0': + '@oxc-parser/binding-win32-arm64-msvc@0.130.0': optional: true '@oxc-parser/binding-win32-ia32-msvc@0.127.0': optional: true - '@oxc-parser/binding-win32-x64-msvc@0.121.0': + '@oxc-parser/binding-win32-ia32-msvc@0.130.0': optional: true '@oxc-parser/binding-win32-x64-msvc@0.127.0': optional: true - '@oxc-project/types@0.103.0': {} + '@oxc-parser/binding-win32-x64-msvc@0.130.0': + optional: true - '@oxc-project/types@0.121.0': {} + '@oxc-project/types@0.103.0': {} '@oxc-project/types@0.127.0': {} + '@oxc-project/types@0.130.0': {} + '@oxc-project/types@0.133.0': {} '@oxc-resolver/binding-android-arm-eabi@11.20.0': @@ -17840,7 +18572,7 @@ snapshots: dependencies: '@emnapi/core': 1.10.0 '@emnapi/runtime': 1.10.0 - '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + '@napi-rs/wasm-runtime': 1.1.5(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) optional: true '@oxc-resolver/binding-win32-arm64-msvc@11.20.0': @@ -17853,65 +18585,65 @@ snapshots: dependencies: '@noble/hashes': 1.8.0 - '@parcel/watcher-android-arm64@2.5.1': + '@parcel/watcher-android-arm64@2.5.6': optional: true - '@parcel/watcher-darwin-arm64@2.5.1': + '@parcel/watcher-darwin-arm64@2.5.6': optional: true - '@parcel/watcher-darwin-x64@2.5.1': + '@parcel/watcher-darwin-x64@2.5.6': optional: true - '@parcel/watcher-freebsd-x64@2.5.1': + '@parcel/watcher-freebsd-x64@2.5.6': optional: true - '@parcel/watcher-linux-arm-glibc@2.5.1': + '@parcel/watcher-linux-arm-glibc@2.5.6': optional: true - '@parcel/watcher-linux-arm-musl@2.5.1': + '@parcel/watcher-linux-arm-musl@2.5.6': optional: true - '@parcel/watcher-linux-arm64-glibc@2.5.1': + '@parcel/watcher-linux-arm64-glibc@2.5.6': optional: true - '@parcel/watcher-linux-arm64-musl@2.5.1': + '@parcel/watcher-linux-arm64-musl@2.5.6': optional: true - '@parcel/watcher-linux-x64-glibc@2.5.1': + '@parcel/watcher-linux-x64-glibc@2.5.6': optional: true - '@parcel/watcher-linux-x64-musl@2.5.1': + '@parcel/watcher-linux-x64-musl@2.5.6': optional: true - '@parcel/watcher-win32-arm64@2.5.1': + '@parcel/watcher-win32-arm64@2.5.6': optional: true - '@parcel/watcher-win32-ia32@2.5.1': + '@parcel/watcher-win32-ia32@2.5.6': optional: true - '@parcel/watcher-win32-x64@2.5.1': + '@parcel/watcher-win32-x64@2.5.6': optional: true - '@parcel/watcher@2.5.1': + '@parcel/watcher@2.5.6': dependencies: - detect-libc: 1.0.3 + detect-libc: 2.1.2 is-glob: 4.0.3 - micromatch: 4.0.8 node-addon-api: 7.1.1 + picomatch: 4.0.4 optionalDependencies: - '@parcel/watcher-android-arm64': 2.5.1 - '@parcel/watcher-darwin-arm64': 2.5.1 - '@parcel/watcher-darwin-x64': 2.5.1 - '@parcel/watcher-freebsd-x64': 2.5.1 - '@parcel/watcher-linux-arm-glibc': 2.5.1 - '@parcel/watcher-linux-arm-musl': 2.5.1 - '@parcel/watcher-linux-arm64-glibc': 2.5.1 - '@parcel/watcher-linux-arm64-musl': 2.5.1 - '@parcel/watcher-linux-x64-glibc': 2.5.1 - '@parcel/watcher-linux-x64-musl': 2.5.1 - '@parcel/watcher-win32-arm64': 2.5.1 - '@parcel/watcher-win32-ia32': 2.5.1 - '@parcel/watcher-win32-x64': 2.5.1 + '@parcel/watcher-android-arm64': 2.5.6 + '@parcel/watcher-darwin-arm64': 2.5.6 + '@parcel/watcher-darwin-x64': 2.5.6 + '@parcel/watcher-freebsd-x64': 2.5.6 + '@parcel/watcher-linux-arm-glibc': 2.5.6 + '@parcel/watcher-linux-arm-musl': 2.5.6 + '@parcel/watcher-linux-arm64-glibc': 2.5.6 + '@parcel/watcher-linux-arm64-musl': 2.5.6 + '@parcel/watcher-linux-x64-glibc': 2.5.6 + '@parcel/watcher-linux-x64-musl': 2.5.6 + '@parcel/watcher-win32-arm64': 2.5.6 + '@parcel/watcher-win32-ia32': 2.5.6 + '@parcel/watcher-win32-x64': 2.5.6 '@peculiar/asn1-cms@2.7.0': dependencies: @@ -18020,7 +18752,7 @@ snapshots: dependencies: graceful-fs: 4.2.10 - '@pnpm/npm-conf@2.3.1': + '@pnpm/npm-conf@3.0.2': dependencies: '@pnpm/config.env-replace': 1.1.0 '@pnpm/network.ca-file': 1.0.2 @@ -18034,380 +18766,496 @@ snapshots: '@protobufjs/codegen@2.0.5': {} - '@protobufjs/eventemitter@1.1.0': {} - '@protobufjs/eventemitter@1.1.1': {} - '@protobufjs/fetch@1.1.0': - dependencies: - '@protobufjs/aspromise': 1.1.2 - '@protobufjs/inquire': 1.1.1 - '@protobufjs/fetch@1.1.1': dependencies: '@protobufjs/aspromise': 1.1.2 '@protobufjs/float@1.0.2': {} - '@protobufjs/inquire@1.1.1': {} + '@protobufjs/inquire@1.1.2': {} + + '@protobufjs/path@1.1.2': {} + + '@protobufjs/pool@1.1.0': {} + + '@protobufjs/utf8@1.1.1': {} + + '@rc-component/async-validator@5.1.1': + dependencies: + '@babel/runtime': 7.29.7 + + '@rc-component/cascader@1.14.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + dependencies: + '@rc-component/select': 1.6.15(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/tree': 1.2.4(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/util': 1.11.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + clsx: 2.1.1 + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) + + '@rc-component/cascader@1.15.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + dependencies: + '@rc-component/select': 1.6.15(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/tree': 1.3.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/util': 1.11.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + clsx: 2.1.1 + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) - '@protobufjs/inquire@1.1.2': {} + '@rc-component/checkbox@2.0.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + dependencies: + '@rc-component/util': 1.11.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + clsx: 2.1.1 + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) - '@protobufjs/path@1.1.2': {} + '@rc-component/collapse@1.2.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + dependencies: + '@babel/runtime': 7.29.7 + '@rc-component/motion': 1.3.3(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/util': 1.11.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + clsx: 2.1.1 + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) - '@protobufjs/pool@1.1.0': {} + '@rc-component/color-picker@3.1.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + dependencies: + '@ant-design/fast-color': 3.0.1 + '@rc-component/util': 1.11.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + clsx: 2.1.1 + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) - '@protobufjs/utf8@1.1.1': {} + '@rc-component/context@2.0.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + dependencies: + '@rc-component/util': 1.11.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) - '@rc-component/async-validator@5.1.0': + '@rc-component/dialog@1.8.4(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - '@babel/runtime': 7.28.4 + '@rc-component/motion': 1.3.3(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/portal': 2.2.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/util': 1.11.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + clsx: 2.1.1 + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) - '@rc-component/cascader@1.14.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@rc-component/dialog@1.9.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - '@rc-component/select': 1.6.15(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/tree': 1.2.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/util': 1.10.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@rc-component/motion': 1.3.3(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/portal': 2.2.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/util': 1.11.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) clsx: 2.1.1 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) - '@rc-component/checkbox@2.0.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@rc-component/drawer@1.4.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - '@rc-component/util': 1.10.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@rc-component/motion': 1.3.3(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/portal': 2.2.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/util': 1.11.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) clsx: 2.1.1 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) - '@rc-component/collapse@1.2.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@rc-component/dropdown@1.0.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - '@babel/runtime': 7.28.4 - '@rc-component/motion': 1.3.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/util': 1.10.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@rc-component/trigger': 3.9.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/util': 1.11.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) clsx: 2.1.1 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) - '@rc-component/color-picker@3.1.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@rc-component/form@1.8.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - '@ant-design/fast-color': 3.0.1 - '@rc-component/util': 1.10.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@rc-component/async-validator': 5.1.1 + '@rc-component/util': 1.11.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) clsx: 2.1.1 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) - '@rc-component/context@2.0.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@rc-component/image@1.8.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - '@rc-component/util': 1.10.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + '@rc-component/motion': 1.3.3(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/portal': 2.2.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/util': 1.11.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + clsx: 2.1.1 + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) - '@rc-component/dialog@1.8.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@rc-component/image@1.9.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - '@rc-component/motion': 1.3.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/portal': 2.2.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/util': 1.10.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@rc-component/motion': 1.3.3(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/portal': 2.2.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/util': 1.11.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) clsx: 2.1.1 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) - '@rc-component/drawer@1.4.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@rc-component/input-number@1.6.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - '@rc-component/motion': 1.3.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/portal': 2.2.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/util': 1.10.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@rc-component/mini-decimal': 1.1.4 + '@rc-component/util': 1.11.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) clsx: 2.1.1 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) - '@rc-component/dropdown@1.0.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@rc-component/input@1.1.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - '@rc-component/trigger': 3.9.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/util': 1.10.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@rc-component/util': 1.11.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) clsx: 2.1.1 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) - '@rc-component/form@1.8.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@rc-component/input@1.3.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - '@rc-component/async-validator': 5.1.0 - '@rc-component/util': 1.10.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@rc-component/resize-observer': 1.1.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/util': 1.11.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) clsx: 2.1.1 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) - '@rc-component/image@1.8.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@rc-component/mentions@1.6.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - '@rc-component/motion': 1.3.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/portal': 2.2.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/util': 1.10.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@rc-component/input': 1.1.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/menu': 1.2.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/textarea': 1.1.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/trigger': 3.9.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/util': 1.11.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) clsx: 2.1.1 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) - '@rc-component/input-number@1.6.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@rc-component/mentions@1.9.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - '@rc-component/mini-decimal': 1.1.0 - '@rc-component/util': 1.10.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@rc-component/input': 1.3.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/menu': 1.3.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/trigger': 3.9.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/util': 1.11.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) clsx: 2.1.1 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) - '@rc-component/input@1.1.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@rc-component/menu@1.2.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - '@rc-component/util': 1.10.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@rc-component/motion': 1.3.3(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/overflow': 1.0.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/trigger': 3.9.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/util': 1.11.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) clsx: 2.1.1 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) - '@rc-component/mentions@1.6.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@rc-component/menu@1.3.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - '@rc-component/input': 1.1.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/menu': 1.2.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/textarea': 1.1.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/trigger': 3.9.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/util': 1.10.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@rc-component/motion': 1.3.3(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/overflow': 1.0.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/trigger': 3.9.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/util': 1.11.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) clsx: 2.1.1 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) + + '@rc-component/mini-decimal@1.1.4': + dependencies: + '@babel/runtime': 7.29.7 - '@rc-component/menu@1.2.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@rc-component/motion@1.3.3(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - '@rc-component/motion': 1.3.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/overflow': 1.0.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/trigger': 3.9.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/util': 1.10.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@rc-component/util': 1.11.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) clsx: 2.1.1 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) - '@rc-component/mini-decimal@1.1.0': + '@rc-component/mutate-observer@2.0.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - '@babel/runtime': 7.28.4 + '@rc-component/util': 1.11.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) - '@rc-component/motion@1.3.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@rc-component/notification@1.2.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - '@rc-component/util': 1.10.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@rc-component/motion': 1.3.3(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/util': 1.11.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) clsx: 2.1.1 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) - '@rc-component/mutate-observer@2.0.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@rc-component/notification@2.0.7(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - '@rc-component/util': 1.10.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + '@rc-component/motion': 1.3.3(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/util': 1.11.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + clsx: 2.1.1 + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) - '@rc-component/notification@1.2.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@rc-component/overflow@1.0.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - '@rc-component/motion': 1.3.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/util': 1.10.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@babel/runtime': 7.29.7 + '@rc-component/resize-observer': 1.1.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/util': 1.11.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) clsx: 2.1.1 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) - '@rc-component/overflow@1.0.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@rc-component/pagination@1.2.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - '@babel/runtime': 7.28.4 - '@rc-component/resize-observer': 1.1.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/util': 1.10.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@rc-component/util': 1.11.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) clsx: 2.1.1 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) - '@rc-component/pagination@1.2.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@rc-component/picker@1.10.0(dayjs@1.11.21)(luxon@3.7.2)(moment@2.30.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - '@rc-component/util': 1.10.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@rc-component/overflow': 1.0.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/resize-observer': 1.1.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/trigger': 3.9.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/util': 1.11.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) clsx: 2.1.1 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) + optionalDependencies: + dayjs: 1.11.21 + luxon: 3.7.2 + moment: 2.30.1 - '@rc-component/picker@1.9.1(dayjs@1.11.19)(luxon@3.7.2)(moment@2.30.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@rc-component/picker@1.9.1(dayjs@1.11.21)(luxon@3.7.2)(moment@2.30.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - '@rc-component/overflow': 1.0.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/resize-observer': 1.1.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/trigger': 3.9.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/util': 1.10.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@rc-component/overflow': 1.0.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/resize-observer': 1.1.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/trigger': 3.9.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/util': 1.11.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) clsx: 2.1.1 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) optionalDependencies: - dayjs: 1.11.19 + dayjs: 1.11.21 luxon: 3.7.2 moment: 2.30.1 - '@rc-component/portal@2.2.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@rc-component/portal@2.2.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + dependencies: + '@rc-component/util': 1.11.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + clsx: 2.1.1 + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) + + '@rc-component/progress@1.0.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + dependencies: + '@rc-component/util': 1.11.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + clsx: 2.1.1 + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) + + '@rc-component/qrcode@1.1.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + dependencies: + '@babel/runtime': 7.29.7 + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) + + '@rc-component/rate@1.0.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + dependencies: + '@rc-component/util': 1.11.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + clsx: 2.1.1 + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) + + '@rc-component/resize-observer@1.1.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - '@rc-component/util': 1.10.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@rc-component/util': 1.11.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) + + '@rc-component/segmented@1.3.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + dependencies: + '@babel/runtime': 7.29.7 + '@rc-component/motion': 1.3.3(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/util': 1.11.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) clsx: 2.1.1 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) - '@rc-component/progress@1.0.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@rc-component/select@1.6.15(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - '@rc-component/util': 1.10.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@rc-component/overflow': 1.0.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/trigger': 3.9.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/util': 1.11.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/virtual-list': 1.2.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7) clsx: 2.1.1 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) - '@rc-component/qrcode@1.1.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@rc-component/slider@1.0.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - '@babel/runtime': 7.28.4 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + '@rc-component/util': 1.11.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + clsx: 2.1.1 + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) - '@rc-component/rate@1.0.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@rc-component/steps@1.2.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - '@rc-component/util': 1.10.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@rc-component/util': 1.11.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) clsx: 2.1.1 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) - '@rc-component/resize-observer@1.1.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@rc-component/switch@1.0.3(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - '@rc-component/util': 1.10.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + '@rc-component/util': 1.11.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + clsx: 2.1.1 + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) - '@rc-component/segmented@1.3.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@rc-component/table@1.10.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - '@babel/runtime': 7.28.4 - '@rc-component/motion': 1.3.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/util': 1.10.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@rc-component/context': 2.0.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/resize-observer': 1.1.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/util': 1.11.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/virtual-list': 1.2.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7) clsx: 2.1.1 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) - '@rc-component/select@1.6.15(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@rc-component/table@1.9.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - '@rc-component/overflow': 1.0.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/trigger': 3.9.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/util': 1.10.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/virtual-list': 1.0.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@rc-component/context': 2.0.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/resize-observer': 1.1.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/util': 1.11.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/virtual-list': 1.2.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7) clsx: 2.1.1 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) - '@rc-component/slider@1.0.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@rc-component/tabs@1.7.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - '@rc-component/util': 1.10.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@rc-component/dropdown': 1.0.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/menu': 1.2.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/motion': 1.3.3(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/resize-observer': 1.1.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/util': 1.11.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) clsx: 2.1.1 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) - '@rc-component/steps@1.2.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@rc-component/tabs@1.9.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - '@rc-component/util': 1.10.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@rc-component/dropdown': 1.0.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/menu': 1.3.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/motion': 1.3.3(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/resize-observer': 1.1.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/util': 1.11.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) clsx: 2.1.1 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) - '@rc-component/switch@1.0.3(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@rc-component/textarea@1.1.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - '@rc-component/util': 1.10.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@rc-component/input': 1.1.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/resize-observer': 1.1.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/util': 1.11.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) clsx: 2.1.1 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) - '@rc-component/table@1.9.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@rc-component/tooltip@1.4.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - '@rc-component/context': 2.0.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/resize-observer': 1.1.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/util': 1.10.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/virtual-list': 1.0.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@rc-component/trigger': 3.9.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/util': 1.11.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) clsx: 2.1.1 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) - '@rc-component/tabs@1.7.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@rc-component/tour@2.3.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - '@rc-component/dropdown': 1.0.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/menu': 1.2.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/motion': 1.3.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/resize-observer': 1.1.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/util': 1.10.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@rc-component/portal': 2.2.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/trigger': 3.9.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/util': 1.11.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) clsx: 2.1.1 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) - '@rc-component/textarea@1.1.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@rc-component/tour@2.4.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - '@rc-component/input': 1.1.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/resize-observer': 1.1.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/util': 1.10.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@rc-component/portal': 2.2.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/trigger': 3.9.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/util': 1.11.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) clsx: 2.1.1 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) - '@rc-component/tooltip@1.4.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@rc-component/tree-select@1.8.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - '@rc-component/trigger': 3.9.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/util': 1.10.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@rc-component/select': 1.6.15(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/tree': 1.2.4(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/util': 1.11.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) clsx: 2.1.1 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) - '@rc-component/tour@2.3.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@rc-component/tree-select@1.9.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - '@rc-component/portal': 2.2.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/trigger': 3.9.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/util': 1.10.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@rc-component/select': 1.6.15(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/tree': 1.3.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/util': 1.11.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) clsx: 2.1.1 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) - '@rc-component/tree-select@1.8.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@rc-component/tree@1.2.4(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - '@rc-component/select': 1.6.15(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/tree': 1.2.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/util': 1.10.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@rc-component/motion': 1.3.3(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/util': 1.11.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/virtual-list': 1.2.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7) clsx: 2.1.1 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) - '@rc-component/tree@1.2.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@rc-component/tree@1.3.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - '@rc-component/motion': 1.3.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/util': 1.10.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/virtual-list': 1.0.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@rc-component/motion': 1.3.3(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/util': 1.11.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/virtual-list': 1.2.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7) clsx: 2.1.1 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) - '@rc-component/trigger@3.9.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@rc-component/trigger@3.9.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - '@rc-component/motion': 1.3.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/portal': 2.2.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/resize-observer': 1.1.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/util': 1.10.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@rc-component/motion': 1.3.3(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/portal': 2.2.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/resize-observer': 1.1.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/util': 1.11.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) clsx: 2.1.1 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) - '@rc-component/upload@1.1.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@rc-component/upload@1.1.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - '@rc-component/util': 1.10.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@rc-component/util': 1.11.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) clsx: 2.1.1 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) - '@rc-component/util@1.10.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@rc-component/util@1.11.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: is-mobile: 5.0.0 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) react-is: 18.3.1 - '@rc-component/virtual-list@1.0.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@rc-component/virtual-list@1.2.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - '@babel/runtime': 7.28.4 - '@rc-component/resize-observer': 1.1.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/util': 1.10.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@babel/runtime': 7.29.7 + '@rc-component/resize-observer': 1.1.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/util': 1.11.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) clsx: 2.1.1 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) - '@repeaterjs/repeater@3.0.6': {} + '@repeaterjs/repeater@3.1.0': {} '@rolldown/binding-android-arm64@1.0.0-beta.55': optional: true @@ -18477,7 +19325,7 @@ snapshots: '@rolldown/binding-wasm32-wasi@1.0.0-beta.55(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': dependencies: - '@napi-rs/wasm-runtime': 1.1.2(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + '@napi-rs/wasm-runtime': 1.1.5(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) transitivePeerDependencies: - '@emnapi/core' - '@emnapi/runtime' @@ -18487,7 +19335,7 @@ snapshots: dependencies: '@emnapi/core': 1.10.0 '@emnapi/runtime': 1.10.0 - '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + '@napi-rs/wasm-runtime': 1.1.5(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) optional: true '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.55': @@ -18504,19 +19352,17 @@ snapshots: '@rolldown/pluginutils@1.0.0-beta.55': {} - '@rolldown/pluginutils@1.0.0-rc.7': {} - '@rolldown/pluginutils@1.0.1': {} '@rollup/plugin-inject@5.0.5': dependencies: - '@rollup/pluginutils': 5.3.0 + '@rollup/pluginutils': 5.4.0 estree-walker: 2.0.2 magic-string: 0.30.21 - '@rollup/pluginutils@5.3.0': + '@rollup/pluginutils@5.4.0': dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 estree-walker: 2.0.2 picomatch: 4.0.4 @@ -18617,7 +19463,7 @@ snapshots: - debug - supports-color - '@sinclair/typebox@0.27.8': {} + '@sinclair/typebox@0.27.10': {} '@sindresorhus/is@4.6.0': {} @@ -18625,13 +19471,13 @@ snapshots: '@sindresorhus/merge-streams@2.3.0': {} - '@slorber/react-helmet-async@1.3.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@slorber/react-helmet-async@1.3.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - '@babel/runtime': 7.28.4 + '@babel/runtime': 7.29.7 invariant: 2.2.4 prop-types: 15.8.1 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) react-fast-compare: 3.2.2 shallowequal: 1.1.0 @@ -18646,44 +19492,88 @@ snapshots: color: 5.0.3 text-hex: 1.0.0 - '@sonar/scan@4.3.2': + '@sonar/scan@4.3.6': dependencies: - adm-zip: 0.5.16 + adm-zip: 0.5.17 axios: 1.16.0 - commander: 13.1.0 - fs-extra: 11.3.2 + commander: 14.0.3 hpagent: 1.2.0 node-forge: 1.4.0 - properties-file: 3.6.1 - proxy-from-env: 1.1.0 - semver: 7.7.2 - slugify: 1.6.6 - tar-stream: 3.1.7 + properties-file: 4.0.0 + proxy-from-env: 2.1.0 + semver: 7.7.4 + slugify: 1.6.9 + tar-stream: 3.1.8 transitivePeerDependencies: - bare-abort-controller + - bare-buffer - debug - react-native-b4a '@standard-schema/spec@1.1.0': {} - '@storybook/addon-a11y@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-a11y@10.4.3(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))': dependencies: '@storybook/global': 5.0.0 - axe-core: 4.11.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) - - '@storybook/addon-docs@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))': - dependencies: - '@mdx-js/react': 3.1.1(@types/react@19.2.7)(react@19.2.0) - '@storybook/csf-plugin': 10.4.2(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/icons': 2.0.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@storybook/react-dom-shim': 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)) - react: 19.2.0 - react-dom: 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) - ts-dedent: 2.2.0 + axe-core: 4.12.1 + storybook: 10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + + '@storybook/addon-a11y@10.4.4(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))': + dependencies: + '@storybook/global': 5.0.0 + axe-core: 4.12.1 + storybook: 10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + + '@storybook/addon-docs@10.4.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(esbuild@0.28.1)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3))(webpack@5.107.2(esbuild@0.28.1)(postcss@8.5.10))': + dependencies: + '@mdx-js/react': 3.1.1(@types/react@19.2.17)(react@19.2.7) + '@storybook/csf-plugin': 10.4.3(esbuild@0.28.1)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3))(webpack@5.107.2(esbuild@0.28.1)(postcss@8.5.10)) + '@storybook/icons': 2.0.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@storybook/react-dom-shim': 10.4.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) + storybook: 10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + ts-dedent: 2.3.0 + optionalDependencies: + '@types/react': 19.2.17 + transitivePeerDependencies: + - '@types/react-dom' + - esbuild + - rollup + - vite + - webpack + + '@storybook/addon-docs@10.4.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(esbuild@0.28.1)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3))(webpack@5.107.2(esbuild@0.28.1))': + dependencies: + '@mdx-js/react': 3.1.1(@types/react@19.2.17)(react@19.2.7) + '@storybook/csf-plugin': 10.4.3(esbuild@0.28.1)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3))(webpack@5.107.2(esbuild@0.28.1)) + '@storybook/icons': 2.0.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@storybook/react-dom-shim': 10.4.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) + storybook: 10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + ts-dedent: 2.3.0 + optionalDependencies: + '@types/react': 19.2.17 + transitivePeerDependencies: + - '@types/react-dom' + - esbuild + - rollup + - vite + - webpack + + '@storybook/addon-docs@10.4.4(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(esbuild@0.28.1)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3))(webpack@5.107.2(esbuild@0.28.1))': + dependencies: + '@mdx-js/react': 3.1.1(@types/react@19.2.17)(react@19.2.7) + '@storybook/csf-plugin': 10.4.4(esbuild@0.28.1)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3))(webpack@5.107.2(esbuild@0.28.1)) + '@storybook/icons': 2.0.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@storybook/react-dom-shim': 10.4.4(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) + storybook: 10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + ts-dedent: 2.3.0 optionalDependencies: - '@types/react': 19.2.7 + '@types/react': 19.2.17 transitivePeerDependencies: - '@types/react-dom' - esbuild @@ -18691,81 +19581,164 @@ snapshots: - vite - webpack - '@storybook/addon-onboarding@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-onboarding@10.4.3(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))': + dependencies: + storybook: 10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + + '@storybook/addon-onboarding@10.4.4(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))': + dependencies: + storybook: 10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + + '@storybook/addon-vitest@10.4.3(@vitest/browser-playwright@4.1.8)(@vitest/browser@4.1.8(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3))(vitest@4.1.8))(@vitest/runner@4.1.8)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vitest@4.1.8)': 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/global': 5.0.0 + '@storybook/icons': 2.0.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + storybook: 10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + optionalDependencies: + '@vitest/browser': 4.1.8(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3))(vitest@4.1.8) + '@vitest/browser-playwright': 4.1.8(playwright@1.59.0)(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3))(vitest@4.1.8) + '@vitest/runner': 4.1.8 + vitest: 4.1.8(@opentelemetry/api@1.9.0)(@types/node@25.9.2)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(jsdom@26.1.0)(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3)) + transitivePeerDependencies: + - react + - react-dom - '@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.4(@vitest/browser-playwright@4.1.8)(@vitest/browser@4.1.8(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3))(vitest@4.1.8))(@vitest/runner@4.1.8)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vitest@4.1.8)': 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) + '@storybook/icons': 2.0.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + storybook: 10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) 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/browser': 4.1.8(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3))(vitest@4.1.8) + '@vitest/browser-playwright': 4.1.8(playwright@1.59.0)(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(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)(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.8(@opentelemetry/api@1.9.0)(@types/node@25.9.2)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(jsdom@26.1.0)(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3)) transitivePeerDependencies: - react - react-dom - '@storybook/builder-vite@10.4.2(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/builder-vite@10.4.3(esbuild@0.28.1)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3))(webpack@5.107.2(esbuild@0.28.1)(postcss@8.5.10))': + dependencies: + '@storybook/csf-plugin': 10.4.3(esbuild@0.28.1)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3))(webpack@5.107.2(esbuild@0.28.1)(postcss@8.5.10)) + storybook: 10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + ts-dedent: 2.3.0 + vite: 8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3) + transitivePeerDependencies: + - esbuild + - rollup + - webpack + + '@storybook/builder-vite@10.4.4(esbuild@0.28.1)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3))(webpack@5.107.2(esbuild@0.28.1))': dependencies: - '@storybook/csf-plugin': 10.4.2(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: 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) - ts-dedent: 2.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) + '@storybook/csf-plugin': 10.4.4(esbuild@0.28.1)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3))(webpack@5.107.2(esbuild@0.28.1)) + storybook: 10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + ts-dedent: 2.3.0 + vite: 8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3) transitivePeerDependencies: - esbuild - rollup - webpack - '@storybook/csf-plugin@10.4.2(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/csf-plugin@10.4.3(esbuild@0.28.1)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3))(webpack@5.107.2(esbuild@0.28.1)(postcss@8.5.10))': + dependencies: + storybook: 10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + unplugin: 2.3.11 + optionalDependencies: + esbuild: 0.28.1 + vite: 8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3) + webpack: 5.107.2(esbuild@0.28.1)(postcss@8.5.10) + + '@storybook/csf-plugin@10.4.3(esbuild@0.28.1)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3))(webpack@5.107.2(esbuild@0.28.1))': + dependencies: + storybook: 10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + unplugin: 2.3.11 + optionalDependencies: + esbuild: 0.28.1 + vite: 8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3) + webpack: 5.107.2(esbuild@0.28.1) + + '@storybook/csf-plugin@10.4.4(esbuild@0.28.1)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3))(webpack@5.107.2(esbuild@0.28.1))': 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: 10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) unplugin: 2.3.11 optionalDependencies: esbuild: 0.28.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) - webpack: 5.105.4(esbuild@0.28.1) + vite: 8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3) + webpack: 5.107.2(esbuild@0.28.1) '@storybook/global@5.0.0': {} - '@storybook/icons@2.0.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@storybook/icons@2.0.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + dependencies: + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) + + '@storybook/react-dom-shim@10.4.2(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))': + dependencies: + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) + storybook: 10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + optionalDependencies: + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) + + '@storybook/react-dom-shim@10.4.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))': dependencies: - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) + storybook: 10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + optionalDependencies: + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) - '@storybook/react-dom-shim@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))': + '@storybook/react-dom-shim@10.4.4(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))': dependencies: - react: 19.2.0 - react-dom: 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) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) + storybook: 10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) optionalDependencies: - '@types/react': 19.2.7 - '@types/react-dom': 19.2.3(@types/react@19.2.7) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) - '@storybook/react-dom-shim@9.1.16(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))': + '@storybook/react-vite@10.4.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(esbuild@0.28.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3))(webpack@5.107.2(esbuild@0.28.1)(postcss@8.5.10))': dependencies: - react: 19.2.0 - react-dom: 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) + '@joshwooding/vite-plugin-react-docgen-typescript': 0.7.0(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3)) + '@rollup/pluginutils': 5.4.0 + '@storybook/builder-vite': 10.4.3(esbuild@0.28.1)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3))(webpack@5.107.2(esbuild@0.28.1)(postcss@8.5.10)) + '@storybook/react': 10.4.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(typescript@6.0.3) + empathic: 2.0.1 + magic-string: 0.30.21 + react: 19.2.7 + react-docgen: 8.0.3 + react-dom: 19.2.7(react@19.2.7) + resolve: 1.22.12 + storybook: 10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + tsconfig-paths: 4.2.0 + vite: 8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3) + transitivePeerDependencies: + - '@types/react' + - '@types/react-dom' + - esbuild + - rollup + - supports-color + - typescript + - webpack - '@storybook/react-vite@10.4.2(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(esbuild@0.28.1)(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)(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/react-vite@10.4.4(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(esbuild@0.28.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3))(webpack@5.107.2(esbuild@0.28.1))': dependencies: - '@joshwooding/vite-plugin-react-docgen-typescript': 0.7.0(typescript@6.0.3)(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)) - '@rollup/pluginutils': 5.3.0 - '@storybook/builder-vite': 10.4.2(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/react': 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) + '@joshwooding/vite-plugin-react-docgen-typescript': 0.7.0(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3)) + '@rollup/pluginutils': 5.4.0 + '@storybook/builder-vite': 10.4.4(esbuild@0.28.1)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3))(webpack@5.107.2(esbuild@0.28.1)) + '@storybook/react': 10.4.4(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(typescript@6.0.3) empathic: 2.0.1 magic-string: 0.30.21 - react: 19.2.0 - react-docgen: 8.0.2 - react-dom: 19.2.0(react@19.2.0) - resolve: 1.22.11 - 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) + react: 19.2.7 + react-docgen: 8.0.3 + react-dom: 19.2.7(react@19.2.7) + resolve: 1.22.12 + storybook: 10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) tsconfig-paths: 4.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) + vite: 8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3) transitivePeerDependencies: - '@types/react' - '@types/react-dom' @@ -18775,31 +19748,53 @@ snapshots: - typescript - webpack - '@storybook/react@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)': + '@storybook/react@10.4.2(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(typescript@6.0.3)': + dependencies: + '@storybook/global': 5.0.0 + '@storybook/react-dom-shim': 10.4.2(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)) + react: 19.2.7 + react-docgen: 8.0.3 + react-docgen-typescript: 2.4.0(typescript@6.0.3) + react-dom: 19.2.7(react@19.2.7) + storybook: 10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + optionalDependencies: + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) + typescript: 6.0.3 + transitivePeerDependencies: + - supports-color + + '@storybook/react@10.4.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(typescript@6.0.3)': dependencies: '@storybook/global': 5.0.0 - '@storybook/react-dom-shim': 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)) - react: 19.2.0 - react-docgen: 8.0.2 + '@storybook/react-dom-shim': 10.4.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)) + react: 19.2.7 + react-docgen: 8.0.3 react-docgen-typescript: 2.4.0(typescript@6.0.3) - react-dom: 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) + react-dom: 19.2.7(react@19.2.7) + storybook: 10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) optionalDependencies: - '@types/react': 19.2.7 - '@types/react-dom': 19.2.3(@types/react@19.2.7) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@storybook/react@9.1.16(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)': + '@storybook/react@10.4.4(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(typescript@6.0.3)': dependencies: '@storybook/global': 5.0.0 - '@storybook/react-dom-shim': 9.1.16(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)) - react: 19.2.0 - react-dom: 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) + '@storybook/react-dom-shim': 10.4.4(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)) + react: 19.2.7 + react-docgen: 8.0.3 + react-docgen-typescript: 2.4.0(typescript@6.0.3) + react-dom: 19.2.7(react@19.2.7) + storybook: 10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) optionalDependencies: + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) typescript: 6.0.3 + transitivePeerDependencies: + - supports-color '@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.29.6)': dependencies: @@ -18858,7 +19853,7 @@ snapshots: '@svgr/hast-util-to-babel-ast@8.0.0': dependencies: - '@babel/types': 7.29.0 + '@babel/types': 7.29.7 entities: 4.5.0 '@svgr/plugin-jsx@8.1.0(@svgr/core@8.1.0(typescript@6.0.3))': @@ -18883,10 +19878,10 @@ snapshots: '@svgr/webpack@8.1.0(typescript@6.0.3)': dependencies: '@babel/core': 7.29.6 - '@babel/plugin-transform-react-constant-elements': 7.27.1(@babel/core@7.29.6) - '@babel/preset-env': 7.28.5(@babel/core@7.29.6) - '@babel/preset-react': 7.28.5(@babel/core@7.29.6) - '@babel/preset-typescript': 7.28.5(@babel/core@7.29.6) + '@babel/plugin-transform-react-constant-elements': 7.29.7(@babel/core@7.29.6) + '@babel/preset-env': 7.29.7(@babel/core@7.29.6) + '@babel/preset-react': 7.29.7(@babel/core@7.29.6) + '@babel/preset-typescript': 7.29.7(@babel/core@7.29.6) '@svgr/core': 8.1.0(typescript@6.0.3) '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@6.0.3)) '@svgr/plugin-svgo': 8.1.0(@svgr/core@8.1.0(typescript@6.0.3))(typescript@6.0.3) @@ -18902,8 +19897,8 @@ snapshots: '@testing-library/dom@10.4.1': dependencies: - '@babel/code-frame': 7.29.0 - '@babel/runtime': 7.28.4 + '@babel/code-frame': 7.29.7 + '@babel/runtime': 7.29.7 '@types/aria-query': 5.0.4 aria-query: 5.3.0 dom-accessibility-api: 0.5.16 @@ -18913,40 +19908,30 @@ snapshots: '@testing-library/jest-dom@6.9.1': dependencies: - '@adobe/css-tools': 4.4.4 + '@adobe/css-tools': 4.5.0 aria-query: 5.3.2 css.escape: 1.5.1 dom-accessibility-api: 0.6.3 picocolors: 1.1.1 redent: 3.0.0 - '@testing-library/react@16.3.0(@testing-library/dom@10.4.1)(@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)': + '@testing-library/react@16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - '@babel/runtime': 7.28.4 + '@babel/runtime': 7.29.7 '@testing-library/dom': 10.4.1 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) optionalDependencies: - '@types/react': 19.2.7 - '@types/react-dom': 19.2.3(@types/react@19.2.7) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) '@testing-library/user-event@14.6.1(@testing-library/dom@10.4.1)': dependencies: '@testing-library/dom': 10.4.1 - '@theguild/federation-composition@0.21.0(graphql@16.12.0)': - dependencies: - constant-case: 3.0.4 - debug: 4.4.3(supports-color@8.1.1) - graphql: 16.12.0 - json5: 2.2.3 - lodash.sortby: 4.7.0 - transitivePeerDependencies: - - supports-color - '@ts-morph/common@0.29.0': dependencies: - minimatch: 10.2.4 + minimatch: 10.2.5 path-browserify: 1.0.1 tinyglobby: 0.2.17 @@ -18968,7 +19953,7 @@ snapshots: '@turbo/windows-arm64@2.9.18': optional: true - '@tybys/wasm-util@0.10.1': + '@tybys/wasm-util@0.10.2': dependencies: tslib: 2.8.1 optional: true @@ -18977,33 +19962,33 @@ snapshots: '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.29.2 - '@babel/types': 7.29.0 + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 '@types/babel__generator': 7.27.0 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.28.0 '@types/babel__generator@7.27.0': dependencies: - '@babel/types': 7.29.0 + '@babel/types': 7.29.7 '@types/babel__template@7.4.4': dependencies: - '@babel/parser': 7.29.2 - '@babel/types': 7.29.0 + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 '@types/babel__traverse@7.28.0': dependencies: - '@babel/types': 7.29.0 + '@babel/types': 7.29.7 '@types/body-parser@1.19.6': dependencies: '@types/connect': 3.4.38 - '@types/node': 24.10.1 + '@types/node': 25.9.2 '@types/bonjour@3.5.13': dependencies: - '@types/node': 24.10.1 + '@types/node': 25.9.2 '@types/chai@5.2.3': dependencies: @@ -19012,14 +19997,14 @@ snapshots: '@types/connect-history-api-fallback@1.5.4': dependencies: - '@types/express-serve-static-core': 5.1.0 - '@types/node': 24.10.1 + '@types/express-serve-static-core': 5.1.1 + '@types/node': 25.9.2 '@types/connect@3.4.38': dependencies: - '@types/node': 24.10.1 + '@types/node': 25.9.2 - '@types/debug@4.1.12': + '@types/debug@4.1.13': dependencies: '@types/ms': 2.1.0 @@ -19027,48 +20012,38 @@ snapshots: '@types/doctrine@0.0.9': {} - '@types/eslint-scope@3.7.7': - dependencies: - '@types/eslint': 9.6.1 - '@types/estree': 1.0.8 - - '@types/eslint@9.6.1': - dependencies: - '@types/estree': 1.0.8 - '@types/json-schema': 7.0.15 - '@types/estree-jsx@1.0.5': dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 - '@types/estree@1.0.8': {} + '@types/estree@1.0.9': {} - '@types/express-serve-static-core@4.19.7': + '@types/express-serve-static-core@4.19.8': dependencies: - '@types/node': 24.10.1 - '@types/qs': 6.14.0 + '@types/node': 25.9.2 + '@types/qs': 6.15.1 '@types/range-parser': 1.2.7 '@types/send': 1.2.1 - '@types/express-serve-static-core@5.1.0': + '@types/express-serve-static-core@5.1.1': dependencies: - '@types/node': 24.10.1 - '@types/qs': 6.14.0 + '@types/node': 25.9.2 + '@types/qs': 6.15.1 '@types/range-parser': 1.2.7 '@types/send': 1.2.1 '@types/express@4.17.25': dependencies: '@types/body-parser': 1.19.6 - '@types/express-serve-static-core': 4.19.7 - '@types/qs': 6.14.0 + '@types/express-serve-static-core': 4.19.8 + '@types/qs': 6.15.1 '@types/serve-static': 1.15.10 - '@types/express@5.0.5': + '@types/express@5.0.6': dependencies: '@types/body-parser': 1.19.6 - '@types/express-serve-static-core': 5.1.0 - '@types/serve-static': 1.15.10 + '@types/express-serve-static-core': 5.1.1 + '@types/serve-static': 2.2.0 '@types/graphql-depth-limit@1.1.6': dependencies: @@ -19084,13 +20059,13 @@ snapshots: '@types/html-minifier-terser@6.1.0': {} - '@types/http-cache-semantics@4.0.4': {} + '@types/http-cache-semantics@4.2.0': {} '@types/http-errors@2.0.5': {} '@types/http-proxy@1.17.17': dependencies: - '@types/node': 24.10.1 + '@types/node': 25.9.2 '@types/istanbul-lib-coverage@2.0.6': {} @@ -19112,7 +20087,7 @@ snapshots: dependencies: '@types/unist': 3.0.3 - '@types/mdx@2.0.13': {} + '@types/mdx@2.0.14': {} '@types/mime@1.3.5': {} @@ -19120,50 +20095,54 @@ snapshots: '@types/node@17.0.45': {} - '@types/node@22.19.15': + '@types/node@22.19.20': dependencies: undici-types: 6.21.0 - '@types/node@24.10.1': + '@types/node@22.19.21': dependencies: - undici-types: 7.16.0 + undici-types: 6.21.0 + + '@types/node@25.9.2': + dependencies: + undici-types: 7.24.6 '@types/normalize-package-data@2.4.4': {} - '@types/prismjs@1.26.5': {} + '@types/prismjs@1.26.6': {} - '@types/qs@6.14.0': {} + '@types/qs@6.15.1': {} '@types/range-parser@1.2.7': {} - '@types/react-dom@19.2.3(@types/react@19.2.7)': + '@types/react-dom@19.2.3(@types/react@19.2.17)': dependencies: - '@types/react': 19.2.7 + '@types/react': 19.2.17 '@types/react-router-config@5.0.11': dependencies: '@types/history': 4.7.11 - '@types/react': 19.2.7 + '@types/react': 19.2.17 '@types/react-router': 5.1.20 '@types/react-router-dom@5.3.3': dependencies: '@types/history': 4.7.11 - '@types/react': 19.2.7 + '@types/react': 19.2.17 '@types/react-router': 5.1.20 '@types/react-router@5.1.20': dependencies: '@types/history': 4.7.11 - '@types/react': 19.2.7 + '@types/react': 19.2.17 - '@types/react@19.2.7': + '@types/react@19.2.17': dependencies: csstype: 3.2.3 - '@types/readable-stream@4.0.22': + '@types/readable-stream@4.0.23': dependencies: - '@types/node': 24.10.1 + '@types/node': 22.19.20 '@types/resolve@1.20.6': {} @@ -19171,34 +20150,39 @@ snapshots: '@types/sax@1.2.7': dependencies: - '@types/node': 24.10.1 + '@types/node': 17.0.45 '@types/semver@7.7.1': {} '@types/send@0.17.6': dependencies: '@types/mime': 1.3.5 - '@types/node': 24.10.1 + '@types/node': 25.9.2 '@types/send@1.2.1': dependencies: - '@types/node': 24.10.1 + '@types/node': 25.9.2 '@types/serve-index@1.9.4': dependencies: - '@types/express': 5.0.5 + '@types/express': 5.0.6 '@types/serve-static@1.15.10': dependencies: '@types/http-errors': 2.0.5 - '@types/node': 24.10.1 + '@types/node': 25.9.2 '@types/send': 0.17.6 + '@types/serve-static@2.2.0': + dependencies: + '@types/http-errors': 2.0.5 + '@types/node': 25.9.2 + '@types/shimmer@1.2.0': {} '@types/sockjs@0.3.36': dependencies: - '@types/node': 24.10.1 + '@types/node': 25.9.2 '@types/triple-beam@1.3.5': {} @@ -19218,7 +20202,7 @@ snapshots: '@types/ws@8.18.1': dependencies: - '@types/node': 24.10.1 + '@types/node': 25.9.2 '@types/yargs-parser@21.0.3': {} @@ -19257,7 +20241,7 @@ snapshots: '@typescript/native-preview-win32-arm64': 7.0.0-dev.20260428.1 '@typescript/native-preview-win32-x64': 7.0.0-dev.20260428.1 - '@typespec/ts-http-runtime@0.3.2': + '@typespec/ts-http-runtime@0.3.6': dependencies: http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 @@ -19267,26 +20251,38 @@ snapshots: '@umijs/route-utils@4.0.3': {} - '@umijs/use-params@1.0.9(react@19.2.0)': + '@umijs/use-params@1.0.9(react@19.2.7)': dependencies: - react: 19.2.0 + react: 19.2.7 - '@ungap/structured-clone@1.3.0': {} + '@ungap/structured-clone@1.3.1': {} - '@vercel/oidc@3.0.5': {} + '@vitejs/plugin-react@6.0.2(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3))': + dependencies: + '@rolldown/pluginutils': 1.0.1 + vite: 8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3) - '@vitejs/plugin-react@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/browser-playwright@4.1.8(playwright@1.59.0)(vite@8.0.16(@types/node@22.19.20)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3))(vitest@4.1.8)': dependencies: - '@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': 4.1.8(vite@8.0.16(@types/node@22.19.20)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3))(vitest@4.1.8) + '@vitest/mocker': 4.1.8(vite@8.0.16(@types/node@22.19.20)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(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.20)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(jsdom@26.1.0)(vite@8.0.16(@types/node@22.19.20)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(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@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-playwright@4.1.8(playwright@1.59.0)(vite@8.0.16(@types/node@22.19.21)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(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)) + '@vitest/browser': 4.1.8(vite@8.0.16(@types/node@22.19.21)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3))(vitest@4.1.8) + '@vitest/mocker': 4.1.8(vite@8.0.16(@types/node@22.19.21)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(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)(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.8(@opentelemetry/api@1.9.0)(@types/node@22.19.21)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(jsdom@26.1.0)(vite@8.0.16(@types/node@22.19.21)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3)) transitivePeerDependencies: - bufferutil - msw @@ -19294,29 +20290,47 @@ snapshots: - 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.8(playwright@1.59.0)(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3))(vitest@4.1.8)': 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.8(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3))(vitest@4.1.8) + '@vitest/mocker': 4.1.8(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(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)(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.8(@opentelemetry/api@1.9.0)(@types/node@25.9.2)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(jsdom@26.1.0)(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3)) + transitivePeerDependencies: + - bufferutil + - msw + - utf-8-validate + - vite + + '@vitest/browser@4.1.8(vite@8.0.16(@types/node@22.19.20)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(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@22.19.20)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(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@22.19.20)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(jsdom@26.1.0)(vite@8.0.16(@types/node@22.19.20)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(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@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.8(vite@8.0.16(@types/node@22.19.21)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(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@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@22.19.21)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(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@22.19.15)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(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.8(@opentelemetry/api@1.9.0)(@types/node@22.19.21)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(jsdom@26.1.0)(vite@8.0.16(@types/node@22.19.21)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3)) ws: 8.21.0 transitivePeerDependencies: - bufferutil @@ -19325,16 +20339,16 @@ snapshots: - 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)': + '@vitest/browser@4.1.8(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(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/mocker': 4.1.8(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(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)(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.8(@opentelemetry/api@1.9.0)(@types/node@25.9.2)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(jsdom@26.1.0)(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3)) ws: 8.21.0 transitivePeerDependencies: - bufferutil @@ -19345,16 +20359,16 @@ snapshots: '@vitest/coverage-istanbul@4.1.8(vitest@4.1.8)': dependencies: '@babel/core': 7.29.6 - '@istanbuljs/schema': 0.1.3 + '@istanbuljs/schema': 0.1.6 '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 istanbul-reports: 3.2.0 - magicast: 0.5.2 - obug: 2.1.1 + magicast: 0.5.3 + obug: 2.1.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)(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.8(@opentelemetry/api@1.9.0)(@types/node@22.19.20)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(jsdom@26.1.0)(vite@8.0.16(@types/node@22.19.20)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3)) transitivePeerDependencies: - supports-color @@ -19375,21 +20389,29 @@ snapshots: 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.8(vite@8.0.16(@types/node@22.19.20)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3))': dependencies: '@vitest/spy': 4.1.8 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) + vite: 8.0.16(@types/node@22.19.20)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(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.8(vite@8.0.16(@types/node@22.19.21)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3))': dependencies: '@vitest/spy': 4.1.8 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - 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) + vite: 8.0.16(@types/node@22.19.21)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3) + + '@vitest/mocker@4.1.8(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3))': + dependencies: + '@vitest/spy': 4.1.8 + estree-walker: 3.0.3 + magic-string: 0.30.21 + optionalDependencies: + vite: 8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3) '@vitest/pretty-format@3.2.4': dependencies: @@ -19514,10 +20536,10 @@ snapshots: '@whatwg-node/fetch@0.10.13': dependencies: - '@whatwg-node/node-fetch': 0.8.4 + '@whatwg-node/node-fetch': 0.8.6 urlpattern-polyfill: 10.1.0 - '@whatwg-node/node-fetch@0.8.4': + '@whatwg-node/node-fetch@0.8.6': dependencies: '@fastify/busboy': 3.2.0 '@whatwg-node/disposablestack': 0.0.6 @@ -19550,7 +20572,7 @@ snapshots: '@zerollup/ts-helpers@1.7.18(typescript@5.9.3)': dependencies: - resolve: 1.22.11 + resolve: 1.22.12 typescript: 5.9.3 abort-controller@3.0.0: @@ -19574,7 +20596,7 @@ snapshots: dependencies: acorn: 8.16.0 - acorn-walk@8.3.4: + acorn-walk@8.3.5: dependencies: acorn: 8.16.0 @@ -19582,7 +20604,7 @@ snapshots: address@1.2.2: {} - adm-zip@0.5.16: {} + adm-zip@0.5.17: {} agent-base@7.1.4: {} @@ -19591,25 +20613,17 @@ snapshots: clean-stack: 2.2.0 indent-string: 4.0.0 - ai@5.0.105(zod@4.1.13): - dependencies: - '@ai-sdk/gateway': 2.0.17(zod@4.1.13) - '@ai-sdk/provider': 2.0.0 - '@ai-sdk/provider-utils': 3.0.18(zod@4.1.13) - '@opentelemetry/api': 1.9.0 - zod: 4.1.13 - - ajv-formats@2.1.1(ajv@8.18.0): + ajv-formats@2.1.1(ajv@8.20.0): optionalDependencies: - ajv: 8.18.0 + ajv: 8.20.0 ajv-keywords@3.5.2(ajv@6.14.0): dependencies: ajv: 6.14.0 - ajv-keywords@5.1.0(ajv@8.18.0): + ajv-keywords@5.1.0(ajv@8.20.0): dependencies: - ajv: 8.18.0 + ajv: 8.20.0 fast-deep-equal: 3.1.3 ajv@6.14.0: @@ -19619,34 +20633,34 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 - ajv@8.18.0: + ajv@8.20.0: dependencies: fast-deep-equal: 3.1.3 fast-uri: 3.1.2 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 - algoliasearch-helper@3.26.1(algoliasearch@5.45.0): + algoliasearch-helper@3.29.1(algoliasearch@5.53.0): dependencies: '@algolia/events': 4.0.1 - algoliasearch: 5.45.0 - - algoliasearch@5.45.0: - dependencies: - '@algolia/abtesting': 1.11.0 - '@algolia/client-abtesting': 5.45.0 - '@algolia/client-analytics': 5.45.0 - '@algolia/client-common': 5.45.0 - '@algolia/client-insights': 5.45.0 - '@algolia/client-personalization': 5.45.0 - '@algolia/client-query-suggestions': 5.45.0 - '@algolia/client-search': 5.45.0 - '@algolia/ingestion': 1.45.0 - '@algolia/monitoring': 1.45.0 - '@algolia/recommend': 5.45.0 - '@algolia/requester-browser-xhr': 5.45.0 - '@algolia/requester-fetch': 5.45.0 - '@algolia/requester-node-http': 5.45.0 + algoliasearch: 5.53.0 + + algoliasearch@5.53.0: + dependencies: + '@algolia/abtesting': 1.19.0 + '@algolia/client-abtesting': 5.53.0 + '@algolia/client-analytics': 5.53.0 + '@algolia/client-common': 5.53.0 + '@algolia/client-insights': 5.53.0 + '@algolia/client-personalization': 5.53.0 + '@algolia/client-query-suggestions': 5.53.0 + '@algolia/client-search': 5.53.0 + '@algolia/ingestion': 1.53.0 + '@algolia/monitoring': 1.53.0 + '@algolia/recommend': 5.53.0 + '@algolia/requester-browser-xhr': 5.53.0 + '@algolia/requester-fetch': 5.53.0 + '@algolia/requester-node-http': 5.53.0 ansi-align@3.0.1: dependencies: @@ -19678,56 +20692,112 @@ snapshots: ansis@3.17.0: {} - antd@6.3.5(luxon@3.7.2)(moment@2.30.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0): + antd@6.3.5(luxon@3.7.2)(moment@2.30.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7): + dependencies: + '@ant-design/colors': 8.0.1 + '@ant-design/cssinjs': 2.1.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@ant-design/cssinjs-utils': 2.1.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@ant-design/fast-color': 3.0.1 + '@ant-design/icons': 6.2.5(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@ant-design/react-slick': 2.0.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@babel/runtime': 7.29.7 + '@rc-component/cascader': 1.14.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/checkbox': 2.0.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/collapse': 1.2.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/color-picker': 3.1.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/dialog': 1.8.4(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/drawer': 1.4.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/dropdown': 1.0.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/form': 1.8.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/image': 1.8.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/input': 1.1.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/input-number': 1.6.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/mentions': 1.6.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/menu': 1.2.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/motion': 1.3.3(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/mutate-observer': 2.0.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/notification': 1.2.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/pagination': 1.2.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/picker': 1.9.1(dayjs@1.11.21)(luxon@3.7.2)(moment@2.30.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/progress': 1.0.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/qrcode': 1.1.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/rate': 1.0.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/resize-observer': 1.1.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/segmented': 1.3.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/select': 1.6.15(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/slider': 1.0.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/steps': 1.2.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/switch': 1.0.3(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/table': 1.9.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/tabs': 1.7.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/textarea': 1.1.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/tooltip': 1.4.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/tour': 2.3.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/tree': 1.2.4(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/tree-select': 1.8.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/trigger': 3.9.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/upload': 1.1.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/util': 1.11.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + clsx: 2.1.1 + dayjs: 1.11.21 + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) + scroll-into-view-if-needed: 3.1.0 + throttle-debounce: 5.0.2 + transitivePeerDependencies: + - date-fns + - luxon + - moment + + antd@6.4.3(luxon@3.7.2)(moment@2.30.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7): dependencies: '@ant-design/colors': 8.0.1 - '@ant-design/cssinjs': 2.1.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@ant-design/cssinjs-utils': 2.1.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@ant-design/cssinjs': 2.1.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@ant-design/cssinjs-utils': 2.1.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7) '@ant-design/fast-color': 3.0.1 - '@ant-design/icons': 6.1.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@ant-design/react-slick': 2.0.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@babel/runtime': 7.28.4 - '@rc-component/cascader': 1.14.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/checkbox': 2.0.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/collapse': 1.2.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/color-picker': 3.1.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/dialog': 1.8.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/drawer': 1.4.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/dropdown': 1.0.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/form': 1.8.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/image': 1.8.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/input': 1.1.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/input-number': 1.6.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/mentions': 1.6.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/menu': 1.2.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/motion': 1.3.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/mutate-observer': 2.0.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/notification': 1.2.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/pagination': 1.2.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/picker': 1.9.1(dayjs@1.11.19)(luxon@3.7.2)(moment@2.30.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/progress': 1.0.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/qrcode': 1.1.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/rate': 1.0.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/resize-observer': 1.1.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/segmented': 1.3.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/select': 1.6.15(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/slider': 1.0.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/steps': 1.2.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/switch': 1.0.3(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/table': 1.9.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/tabs': 1.7.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/textarea': 1.1.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/tooltip': 1.4.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/tour': 2.3.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/tree': 1.2.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/tree-select': 1.8.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/trigger': 3.9.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/upload': 1.1.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@rc-component/util': 1.10.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@ant-design/icons': 6.2.5(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@ant-design/react-slick': 2.0.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@babel/runtime': 7.29.7 + '@rc-component/cascader': 1.15.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/checkbox': 2.0.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/collapse': 1.2.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/color-picker': 3.1.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/dialog': 1.9.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/drawer': 1.4.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/dropdown': 1.0.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/form': 1.8.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/image': 1.9.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/input': 1.3.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/input-number': 1.6.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/mentions': 1.9.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/menu': 1.3.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/motion': 1.3.3(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/mutate-observer': 2.0.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/notification': 2.0.7(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/pagination': 1.2.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/picker': 1.10.0(dayjs@1.11.21)(luxon@3.7.2)(moment@2.30.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/progress': 1.0.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/qrcode': 1.1.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/rate': 1.0.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/resize-observer': 1.1.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/segmented': 1.3.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/select': 1.6.15(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/slider': 1.0.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/steps': 1.2.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/switch': 1.0.3(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/table': 1.10.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/tabs': 1.9.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/tooltip': 1.4.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/tour': 2.4.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/tree': 1.3.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/tree-select': 1.9.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/trigger': 3.9.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/upload': 1.1.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@rc-component/util': 1.11.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) clsx: 2.1.1 - dayjs: 1.11.19 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + dayjs: 1.11.21 + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) scroll-into-view-if-needed: 3.1.0 throttle-debounce: 5.0.2 transitivePeerDependencies: @@ -19742,17 +20812,19 @@ snapshots: normalize-path: 3.0.0 picomatch: 4.0.4 - apollo-link-rest@0.9.0(@apollo/client@3.14.0(@types/react@19.2.7)(graphql-ws@6.0.6(graphql@16.12.0)(ws@8.21.0))(graphql@16.12.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(graphql@16.12.0)(qs@6.15.2): + anynum@1.0.0: {} + + apollo-link-rest@0.9.0(@apollo/client@3.14.1(@types/react@19.2.17)(graphql-ws@6.0.8(graphql@16.14.2)(ws@8.21.0))(graphql@16.14.2)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(graphql@16.14.2)(qs@6.15.2): dependencies: - '@apollo/client': 3.14.0(@types/react@19.2.7)(graphql-ws@6.0.6(graphql@16.12.0)(ws@8.21.0))(graphql@16.12.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - graphql: 16.12.0 + '@apollo/client': 3.14.1(@types/react@19.2.17)(graphql-ws@6.0.8(graphql@16.14.2)(ws@8.21.0))(graphql@16.14.2)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + graphql: 16.14.2 qs: 6.15.2 applicationinsights@2.9.8: dependencies: '@azure/core-auth': 1.7.2 '@azure/core-rest-pipeline': 1.16.3 - '@azure/opentelemetry-instrumentation-azure-sdk': 1.0.0-beta.9 + '@azure/opentelemetry-instrumentation-azure-sdk': 1.0.0 '@microsoft/applicationinsights-web-snippet': 1.0.1 '@opentelemetry/api': 1.9.0 '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) @@ -19765,10 +20837,10 @@ snapshots: transitivePeerDependencies: - supports-color - archunit@2.1.63: + archunit@2.3.0: dependencies: '@zerollup/ts-helpers': 1.7.18(typescript@5.9.3) - minimatch: 10.2.4 + minimatch: 10.2.5 plantuml-parser: 0.4.0 typescript: 5.9.3 @@ -19805,17 +20877,15 @@ snapshots: arraybuffer.prototype.slice@1.0.4: dependencies: array-buffer-byte-length: 1.0.2 - call-bind: 1.0.8 + call-bind: 1.0.9 define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.2 es-errors: 1.3.0 get-intrinsic: 1.3.0 is-array-buffer: 3.0.5 arrify@1.0.1: {} - asap@2.0.6: {} - asn1.js@4.10.1: dependencies: bn.js: 4.12.3 @@ -19830,7 +20900,7 @@ snapshots: assert@2.1.0: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 is-nan: 1.3.2 object-is: 1.1.6 object.assign: 4.1.7 @@ -19877,12 +20947,11 @@ snapshots: auto-bind@4.0.0: {} - autoprefixer@10.4.22(postcss@8.5.10): + autoprefixer@10.5.0(postcss@8.5.10): dependencies: - browserslist: 4.28.1 - caniuse-lite: 1.0.30001777 + browserslist: 4.28.2 + caniuse-lite: 1.0.30001797 fraction.js: 5.3.4 - normalize-range: 0.1.2 picocolors: 1.1.1 postcss: 8.5.10 postcss-value-parser: 4.2.0 @@ -19893,7 +20962,7 @@ snapshots: aws-ssl-profiles@1.1.2: {} - axe-core@4.11.0: {} + axe-core@4.12.1: {} axios@1.16.0: dependencies: @@ -19903,7 +20972,7 @@ snapshots: transitivePeerDependencies: - debug - azurite@3.35.0: + azurite@3.35.0(@types/node@22.19.20): dependencies: '@azure/ms-rest-js': 1.11.2 applicationinsights: 2.9.8 @@ -19911,24 +20980,25 @@ snapshots: axios: 1.16.0 etag: 1.8.1 express: 4.22.2 - fs-extra: 11.3.2 + fs-extra: 11.3.5 glob-to-regexp: 0.4.1 - jsonwebtoken: 9.0.2 + jsonwebtoken: 9.0.3 lokijs: 1.5.12 - morgan: 1.10.1 + morgan: 1.11.0 multistream: 2.1.1 - mysql2: 3.15.3 + mysql2: 3.22.5(@types/node@22.19.20) rimraf: 3.0.2 - sequelize: 6.37.8(mysql2@3.15.3)(tedious@16.7.1) + sequelize: 6.37.8(mysql2@3.22.5(@types/node@22.19.20))(tedious@16.7.1) stoppable: 1.1.0 tedious: 16.7.1 to-readable-stream: 2.1.0 tslib: 2.8.1 uri-templates: 0.2.0 uuid: 3.4.0 - winston: 3.18.3 + winston: 3.19.0 xml2js: 0.6.2 transitivePeerDependencies: + - '@types/node' - applicationinsights-native-metrics - debug - ibm_db @@ -19940,24 +21010,24 @@ snapshots: - sqlite3 - supports-color - b4a@1.7.3: {} + b4a@1.8.1: {} - babel-loader@9.2.1(@babel/core@7.29.6)(webpack@5.105.4(esbuild@0.28.1)): + babel-loader@9.2.1(@babel/core@7.29.6)(webpack@5.107.2(esbuild@0.28.1)(postcss@8.5.10)): dependencies: '@babel/core': 7.29.6 find-cache-dir: 4.0.0 schema-utils: 4.3.3 - webpack: 5.105.4(esbuild@0.28.1) + webpack: 5.107.2(esbuild@0.28.1)(postcss@8.5.10) babel-plugin-dynamic-import-node@2.3.3: dependencies: object.assign: 4.1.7 - babel-plugin-polyfill-corejs2@0.4.14(@babel/core@7.29.6): + babel-plugin-polyfill-corejs2@0.4.17(@babel/core@7.29.6): dependencies: - '@babel/compat-data': 7.29.0 + '@babel/compat-data': 7.29.7 '@babel/core': 7.29.6 - '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.29.6) + '@babel/helper-define-polyfill-provider': 0.6.8(@babel/core@7.29.6) semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -19965,15 +21035,23 @@ snapshots: babel-plugin-polyfill-corejs3@0.13.0(@babel/core@7.29.6): dependencies: '@babel/core': 7.29.6 - '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.29.6) - core-js-compat: 3.47.0 + '@babel/helper-define-polyfill-provider': 0.6.8(@babel/core@7.29.6) + core-js-compat: 3.49.0 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-regenerator@0.6.5(@babel/core@7.29.6): + babel-plugin-polyfill-corejs3@0.14.2(@babel/core@7.29.6): dependencies: '@babel/core': 7.29.6 - '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.29.6) + '@babel/helper-define-polyfill-provider': 0.6.8(@babel/core@7.29.6) + core-js-compat: 3.49.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-polyfill-regenerator@0.6.8(@babel/core@7.29.6): + dependencies: + '@babel/core': 7.29.6 + '@babel/helper-define-polyfill-provider': 0.6.8(@babel/core@7.29.6) transitivePeerDependencies: - supports-color @@ -19983,11 +21061,41 @@ snapshots: balanced-match@4.0.4: {} - bare-events@2.8.2: {} + bare-events@2.9.1: {} + + bare-fs@4.7.2: + dependencies: + bare-events: 2.9.1 + bare-path: 3.0.1 + bare-stream: 2.13.1(bare-events@2.9.1) + bare-url: 2.4.5 + fast-fifo: 1.3.2 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a + + bare-os@3.9.1: {} + + bare-path@3.0.1: + dependencies: + bare-os: 3.9.1 + + bare-stream@2.13.1(bare-events@2.9.1): + dependencies: + streamx: 2.27.0 + teex: 1.0.1 + optionalDependencies: + bare-events: 2.9.1 + transitivePeerDependencies: + - react-native-b4a + + bare-url@2.4.5: + dependencies: + bare-path: 3.0.1 base64-js@1.5.1: {} - baseline-browser-mapping@2.10.0: {} + baseline-browser-mapping@2.10.35: {} basic-auth@2.0.1: dependencies: @@ -20005,9 +21113,9 @@ snapshots: inherits: 2.0.4 readable-stream: 3.6.2 - bl@6.1.5: + bl@6.1.6: dependencies: - '@types/readable-stream': 4.0.22 + '@types/readable-stream': 4.0.23 buffer: 6.0.3 inherits: 2.0.4 readable-stream: 4.7.0 @@ -20039,15 +21147,15 @@ snapshots: content-type: 1.0.5 debug: 4.4.3(supports-color@8.1.1) http-errors: 2.0.1 - iconv-lite: 0.7.0 + iconv-lite: 0.7.2 on-finished: 2.4.1 qs: 6.15.2 raw-body: 3.0.2 - type-is: 2.0.1 + type-is: 2.1.0 transitivePeerDependencies: - supports-color - bonjour-service@1.3.0: + bonjour-service@1.4.1: dependencies: fast-deep-equal: 3.1.3 multicast-dns: 7.2.5 @@ -20099,7 +21207,7 @@ snapshots: browser-resolve@2.0.0: dependencies: - resolve: 1.22.11 + resolve: 1.22.12 browserify-aes@1.2.0: dependencies: @@ -20129,7 +21237,7 @@ snapshots: randombytes: 2.1.0 safe-buffer: 5.2.1 - browserify-sign@4.2.5: + browserify-sign@4.2.6: dependencies: bn.js: 5.2.3 browserify-rsa: 4.1.1 @@ -20145,17 +21253,13 @@ snapshots: dependencies: pako: 1.0.11 - browserslist@4.28.1: - dependencies: - baseline-browser-mapping: 2.10.0 - caniuse-lite: 1.0.30001777 - electron-to-chromium: 1.5.307 - node-releases: 2.0.27 - update-browserslist-db: 1.2.3(browserslist@4.28.1) - - bser@2.1.1: + browserslist@4.28.2: dependencies: - node-int64: 0.4.0 + baseline-browser-mapping: 2.10.35 + caniuse-lite: 1.0.30001797 + electron-to-chromium: 1.5.371 + node-releases: 2.0.47 + update-browserslist-db: 1.2.3(browserslist@4.28.2) bson@6.10.4: {} @@ -20192,7 +21296,7 @@ snapshots: c8@10.1.3: dependencies: '@bcoe/v8-coverage': 1.0.2 - '@istanbuljs/schema': 0.1.3 + '@istanbuljs/schema': 0.1.6 find-up: 5.0.0 foreground-child: 3.3.1 istanbul-lib-coverage: 3.2.2 @@ -20206,7 +21310,7 @@ snapshots: c8@11.0.0: dependencies: '@bcoe/v8-coverage': 1.0.2 - '@istanbuljs/schema': 0.1.3 + '@istanbuljs/schema': 0.1.6 find-up: 5.0.0 foreground-child: 3.3.1 istanbul-lib-coverage: 3.2.2 @@ -20221,12 +21325,12 @@ snapshots: cacheable-request@10.2.14: dependencies: - '@types/http-cache-semantics': 4.0.4 + '@types/http-cache-semantics': 4.2.0 get-stream: 6.0.1 http-cache-semantics: 4.2.0 keyv: 4.5.4 mimic-response: 4.0.0 - normalize-url: 8.1.0 + normalize-url: 8.1.1 responselike: 3.0.0 call-bind-apply-helpers@1.0.2: @@ -20234,7 +21338,7 @@ snapshots: es-errors: 1.3.0 function-bind: 1.1.2 - call-bind@1.0.8: + call-bind@1.0.9: dependencies: call-bind-apply-helpers: 1.0.2 es-define-property: 1.0.1 @@ -20265,12 +21369,12 @@ snapshots: caniuse-api@3.0.0: dependencies: - browserslist: 4.28.1 - caniuse-lite: 1.0.30001777 + browserslist: 4.28.2 + caniuse-lite: 1.0.30001797 lodash.memoize: 4.1.2 lodash.uniq: 4.5.0 - caniuse-lite@1.0.30001777: {} + caniuse-lite@1.0.30001797: {} capital-case@1.0.4: dependencies: @@ -20283,7 +21387,7 @@ snapshots: chai@5.3.3: dependencies: assertion-error: 2.0.1 - check-error: 2.1.1 + check-error: 2.1.3 deep-eql: 5.0.2 loupe: 3.2.1 pathval: 2.0.1 @@ -20329,7 +21433,7 @@ snapshots: path-case: 3.0.4 sentence-case: 3.0.4 snake-case: 3.0.4 - tslib: 2.8.1 + tslib: 2.6.3 char-regex@1.0.2: {} @@ -20343,7 +21447,7 @@ snapshots: chardet@2.1.1: {} - check-error@2.1.1: {} + check-error@2.1.3: {} cheerio-select@2.1.0: dependencies: @@ -20378,7 +21482,7 @@ snapshots: chromatic@16.10.0: dependencies: - semver: 7.7.4 + semver: 7.8.4 chrome-devtools-mcp@1.3.0: {} @@ -20394,6 +21498,8 @@ snapshots: cjs-module-lexer@1.4.3: {} + cjs-module-lexer@2.2.0: {} + class-transformer@0.5.1: {} classnames@2.5.1: {} @@ -20498,8 +21604,6 @@ snapshots: commander@10.0.1: {} - commander@13.1.0: {} - commander@14.0.0: {} commander@14.0.2: {} @@ -20573,7 +21677,7 @@ snapshots: constant-case@3.0.4: dependencies: no-case: 3.0.4 - tslib: 2.8.1 + tslib: 2.6.3 upper-case: 2.0.2 constants-browserify@1.0.0: {} @@ -20586,6 +21690,8 @@ snapshots: content-type@1.0.5: {} + content-type@2.0.0: {} + continuation-local-storage@3.2.1: dependencies: async-listener: 0.6.10 @@ -20593,19 +21699,19 @@ snapshots: convert-source-map@2.0.0: {} - cookie-signature@1.0.6: {} + cookie-signature@1.0.7: {} cookie@0.7.2: {} cookie@1.1.1: {} - copy-anything@2.0.6: + copy-anything@3.0.5: dependencies: - is-what: 3.14.1 + is-what: 4.1.16 copy-text-to-clipboard@3.2.2: {} - copy-webpack-plugin@11.0.0(webpack@5.105.4(esbuild@0.28.1)): + copy-webpack-plugin@11.0.0(webpack@5.107.2(esbuild@0.28.1)(postcss@8.5.10)): dependencies: fast-glob: 3.3.3 glob-parent: 6.0.2 @@ -20613,17 +21719,17 @@ snapshots: normalize-path: 3.0.0 schema-utils: 4.3.3 serialize-javascript: 7.0.5 - webpack: 5.105.4(esbuild@0.28.1) + webpack: 5.107.2(esbuild@0.28.1)(postcss@8.5.10) - core-js-compat@3.47.0: + core-js-compat@3.49.0: dependencies: - browserslist: 4.28.1 + browserslist: 4.28.2 - core-js@3.47.0: {} + core-js@3.49.0: {} core-util-is@1.0.3: {} - cors@2.8.5: + cors@2.8.6: dependencies: object-assign: 4.1.1 vary: 1.1.2 @@ -20680,14 +21786,14 @@ snapshots: crypto-browserify@3.12.1: dependencies: browserify-cipher: 1.0.1 - browserify-sign: 4.2.5 + browserify-sign: 4.2.6 create-ecdh: 4.0.4 create-hash: 1.2.0 create-hmac: 1.1.7 diffie-hellman: 5.0.3 hash-base: 3.0.5 inherits: 2.0.4 - pbkdf2: 3.1.5 + pbkdf2: 3.1.6 public-encrypt: 4.0.3 randombytes: 2.1.0 randomfill: 1.0.4 @@ -20699,20 +21805,20 @@ snapshots: css-blank-pseudo@7.0.1(postcss@8.5.10): dependencies: postcss: 8.5.10 - postcss-selector-parser: 7.1.1 + postcss-selector-parser: 7.1.2 - css-declaration-sorter@7.3.0(postcss@8.5.10): + css-declaration-sorter@7.4.0(postcss@8.5.10): dependencies: postcss: 8.5.10 css-has-pseudo@7.0.3(postcss@8.5.10): dependencies: - '@csstools/selector-specificity': 5.0.0(postcss-selector-parser@7.1.1) + '@csstools/selector-specificity': 5.0.0(postcss-selector-parser@7.1.2) postcss: 8.5.10 - postcss-selector-parser: 7.1.1 + postcss-selector-parser: 7.1.2 postcss-value-parser: 4.2.0 - css-loader@6.11.0(webpack@5.105.4(esbuild@0.28.1)): + css-loader@6.11.0(webpack@5.107.2(esbuild@0.28.1)(postcss@8.5.10)): dependencies: icss-utils: 5.1.0(postcss@8.5.10) postcss: 8.5.10 @@ -20721,11 +21827,11 @@ snapshots: postcss-modules-scope: 3.2.1(postcss@8.5.10) postcss-modules-values: 4.0.0(postcss@8.5.10) postcss-value-parser: 4.2.0 - semver: 7.8.1 + semver: 7.8.4 optionalDependencies: - webpack: 5.105.4(esbuild@0.28.1) + webpack: 5.107.2(esbuild@0.28.1)(postcss@8.5.10) - css-minimizer-webpack-plugin@5.0.1(clean-css@5.3.3)(esbuild@0.28.1)(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.107.2(esbuild@0.28.1)(postcss@8.5.10)): dependencies: '@jridgewell/trace-mapping': 0.3.31 cssnano: 6.1.2(postcss@8.5.10) @@ -20733,7 +21839,7 @@ snapshots: postcss: 8.5.10 schema-utils: 4.3.3 serialize-javascript: 7.0.5 - webpack: 5.105.4(esbuild@0.28.1) + webpack: 5.107.2(esbuild@0.28.1)(postcss@8.5.10) optionalDependencies: clean-css: 5.3.3 esbuild: 0.28.1 @@ -20772,14 +21878,14 @@ snapshots: css.escape@1.5.1: {} - cssdb@8.4.3: {} + cssdb@8.9.0: {} cssesc@3.0.0: {} cssnano-preset-advanced@6.1.2(postcss@8.5.10): dependencies: - autoprefixer: 10.4.22(postcss@8.5.10) - browserslist: 4.28.1 + autoprefixer: 10.5.0(postcss@8.5.10) + browserslist: 4.28.2 cssnano-preset-default: 6.1.2(postcss@8.5.10) postcss: 8.5.10 postcss-discard-unused: 6.0.5(postcss@8.5.10) @@ -20789,8 +21895,8 @@ snapshots: cssnano-preset-default@6.1.2(postcss@8.5.10): dependencies: - browserslist: 4.28.1 - css-declaration-sorter: 7.3.0(postcss@8.5.10) + browserslist: 4.28.2 + css-declaration-sorter: 7.4.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) @@ -20871,7 +21977,7 @@ snapshots: dataloader@2.2.3: {} - dayjs@1.11.19: {} + dayjs@1.11.21: {} debounce@1.2.1: {} @@ -20887,7 +21993,7 @@ snapshots: decimal.js@10.6.0: {} - decode-named-character-reference@1.2.0: + decode-named-character-reference@1.3.0: dependencies: character-entities: 2.0.2 @@ -20903,7 +22009,7 @@ snapshots: default-browser-id@5.0.1: {} - default-browser@5.4.0: + default-browser@5.5.0: dependencies: bundle-name: 4.1.0 default-browser-id: 5.0.1 @@ -20951,8 +22057,6 @@ snapshots: detect-indent@6.1.0: {} - detect-libc@1.0.3: {} - detect-libc@2.1.2: {} detect-node@2.1.0: {} @@ -20974,7 +22078,7 @@ snapshots: diagnostic-channel@1.1.1: dependencies: - semver: 7.8.1 + semver: 7.8.4 didyoumean@1.2.2: {} @@ -21049,7 +22153,7 @@ snapshots: dot-case@3.0.4: dependencies: no-case: 3.0.4 - tslib: 2.8.1 + tslib: 2.6.3 dot-prop@6.0.1: dependencies: @@ -21081,7 +22185,7 @@ snapshots: ee-first@1.1.1: {} - electron-to-chromium@1.5.307: {} + electron-to-chromium@1.5.371: {} elliptic@6.6.1: dependencies: @@ -21111,14 +22215,12 @@ snapshots: enabled@2.0.0: {} - encodeurl@1.0.2: {} - encodeurl@2.0.0: {} - enhanced-resolve@5.20.0: + enhanced-resolve@5.23.0: dependencies: graceful-fs: 4.2.11 - tapable: 2.3.0 + tapable: 2.3.3 entities@2.2.0: {} @@ -21139,19 +22241,19 @@ snapshots: dependencies: stackframe: 1.3.4 - es-abstract@1.24.0: + es-abstract@1.24.2: dependencies: array-buffer-byte-length: 1.0.2 arraybuffer.prototype.slice: 1.0.4 available-typed-arrays: 1.0.7 - call-bind: 1.0.8 + call-bind: 1.0.9 call-bound: 1.0.4 data-view-buffer: 1.0.2 data-view-byte-length: 1.0.2 data-view-byte-offset: 1.0.1 es-define-property: 1.0.1 es-errors: 1.3.0 - es-object-atoms: 1.1.1 + es-object-atoms: 1.1.2 es-set-tostringtag: 2.1.0 es-to-primitive: 1.3.0 function.prototype.name: 1.1.8 @@ -21163,7 +22265,7 @@ snapshots: has-property-descriptors: 1.0.2 has-proto: 1.2.0 has-symbols: 1.1.0 - hasown: 2.0.2 + hasown: 2.0.4 internal-slot: 1.1.0 is-array-buffer: 3.0.5 is-callable: 1.2.7 @@ -21181,26 +22283,26 @@ snapshots: object.assign: 4.1.7 own-keys: 1.0.1 regexp.prototype.flags: 1.5.4 - safe-array-concat: 1.1.3 + safe-array-concat: 1.1.4 safe-push-apply: 1.0.0 safe-regex-test: 1.1.0 set-proto: 1.0.0 stop-iteration-iterator: 1.1.0 - string.prototype.trim: 1.2.10 - string.prototype.trimend: 1.0.9 + string.prototype.trim: 1.2.11 + string.prototype.trimend: 1.0.10 string.prototype.trimstart: 1.0.8 typed-array-buffer: 1.0.3 typed-array-byte-length: 1.0.3 typed-array-byte-offset: 1.0.4 - typed-array-length: 1.0.7 + typed-array-length: 1.0.8 unbox-primitive: 1.1.0 - which-typed-array: 1.1.19 + which-typed-array: 1.1.22 es-aggregate-error@1.0.14: dependencies: define-data-property: 1.1.4 define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.2 es-errors: 1.3.0 function-bind: 1.1.2 globalthis: 1.0.4 @@ -21211,9 +22313,9 @@ snapshots: es-errors@1.3.0: {} - es-module-lexer@2.0.0: {} + es-module-lexer@2.1.0: {} - es-object-atoms@1.1.1: + es-object-atoms@1.1.2: dependencies: es-errors: 1.3.0 @@ -21222,7 +22324,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: @@ -21306,7 +22408,7 @@ snapshots: estree-util-attach-comments@3.0.0: dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 estree-util-build-jsx@3.0.1: dependencies: @@ -21319,7 +22421,7 @@ snapshots: estree-util-scope@1.0.0: dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 devlop: 1.1.0 estree-util-to-js@2.0.0: @@ -21330,7 +22432,7 @@ snapshots: estree-util-value-to-estree@3.5.0: dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 estree-util-visit@2.0.0: dependencies: @@ -21341,7 +22443,7 @@ snapshots: estree-walker@3.0.3: dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 esutils@2.0.3: {} @@ -21351,7 +22453,7 @@ snapshots: eval@0.1.8: dependencies: - '@types/node': 24.10.1 + '@types/node': 25.9.2 require-like: 0.1.2 event-target-shim@5.0.1: {} @@ -21360,14 +22462,12 @@ snapshots: events-universal@1.0.1: dependencies: - bare-events: 2.8.2 + bare-events: 2.9.1 transitivePeerDependencies: - bare-abort-controller events@3.3.0: {} - eventsource-parser@3.1.0: {} - evp_bytestokey@1.0.3: dependencies: md5.js: 1.3.5 @@ -21400,13 +22500,13 @@ snapshots: content-disposition: 0.5.4 content-type: 1.0.5 cookie: 0.7.2 - cookie-signature: 1.0.6 + cookie-signature: 1.0.7 debug: 2.6.9 depd: 2.0.0 encodeurl: 2.0.0 escape-html: 1.0.3 etag: 1.8.1 - finalhandler: 1.3.1 + finalhandler: 1.3.2 fresh: 0.5.2 http-errors: 2.0.1 merge-descriptors: 1.0.3 @@ -21418,8 +22518,8 @@ snapshots: qs: 6.15.2 range-parser: 1.2.1 safe-buffer: 5.2.1 - send: 0.19.0 - serve-static: 1.16.2 + send: 0.19.2 + serve-static: 1.16.3 setprototypeof: 1.2.0 statuses: 2.0.2 type-is: 1.6.18 @@ -21448,6 +22548,10 @@ snapshots: fast-json-stable-stringify@2.1.0: {} + fast-levenshtein@3.0.0: + dependencies: + fastest-levenshtein: 1.0.16 + fast-uri@3.1.2: {} fast-xml-builder@1.2.0: @@ -21457,13 +22561,15 @@ snapshots: fast-xml-parser@5.8.0: dependencies: - '@nodable/entities': 2.1.0 + '@nodable/entities': 2.1.1 fast-xml-builder: 1.2.0 path-expression-matcher: 1.5.0 - strnum: 2.3.0 + strnum: 2.4.0 xml-naming: 0.1.0 - fastq@1.19.1: + fastest-levenshtein@1.0.16: {} + + fastq@1.20.1: dependencies: reusify: 1.1.0 @@ -21473,25 +22579,7 @@ snapshots: faye-websocket@0.11.4: dependencies: - websocket-driver: 0.7.4 - - fb-watchman@2.0.2: - dependencies: - bser: 2.1.1 - - fbjs-css-vars@1.0.2: {} - - fbjs@3.0.5: - dependencies: - cross-fetch: 3.2.0 - fbjs-css-vars: 1.0.2 - loose-envify: 1.4.0 - object-assign: 4.1.1 - promise: 7.3.1 - setimmediate: 1.0.5 - ua-parser-js: 1.0.41 - transitivePeerDependencies: - - encoding + websocket-driver: 0.7.5 fd-package-json@2.0.0: dependencies: @@ -21516,11 +22604,11 @@ snapshots: dependencies: escape-string-regexp: 1.0.5 - file-loader@6.2.0(webpack@5.105.4(esbuild@0.28.1)): + file-loader@6.2.0(webpack@5.107.2(esbuild@0.28.1)(postcss@8.5.10)): dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 - webpack: 5.105.4(esbuild@0.28.1) + webpack: 5.107.2(esbuild@0.28.1)(postcss@8.5.10) filename-reserved-regex@2.0.0: {} @@ -21534,14 +22622,14 @@ snapshots: dependencies: to-regex-range: 5.0.1 - finalhandler@1.3.1: + finalhandler@1.3.2: dependencies: debug: 2.6.9 encodeurl: 2.0.0 escape-html: 1.0.3 on-finished: 2.4.1 parseurl: 1.3.3 - statuses: 2.0.1 + statuses: 2.0.2 unpipe: 1.0.0 transitivePeerDependencies: - supports-color @@ -21633,10 +22721,10 @@ snapshots: fresh@0.5.2: {} - fs-extra@11.3.2: + fs-extra@11.3.5: dependencies: graceful-fs: 4.2.11 - jsonfile: 6.2.0 + jsonfile: 6.2.1 universalify: 2.0.1 fs.realpath@1.0.0: {} @@ -21651,11 +22739,11 @@ snapshots: function.prototype.name@1.1.8: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 call-bound: 1.0.4 define-properties: 1.2.1 functions-have-names: 1.2.3 - hasown: 2.0.2 + hasown: 2.0.4 is-callable: 1.2.7 functions-have-names@1.2.3: {} @@ -21670,17 +22758,19 @@ snapshots: get-caller-file@2.0.5: {} + get-east-asian-width@1.6.0: {} + get-intrinsic@1.3.0: dependencies: call-bind-apply-helpers: 1.0.2 es-define-property: 1.0.1 es-errors: 1.3.0 - es-object-atoms: 1.1.1 + es-object-atoms: 1.1.2 function-bind: 1.1.2 get-proto: 1.0.1 gopd: 1.2.0 has-symbols: 1.1.0 - hasown: 2.0.2 + hasown: 2.0.4 math-intrinsics: 1.1.0 get-own-enumerable-property-symbols@3.0.2: {} @@ -21688,7 +22778,7 @@ snapshots: get-proto@1.0.1: dependencies: dunder-proto: 1.0.1 - es-object-atoms: 1.1.1 + es-object-atoms: 1.1.2 get-stdin@8.0.0: {} @@ -21700,10 +22790,6 @@ snapshots: es-errors: 1.3.0 get-intrinsic: 1.3.0 - get-tsconfig@4.13.0: - dependencies: - resolve-pkg-maps: 1.0.0 - github-slugger@1.5.0: {} glob-parent@5.1.2: @@ -21731,22 +22817,16 @@ snapshots: glob@11.1.0: dependencies: - foreground-child: 3.3.1 - jackspeak: 4.1.1 - minimatch: 10.2.4 - minipass: 7.1.3 - package-json-from-dist: 1.0.1 - path-scurry: 2.0.2 - - glob@13.0.0: - dependencies: - minimatch: 10.2.4 + foreground-child: 3.3.1 + jackspeak: 4.2.3 + minimatch: 10.2.5 minipass: 7.1.3 + package-json-from-dist: 1.0.1 path-scurry: 2.0.2 glob@13.0.6: dependencies: - minimatch: 10.2.4 + minimatch: 10.2.5 minipass: 7.1.3 path-scurry: 2.0.2 @@ -21765,7 +22845,7 @@ snapshots: es6-error: 4.1.1 matcher: 3.0.0 roarr: 2.15.4 - semver: 7.7.4 + semver: 7.8.4 serialize-error: 7.0.1 global-dirs@3.0.1: @@ -21823,18 +22903,18 @@ snapshots: graceful-fs@4.2.11: {} - graphql-config@5.1.5(@types/node@22.19.15)(graphql@16.12.0)(typescript@6.0.3): + graphql-config@5.1.6(@types/node@22.19.20)(graphql@16.14.2)(typescript@6.0.3): dependencies: - '@graphql-tools/graphql-file-loader': 8.1.8(graphql@16.12.0) - '@graphql-tools/json-file-loader': 8.0.25(graphql@16.12.0) - '@graphql-tools/load': 8.1.7(graphql@16.12.0) - '@graphql-tools/merge': 9.1.6(graphql@16.12.0) - '@graphql-tools/url-loader': 8.0.33(@types/node@22.19.15)(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) + '@graphql-tools/graphql-file-loader': 8.1.14(graphql@16.14.2) + '@graphql-tools/json-file-loader': 8.0.28(graphql@16.14.2) + '@graphql-tools/load': 8.1.10(graphql@16.14.2) + '@graphql-tools/merge': 9.1.9(graphql@16.14.2) + '@graphql-tools/url-loader': 9.1.2(@types/node@22.19.20)(graphql@16.14.2) + '@graphql-tools/utils': 11.1.0(graphql@16.14.2) cosmiconfig: 8.3.6(typescript@6.0.3) - graphql: 16.12.0 + graphql: 16.14.2 jiti: 2.6.1 - minimatch: 9.0.9 + minimatch: 10.2.5 string-env-interpolation: 1.0.1 tslib: 2.8.1 transitivePeerDependencies: @@ -21842,43 +22922,41 @@ snapshots: - '@types/node' - bufferutil - crossws - - supports-color - typescript - - uWebSockets.js - utf-8-validate - graphql-depth-limit@1.1.0(graphql@16.12.0): + graphql-depth-limit@1.1.0(graphql@16.14.2): dependencies: arrify: 1.0.1 - graphql: 16.12.0 + graphql: 16.14.2 - graphql-middleware@6.1.35(graphql@16.12.0): + graphql-middleware@6.1.35(graphql@16.14.2): dependencies: - '@graphql-tools/delegate': 8.8.1(graphql@16.12.0) - '@graphql-tools/schema': 8.5.1(graphql@16.12.0) - graphql: 16.12.0 + '@graphql-tools/delegate': 8.8.1(graphql@16.14.2) + '@graphql-tools/schema': 8.5.1(graphql@16.14.2) + graphql: 16.14.2 - graphql-request@6.1.0(graphql@16.12.0): + graphql-request@6.1.0(graphql@16.14.2): dependencies: - '@graphql-typed-document-node/core': 3.2.0(graphql@16.12.0) + '@graphql-typed-document-node/core': 3.2.0(graphql@16.14.2) cross-fetch: 3.2.0 - graphql: 16.12.0 + graphql: 16.14.2 transitivePeerDependencies: - encoding - graphql-scalars@1.25.0(graphql@16.12.0): + graphql-scalars@1.25.0(graphql@16.14.2): dependencies: - graphql: 16.12.0 + graphql: 16.14.2 tslib: 2.8.1 - graphql-tag@2.12.6(graphql@16.12.0): + graphql-tag@2.12.6(graphql@16.14.2): dependencies: - graphql: 16.12.0 + graphql: 16.14.2 tslib: 2.8.1 - graphql-ws@6.0.6(graphql@16.12.0)(ws@8.21.0): + graphql-ws@6.0.8(graphql@16.14.2)(ws@8.21.0): dependencies: - graphql: 16.12.0 + graphql: 16.14.2 optionalDependencies: ws: 8.21.0 @@ -21886,7 +22964,7 @@ snapshots: dependencies: iterall: 1.3.0 - graphql@16.12.0: {} + graphql@16.14.2: {} gray-matter@4.0.3: dependencies: @@ -21944,10 +23022,6 @@ snapshots: inherits: 2.0.4 minimalistic-assert: 1.0.1 - hasown@2.0.2: - dependencies: - function-bind: 1.1.2 - hasown@2.0.4: dependencies: function-bind: 1.1.2 @@ -21958,7 +23032,7 @@ snapshots: '@types/unist': 3.0.3 devlop: 1.1.0 hastscript: 9.0.1 - property-information: 7.1.0 + property-information: 7.2.0 vfile: 6.0.3 vfile-location: 5.0.3 web-namespaces: 2.0.1 @@ -21971,21 +23045,21 @@ snapshots: dependencies: '@types/hast': 3.0.4 '@types/unist': 3.0.3 - '@ungap/structured-clone': 1.3.0 + '@ungap/structured-clone': 1.3.1 hast-util-from-parse5: 8.0.3 - hast-util-to-parse5: 8.0.0 + hast-util-to-parse5: 8.0.1 html-void-elements: 3.0.0 mdast-util-to-hast: 13.2.1 parse5: 7.3.0 unist-util-position: 5.0.0 - unist-util-visit: 5.0.0 + unist-util-visit: 5.1.0 vfile: 6.0.3 web-namespaces: 2.0.1 zwitch: 2.0.4 hast-util-to-estree@3.1.3: dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 '@types/estree-jsx': 1.0.5 '@types/hast': 3.0.4 comma-separated-tokens: 2.0.3 @@ -21996,7 +23070,7 @@ snapshots: mdast-util-mdx-expression: 2.0.1 mdast-util-mdx-jsx: 3.2.0 mdast-util-mdxjs-esm: 2.0.1 - property-information: 7.1.0 + property-information: 7.2.0 space-separated-tokens: 2.0.2 style-to-js: 1.1.21 unist-util-position: 5.0.0 @@ -22006,7 +23080,7 @@ snapshots: hast-util-to-jsx-runtime@2.3.6: dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 '@types/hast': 3.0.4 '@types/unist': 3.0.3 comma-separated-tokens: 2.0.3 @@ -22016,7 +23090,7 @@ snapshots: mdast-util-mdx-expression: 2.0.1 mdast-util-mdx-jsx: 3.2.0 mdast-util-mdxjs-esm: 2.0.1 - property-information: 7.1.0 + property-information: 7.2.0 space-separated-tokens: 2.0.2 style-to-js: 1.1.21 unist-util-position: 5.0.0 @@ -22024,12 +23098,12 @@ snapshots: transitivePeerDependencies: - supports-color - hast-util-to-parse5@8.0.0: + hast-util-to-parse5@8.0.1: dependencies: '@types/hast': 3.0.4 comma-separated-tokens: 2.0.3 devlop: 1.1.0 - property-information: 6.5.0 + property-information: 7.2.0 space-separated-tokens: 2.0.2 web-namespaces: 2.0.1 zwitch: 2.0.4 @@ -22043,7 +23117,7 @@ snapshots: '@types/hast': 3.0.4 comma-separated-tokens: 2.0.3 hast-util-parse-selector: 4.0.0 - property-information: 7.1.0 + property-information: 7.2.0 space-separated-tokens: 2.0.2 he@1.2.0: {} @@ -22051,11 +23125,11 @@ snapshots: header-case@2.0.4: dependencies: capital-case: 1.0.4 - tslib: 2.8.1 + tslib: 2.6.3 history@4.10.1: dependencies: - '@babel/runtime': 7.28.4 + '@babel/runtime': 7.29.7 loose-envify: 1.4.0 resolve-pathname: 3.0.0 tiny-invariant: 1.3.3 @@ -22072,9 +23146,9 @@ snapshots: dependencies: react-is: 16.13.1 - hosted-git-info@9.0.2: + hosted-git-info@9.0.3: dependencies: - lru-cache: 11.3.6 + lru-cache: 11.5.1 hpack.js@2.1.6: dependencies: @@ -22099,7 +23173,7 @@ snapshots: he: 1.2.0 param-case: 3.0.4 relateurl: 0.2.7 - terser: 5.44.1 + terser: 5.48.0 html-minifier-terser@7.2.0: dependencies: @@ -22109,21 +23183,21 @@ snapshots: entities: 4.5.0 param-case: 3.0.4 relateurl: 0.2.7 - terser: 5.44.1 + terser: 5.48.0 html-tags@3.3.1: {} html-void-elements@3.0.0: {} - html-webpack-plugin@5.6.5(webpack@5.105.4(esbuild@0.28.1)): + html-webpack-plugin@5.6.7(webpack@5.107.2(esbuild@0.28.1)(postcss@8.5.10)): dependencies: '@types/html-minifier-terser': 6.1.0 html-minifier-terser: 6.1.0 lodash: 4.18.1 pretty-error: 4.0.0 - tapable: 2.3.0 + tapable: 2.3.3 optionalDependencies: - webpack: 5.105.4(esbuild@0.28.1) + webpack: 5.107.2(esbuild@0.28.1)(postcss@8.5.10) htmlparser2@6.1.0: dependencies: @@ -22143,19 +23217,12 @@ snapshots: http-deceiver@1.2.7: {} - http-errors@1.6.3: + http-errors@1.8.1: dependencies: depd: 1.1.2 - inherits: 2.0.3 - setprototypeof: 1.1.0 - statuses: 1.5.0 - - http-errors@2.0.0: - dependencies: - depd: 2.0.0 inherits: 2.0.4 setprototypeof: 1.2.0 - statuses: 2.0.1 + statuses: 1.5.0 toidentifier: 1.0.1 http-errors@2.0.1: @@ -22222,7 +23289,7 @@ snapshots: dependencies: safer-buffer: 2.1.2 - iconv-lite@0.7.0: + iconv-lite@0.7.2: dependencies: safer-buffer: 2.1.2 @@ -22259,6 +23326,13 @@ snapshots: cjs-module-lexer: 1.4.3 module-details-from-path: 1.0.4 + import-in-the-middle@2.0.6: + dependencies: + acorn: 8.16.0 + acorn-import-attributes: 1.9.5(acorn@8.16.0) + cjs-module-lexer: 2.2.0 + module-details-from-path: 1.0.4 + import-lazy@4.0.0: {} imurmurhash@0.1.4: {} @@ -22276,8 +23350,6 @@ snapshots: once: 1.4.0 wrappy: 1.0.2 - inherits@2.0.3: {} - inherits@2.0.4: {} ini@1.3.8: {} @@ -22286,9 +23358,9 @@ snapshots: inline-style-parser@0.2.7: {} - inquirer@8.2.7(@types/node@22.19.15): + inquirer@8.2.7(@types/node@22.19.20): dependencies: - '@inquirer/external-editor': 1.0.3(@types/node@22.19.15) + '@inquirer/external-editor': 1.0.3(@types/node@22.19.20) ansi-escapes: 4.3.2 chalk: 4.1.2 cli-cursor: 3.1.0 @@ -22309,8 +23381,8 @@ snapshots: internal-slot@1.1.0: dependencies: es-errors: 1.3.0 - hasown: 2.0.2 - side-channel: 1.1.0 + hasown: 2.0.4 + side-channel: 1.1.1 invariant@2.2.4: dependencies: @@ -22320,7 +23392,7 @@ snapshots: ipaddr.js@1.9.1: {} - ipaddr.js@2.3.0: {} + ipaddr.js@2.4.0: {} is-absolute@1.0.0: dependencies: @@ -22341,7 +23413,7 @@ snapshots: is-array-buffer@3.0.5: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 call-bound: 1.0.4 get-intrinsic: 1.3.0 @@ -22374,9 +23446,9 @@ snapshots: dependencies: ci-info: 3.9.0 - is-core-module@2.16.1: + is-core-module@2.16.2: dependencies: - hasown: 2.0.2 + hasown: 2.0.4 is-data-view@1.0.2: dependencies: @@ -22432,7 +23504,7 @@ snapshots: is-lower-case@2.0.2: dependencies: - tslib: 2.8.1 + tslib: 2.6.3 is-map@2.0.3: {} @@ -22440,12 +23512,12 @@ snapshots: is-nan@1.3.2: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 define-properties: 1.2.1 is-negative-zero@2.0.3: {} - is-network-error@1.3.0: {} + is-network-error@1.3.2: {} is-npm@6.1.0: {} @@ -22479,7 +23551,7 @@ snapshots: call-bound: 1.0.4 gopd: 1.2.0 has-tostringtag: 1.0.2 - hasown: 2.0.2 + hasown: 2.0.4 is-regexp@1.0.0: {} @@ -22508,7 +23580,7 @@ snapshots: is-typed-array@1.1.15: dependencies: - which-typed-array: 1.1.19 + which-typed-array: 1.1.22 is-typedarray@1.0.0: {} @@ -22520,7 +23592,7 @@ snapshots: is-upper-case@2.0.2: dependencies: - tslib: 2.8.1 + tslib: 2.6.3 is-weakmap@2.0.2: {} @@ -22533,7 +23605,7 @@ snapshots: call-bound: 1.0.4 get-intrinsic: 1.3.0 - is-what@3.14.1: {} + is-what@4.1.16: {} is-windows@1.0.2: {} @@ -22541,7 +23613,7 @@ snapshots: dependencies: is-docker: 2.2.1 - is-wsl@3.1.0: + is-wsl@3.1.1: dependencies: is-inside-container: 1.0.0 @@ -22565,6 +23637,10 @@ snapshots: dependencies: ws: 8.21.0 + isows@1.0.7(ws@8.21.0): + dependencies: + ws: 8.21.0 + istanbul-lib-coverage@3.2.2: {} istanbul-lib-report@3.0.1: @@ -22586,14 +23662,14 @@ snapshots: optionalDependencies: '@pkgjs/parseargs': 0.11.0 - jackspeak@4.1.1: + jackspeak@4.2.3: dependencies: - '@isaacs/cliui': 8.0.2 + '@isaacs/cliui': 9.0.0 jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 24.10.1 + '@types/node': 25.9.2 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -22601,13 +23677,13 @@ snapshots: jest-worker@27.5.1: dependencies: - '@types/node': 24.10.1 + '@types/node': 25.9.2 merge-stream: 2.0.0 supports-color: 8.1.1 jest-worker@29.7.0: dependencies: - '@types/node': 24.10.1 + '@types/node': 25.9.2 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -22650,7 +23726,7 @@ snapshots: http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.22 + nwsapi: 2.2.24 parse5: 7.3.0 rrweb-cssom: 0.8.0 saxes: 6.0.0 @@ -22683,8 +23759,6 @@ snapshots: json-schema-traverse@1.0.0: {} - json-schema@0.4.0: {} - json-stringify-safe@5.0.1: {} json-to-pretty-yaml@1.2.2: @@ -22698,15 +23772,15 @@ snapshots: json5@2.2.3: {} - jsonfile@6.2.0: + jsonfile@6.2.1: dependencies: universalify: 2.0.1 optionalDependencies: graceful-fs: 4.2.11 - jsonwebtoken@9.0.2: + jsonwebtoken@9.0.3: dependencies: - jws: 3.2.3 + jws: 4.0.1 lodash.includes: 4.3.0 lodash.isboolean: 3.0.3 lodash.isinteger: 4.0.4 @@ -22715,13 +23789,7 @@ snapshots: lodash.isstring: 4.0.1 lodash.once: 4.1.1 ms: 2.1.3 - semver: 7.7.4 - - jwa@1.4.2: - dependencies: - buffer-equal-constant-time: 1.0.1 - ecdsa-sig-formatter: 1.0.11 - safe-buffer: 5.2.1 + semver: 7.8.4 jwa@2.0.1: dependencies: @@ -22729,12 +23797,7 @@ snapshots: ecdsa-sig-formatter: 1.0.11 safe-buffer: 5.2.1 - jws@3.2.3: - dependencies: - jwa: 1.4.2 - safe-buffer: 5.2.1 - - jws@4.0.0: + jws@4.0.1: dependencies: jwa: 2.0.1 safe-buffer: 5.2.1 @@ -22751,10 +23814,10 @@ snapshots: kleur@3.0.3: {} - knip@5.88.1(@types/node@22.19.15)(typescript@6.0.3): + knip@5.88.1(@types/node@22.19.20)(typescript@6.0.3): dependencies: '@nodelib/fs.walk': 1.2.8 - '@types/node': 22.19.15 + '@types/node': 22.19.20 fast-glob: 3.3.3 formatly: 0.3.0 jiti: 2.6.1 @@ -22767,7 +23830,7 @@ snapshots: typescript: 6.0.3 unbash: 2.2.0 yaml: 2.8.3 - zod: 4.1.13 + zod: 4.4.3 knuth-shuffle-seeded@1.0.6: dependencies: @@ -22784,18 +23847,17 @@ snapshots: picocolors: 1.1.1 shell-quote: 1.8.4 - less@4.4.2: + less@4.6.4: dependencies: - copy-anything: 2.0.6 + copy-anything: 3.0.5 parse-node-version: 1.0.1 - tslib: 2.8.1 optionalDependencies: errno: 0.1.8 graceful-fs: 4.2.11 image-size: 0.5.5 make-dir: 2.1.0 mime: 1.6.0 - needle: 3.3.1 + needle: 3.5.0 source-map: 0.6.1 leven@2.1.0: {} @@ -22870,7 +23932,7 @@ snapshots: through: 2.3.8 wrap-ansi: 7.0.0 - loader-runner@4.3.1: {} + loader-runner@4.3.2: {} loader-utils@2.0.4: dependencies: @@ -22967,11 +24029,11 @@ snapshots: lower-case-first@2.0.2: dependencies: - tslib: 2.8.1 + tslib: 2.6.3 lower-case@2.0.2: dependencies: - tslib: 2.8.1 + tslib: 2.6.3 lowercase-keys@3.0.0: {} @@ -22979,13 +24041,13 @@ snapshots: lru-cache@11.3.6: {} + lru-cache@11.5.1: {} + lru-cache@5.1.1: dependencies: yallist: 3.1.1 - lru-cache@7.18.3: {} - - lru.min@1.1.3: {} + lru.min@1.1.4: {} luxon@3.7.2: {} @@ -22995,10 +24057,10 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 - magicast@0.5.2: + magicast@0.5.3: 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: @@ -23013,7 +24075,7 @@ snapshots: make-dir@4.0.0: dependencies: - semver: 7.8.1 + semver: 7.8.4 map-cache@0.2.2: {} @@ -23021,8 +24083,6 @@ snapshots: markdown-table@3.0.4: {} - marked@16.4.2: {} - matcher@3.0.0: dependencies: escape-string-regexp: 4.0.0 @@ -23031,7 +24091,7 @@ snapshots: md5.js@1.3.5: dependencies: - hash-base: 3.1.2 + hash-base: 3.0.5 inherits: 2.0.4 safe-buffer: 5.2.1 @@ -23041,7 +24101,7 @@ snapshots: '@types/unist': 3.0.3 ccount: 2.0.1 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.2 + mdast-util-from-markdown: 2.0.3 mdast-util-to-markdown: 2.1.2 parse-entities: 4.0.2 stringify-entities: 4.0.4 @@ -23056,11 +24116,11 @@ snapshots: unist-util-is: 6.0.1 unist-util-visit-parents: 6.0.2 - mdast-util-from-markdown@2.0.2: + mdast-util-from-markdown@2.0.3: dependencies: '@types/mdast': 4.0.4 '@types/unist': 3.0.3 - decode-named-character-reference: 1.2.0 + decode-named-character-reference: 1.3.0 devlop: 1.1.0 mdast-util-to-string: 4.0.0 micromark: 4.0.2 @@ -23078,7 +24138,7 @@ snapshots: '@types/mdast': 4.0.4 devlop: 1.1.0 escape-string-regexp: 5.0.0 - mdast-util-from-markdown: 2.0.2 + mdast-util-from-markdown: 2.0.3 mdast-util-to-markdown: 2.1.2 micromark-extension-frontmatter: 2.0.0 transitivePeerDependencies: @@ -23096,7 +24156,7 @@ snapshots: dependencies: '@types/mdast': 4.0.4 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.2 + mdast-util-from-markdown: 2.0.3 mdast-util-to-markdown: 2.1.2 micromark-util-normalize-identifier: 2.0.1 transitivePeerDependencies: @@ -23105,7 +24165,7 @@ snapshots: mdast-util-gfm-strikethrough@2.0.0: dependencies: '@types/mdast': 4.0.4 - mdast-util-from-markdown: 2.0.2 + mdast-util-from-markdown: 2.0.3 mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color @@ -23115,7 +24175,7 @@ snapshots: '@types/mdast': 4.0.4 devlop: 1.1.0 markdown-table: 3.0.4 - mdast-util-from-markdown: 2.0.2 + mdast-util-from-markdown: 2.0.3 mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color @@ -23124,14 +24184,14 @@ snapshots: dependencies: '@types/mdast': 4.0.4 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.2 + mdast-util-from-markdown: 2.0.3 mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color mdast-util-gfm@3.1.0: dependencies: - mdast-util-from-markdown: 2.0.2 + mdast-util-from-markdown: 2.0.3 mdast-util-gfm-autolink-literal: 2.0.1 mdast-util-gfm-footnote: 2.1.0 mdast-util-gfm-strikethrough: 2.0.0 @@ -23147,7 +24207,7 @@ snapshots: '@types/hast': 3.0.4 '@types/mdast': 4.0.4 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.2 + mdast-util-from-markdown: 2.0.3 mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color @@ -23160,7 +24220,7 @@ snapshots: '@types/unist': 3.0.3 ccount: 2.0.1 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.2 + mdast-util-from-markdown: 2.0.3 mdast-util-to-markdown: 2.1.2 parse-entities: 4.0.2 stringify-entities: 4.0.4 @@ -23171,7 +24231,7 @@ snapshots: mdast-util-mdx@3.0.0: dependencies: - mdast-util-from-markdown: 2.0.2 + mdast-util-from-markdown: 2.0.3 mdast-util-mdx-expression: 2.0.1 mdast-util-mdx-jsx: 3.2.0 mdast-util-mdxjs-esm: 2.0.1 @@ -23185,7 +24245,7 @@ snapshots: '@types/hast': 3.0.4 '@types/mdast': 4.0.4 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.2 + mdast-util-from-markdown: 2.0.3 mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color @@ -23199,12 +24259,12 @@ snapshots: dependencies: '@types/hast': 3.0.4 '@types/mdast': 4.0.4 - '@ungap/structured-clone': 1.3.0 + '@ungap/structured-clone': 1.3.1 devlop: 1.1.0 micromark-util-sanitize-uri: 2.0.1 trim-lines: 3.0.1 unist-util-position: 5.0.0 - unist-util-visit: 5.0.0 + unist-util-visit: 5.1.0 vfile: 6.0.3 mdast-util-to-markdown@2.1.2: @@ -23216,7 +24276,7 @@ snapshots: mdast-util-to-string: 4.0.0 micromark-util-classify-character: 2.0.1 micromark-util-decode-string: 2.0.1 - unist-util-visit: 5.0.0 + unist-util-visit: 5.1.0 zwitch: 2.0.4 mdast-util-to-string@4.0.0: @@ -23231,12 +24291,20 @@ snapshots: media-typer@1.1.0: {} - memfs@4.51.1: + memfs@4.57.6(tslib@2.8.1): dependencies: + '@jsonjoy.com/fs-core': 4.57.6(tslib@2.8.1) + '@jsonjoy.com/fs-fsa': 4.57.6(tslib@2.8.1) + '@jsonjoy.com/fs-node': 4.57.6(tslib@2.8.1) + '@jsonjoy.com/fs-node-builtins': 4.57.6(tslib@2.8.1) + '@jsonjoy.com/fs-node-to-fsa': 4.57.6(tslib@2.8.1) + '@jsonjoy.com/fs-node-utils': 4.57.6(tslib@2.8.1) + '@jsonjoy.com/fs-print': 4.57.6(tslib@2.8.1) + '@jsonjoy.com/fs-snapshot': 4.57.6(tslib@2.8.1) '@jsonjoy.com/json-pack': 1.21.0(tslib@2.8.1) '@jsonjoy.com/util': 1.9.0(tslib@2.8.1) glob-to-regex.js: 1.2.0(tslib@2.8.1) - thingies: 2.5.0(tslib@2.8.1) + thingies: 2.6.0(tslib@2.8.1) tree-dump: 1.1.0(tslib@2.8.1) tslib: 2.8.1 @@ -23248,15 +24316,15 @@ snapshots: merge2@1.4.1: {} - meros@1.3.2(@types/node@22.19.15): + meros@1.3.2(@types/node@22.19.20): optionalDependencies: - '@types/node': 22.19.15 + '@types/node': 22.19.20 methods@1.1.2: {} micromark-core-commonmark@2.0.3: dependencies: - decode-named-character-reference: 1.2.0 + decode-named-character-reference: 1.3.0 devlop: 1.1.0 micromark-factory-destination: 2.0.1 micromark-factory-label: 2.0.1 @@ -23350,7 +24418,7 @@ snapshots: micromark-extension-mdx-expression@3.0.1: dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 devlop: 1.1.0 micromark-factory-mdx-expression: 2.0.3 micromark-factory-space: 2.0.1 @@ -23361,7 +24429,7 @@ snapshots: micromark-extension-mdx-jsx@3.0.2: dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 devlop: 1.1.0 estree-util-is-identifier-name: 3.0.0 micromark-factory-mdx-expression: 2.0.3 @@ -23378,7 +24446,7 @@ snapshots: micromark-extension-mdxjs-esm@3.0.0: dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 devlop: 1.1.0 micromark-core-commonmark: 2.0.3 micromark-util-character: 2.1.1 @@ -23414,7 +24482,7 @@ snapshots: micromark-factory-mdx-expression@2.0.3: dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 devlop: 1.1.0 micromark-factory-space: 2.0.1 micromark-util-character: 2.1.1 @@ -23479,7 +24547,7 @@ snapshots: micromark-util-decode-string@2.0.1: dependencies: - decode-named-character-reference: 1.2.0 + decode-named-character-reference: 1.3.0 micromark-util-character: 2.1.1 micromark-util-decode-numeric-character-reference: 2.0.2 micromark-util-symbol: 2.0.1 @@ -23488,7 +24556,7 @@ snapshots: micromark-util-events-to-acorn@2.0.3: dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 '@types/unist': 3.0.3 devlop: 1.1.0 estree-util-visit: 2.0.0 @@ -23529,9 +24597,9 @@ snapshots: micromark@4.0.2: dependencies: - '@types/debug': 4.1.12 + '@types/debug': 4.1.13 debug: 4.4.3(supports-color@8.1.1) - decode-named-character-reference: 1.2.0 + decode-named-character-reference: 1.3.0 devlop: 1.1.0 micromark-core-commonmark: 2.0.3 micromark-factory-space: 2.0.1 @@ -23589,17 +24657,17 @@ snapshots: min-indent@1.0.1: {} - mini-css-extract-plugin@2.9.4(webpack@5.105.4(esbuild@0.28.1)): + mini-css-extract-plugin@2.10.2(webpack@5.107.2(esbuild@0.28.1)(postcss@8.5.10)): dependencies: schema-utils: 4.3.3 - tapable: 2.3.0 - webpack: 5.105.4(esbuild@0.28.1) + tapable: 2.3.3 + webpack: 5.107.2(esbuild@0.28.1)(postcss@8.5.10) minimalistic-assert@1.0.1: {} minimalistic-crypto-utils@1.0.1: {} - minimatch@10.2.4: + minimatch@10.2.5: dependencies: brace-expansion: 5.0.6 @@ -23630,7 +24698,7 @@ snapshots: '@types/whatwg-url': 11.0.5 whatwg-url: 14.2.0 - mongodb-memory-server-core@10.3.0: + mongodb-memory-server-core@10.4.3: dependencies: async-mutex: 0.5.0 camelcase: 6.3.0 @@ -23638,16 +24706,17 @@ snapshots: find-cache-dir: 3.3.2 follow-redirects: 1.16.0(debug@4.4.3) https-proxy-agent: 7.0.6 - mongodb: 6.21.0 + mongodb: 6.18.0 new-find-package-json: 2.0.0 - semver: 7.8.1 - tar-stream: 3.1.7 + semver: 7.8.4 + tar-stream: 3.2.0 tslib: 2.8.1 yauzl: 3.2.1 transitivePeerDependencies: - '@aws-sdk/credential-providers' - '@mongodb-js/zstd' - bare-abort-controller + - bare-buffer - gcp-metadata - kerberos - mongodb-client-encryption @@ -23656,14 +24725,15 @@ snapshots: - socks - supports-color - mongodb-memory-server@10.3.0: + mongodb-memory-server@10.4.3: dependencies: - mongodb-memory-server-core: 10.3.0 + mongodb-memory-server-core: 10.4.3 tslib: 2.8.1 transitivePeerDependencies: - '@aws-sdk/credential-providers' - '@mongodb-js/zstd' - bare-abort-controller + - bare-buffer - gcp-metadata - kerberos - mongodb-client-encryption @@ -23674,13 +24744,7 @@ snapshots: mongodb@6.18.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 + '@mongodb-js/saslprep': 1.4.11 bson: 6.10.4 mongodb-connection-string-url: 3.0.2 @@ -23703,12 +24767,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 @@ -23741,17 +24805,17 @@ snapshots: mute-stream@0.0.8: {} - mysql2@3.15.3: + mysql2@3.22.5(@types/node@22.19.20): dependencies: + '@types/node': 22.19.20 aws-ssl-profiles: 1.1.2 denque: 2.1.0 generate-function: 2.3.1 - iconv-lite: 0.7.0 + iconv-lite: 0.7.2 long: 5.3.2 - lru.min: 1.1.3 - named-placeholders: 1.1.3 - seq-queue: 0.0.5 - sqlstring: 2.3.3 + lru.min: 1.1.4 + named-placeholders: 1.1.6 + sql-escaper: 1.3.3 mz@2.7.0: dependencies: @@ -23759,18 +24823,18 @@ snapshots: object-assign: 4.1.1 thenify-all: 1.6.0 - named-placeholders@1.1.3: + named-placeholders@1.1.6: dependencies: - lru-cache: 7.18.3 + lru.min: 1.1.4 - nanoid@3.3.11: {} + nanoid@3.3.12: {} native-duplexpair@1.0.0: {} - needle@3.3.1: + needle@3.5.0: dependencies: iconv-lite: 0.6.3 - sax: 1.4.3 + sax: 1.6.0 optional: true negotiator@0.6.3: {} @@ -23817,9 +24881,7 @@ snapshots: node-forge@1.4.0: {} - node-int64@0.4.0: {} - - node-releases@2.0.27: {} + node-releases@2.0.47: {} node-stdlib-browser@1.3.1: dependencies: @@ -23861,8 +24923,8 @@ snapshots: normalize-package-data@8.0.0: dependencies: - hosted-git-info: 9.0.2 - semver: 7.8.1 + hosted-git-info: 9.0.3 + semver: 7.8.4 validate-npm-package-license: 3.0.4 normalize-path@2.1.1: @@ -23871,9 +24933,7 @@ snapshots: normalize-path@3.0.0: {} - normalize-range@0.1.2: {} - - normalize-url@8.1.0: {} + normalize-url@8.1.1: {} npm-run-path@4.0.1: dependencies: @@ -23885,15 +24945,13 @@ snapshots: dependencies: boolbase: 1.0.0 - null-loader@4.0.1(webpack@5.105.4(esbuild@0.28.1)): + null-loader@4.0.1(webpack@5.107.2(esbuild@0.28.1)(postcss@8.5.10)): dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 - webpack: 5.105.4(esbuild@0.28.1) - - nullthrows@1.1.1: {} + webpack: 5.107.2(esbuild@0.28.1)(postcss@8.5.10) - nwsapi@2.2.22: {} + nwsapi@2.2.24: {} object-assign@4.1.1: {} @@ -23903,32 +24961,28 @@ snapshots: object-is@1.1.6: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 define-properties: 1.2.1 object-keys@1.1.1: {} object.assign@4.1.7: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 call-bound: 1.0.4 define-properties: 1.2.1 - es-object-atoms: 1.1.1 + es-object-atoms: 1.1.2 has-symbols: 1.1.0 object-keys: 1.1.1 obuf@1.1.2: {} - obug@2.1.1: {} + obug@2.1.2: {} - oidc-client-ts@3.4.1: + oidc-client-ts@3.5.0: 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 @@ -23949,7 +25003,7 @@ snapshots: open@10.2.0: dependencies: - default-browser: 5.4.0 + default-browser: 5.5.0 define-lazy-prop: 3.0.0 is-inside-container: 1.0.0 wsl-utils: 0.1.0 @@ -23989,34 +25043,6 @@ snapshots: object-keys: 1.1.1 safe-push-apply: 1.0.0 - oxc-parser@0.121.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0): - dependencies: - '@oxc-project/types': 0.121.0 - optionalDependencies: - '@oxc-parser/binding-android-arm-eabi': 0.121.0 - '@oxc-parser/binding-android-arm64': 0.121.0 - '@oxc-parser/binding-darwin-arm64': 0.121.0 - '@oxc-parser/binding-darwin-x64': 0.121.0 - '@oxc-parser/binding-freebsd-x64': 0.121.0 - '@oxc-parser/binding-linux-arm-gnueabihf': 0.121.0 - '@oxc-parser/binding-linux-arm-musleabihf': 0.121.0 - '@oxc-parser/binding-linux-arm64-gnu': 0.121.0 - '@oxc-parser/binding-linux-arm64-musl': 0.121.0 - '@oxc-parser/binding-linux-ppc64-gnu': 0.121.0 - '@oxc-parser/binding-linux-riscv64-gnu': 0.121.0 - '@oxc-parser/binding-linux-riscv64-musl': 0.121.0 - '@oxc-parser/binding-linux-s390x-gnu': 0.121.0 - '@oxc-parser/binding-linux-x64-gnu': 0.121.0 - '@oxc-parser/binding-linux-x64-musl': 0.121.0 - '@oxc-parser/binding-openharmony-arm64': 0.121.0 - '@oxc-parser/binding-wasm32-wasi': 0.121.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) - '@oxc-parser/binding-win32-arm64-msvc': 0.121.0 - '@oxc-parser/binding-win32-ia32-msvc': 0.121.0 - '@oxc-parser/binding-win32-x64-msvc': 0.121.0 - transitivePeerDependencies: - - '@emnapi/core' - - '@emnapi/runtime' - oxc-parser@0.127.0: dependencies: '@oxc-project/types': 0.127.0 @@ -24042,6 +25068,31 @@ snapshots: '@oxc-parser/binding-win32-ia32-msvc': 0.127.0 '@oxc-parser/binding-win32-x64-msvc': 0.127.0 + oxc-parser@0.130.0: + dependencies: + '@oxc-project/types': 0.130.0 + optionalDependencies: + '@oxc-parser/binding-android-arm-eabi': 0.130.0 + '@oxc-parser/binding-android-arm64': 0.130.0 + '@oxc-parser/binding-darwin-arm64': 0.130.0 + '@oxc-parser/binding-darwin-x64': 0.130.0 + '@oxc-parser/binding-freebsd-x64': 0.130.0 + '@oxc-parser/binding-linux-arm-gnueabihf': 0.130.0 + '@oxc-parser/binding-linux-arm-musleabihf': 0.130.0 + '@oxc-parser/binding-linux-arm64-gnu': 0.130.0 + '@oxc-parser/binding-linux-arm64-musl': 0.130.0 + '@oxc-parser/binding-linux-ppc64-gnu': 0.130.0 + '@oxc-parser/binding-linux-riscv64-gnu': 0.130.0 + '@oxc-parser/binding-linux-riscv64-musl': 0.130.0 + '@oxc-parser/binding-linux-s390x-gnu': 0.130.0 + '@oxc-parser/binding-linux-x64-gnu': 0.130.0 + '@oxc-parser/binding-linux-x64-musl': 0.130.0 + '@oxc-parser/binding-openharmony-arm64': 0.130.0 + '@oxc-parser/binding-wasm32-wasi': 0.130.0 + '@oxc-parser/binding-win32-arm64-msvc': 0.130.0 + '@oxc-parser/binding-win32-ia32-msvc': 0.130.0 + '@oxc-parser/binding-win32-x64-msvc': 0.130.0 + oxc-resolver@11.20.0: optionalDependencies: '@oxc-resolver/binding-android-arm-eabi': 11.20.0 @@ -24104,7 +25155,7 @@ snapshots: p-retry@6.2.1: dependencies: '@types/retry': 0.12.2 - is-network-error: 1.3.0 + is-network-error: 1.3.2 retry: 0.13.1 p-timeout@3.2.0: @@ -24118,9 +25169,9 @@ snapshots: package-json@8.1.1: dependencies: got: 12.6.1 - registry-auth-token: 5.1.0 + registry-auth-token: 5.1.1 registry-url: 6.0.1 - semver: 7.8.1 + semver: 7.8.4 pad-right@0.2.2: dependencies: @@ -24142,7 +25193,7 @@ snapshots: asn1.js: 4.10.1 browserify-aes: 1.2.0 evp_bytestokey: 1.0.3 - pbkdf2: 3.1.5 + pbkdf2: 3.1.6 safe-buffer: 5.2.1 parse-entities@4.0.2: @@ -24150,7 +25201,7 @@ snapshots: '@types/unist': 2.0.11 character-entities-legacy: 3.0.0 character-reference-invalid: 2.0.1 - decode-named-character-reference: 1.2.0 + decode-named-character-reference: 1.3.0 is-alphanumerical: 2.0.1 is-decimal: 2.0.1 is-hexadecimal: 2.0.1 @@ -24163,14 +25214,14 @@ snapshots: parse-json@5.2.0: dependencies: - '@babel/code-frame': 7.29.0 + '@babel/code-frame': 7.29.7 error-ex: 1.3.4 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 parse-json@8.3.0: dependencies: - '@babel/code-frame': 7.29.0 + '@babel/code-frame': 7.29.7 index-to-position: 1.2.0 type-fest: 4.41.0 @@ -24194,14 +25245,14 @@ snapshots: pascal-case@3.1.2: dependencies: no-case: 3.0.4 - tslib: 2.8.1 + tslib: 2.6.3 path-browserify@1.0.1: {} path-case@3.0.4: dependencies: dot-case: 3.0.4 - tslib: 2.8.1 + tslib: 2.6.3 path-exists@4.0.0: {} @@ -24230,7 +25281,7 @@ snapshots: path-scurry@2.0.2: dependencies: - lru-cache: 11.3.6 + lru-cache: 11.5.1 minipass: 7.1.3 path-to-regexp@0.1.13: {} @@ -24241,7 +25292,7 @@ snapshots: path-to-regexp@3.3.0: {} - path-to-regexp@8.4.0: {} + path-to-regexp@8.4.2: {} path-type@4.0.0: {} @@ -24251,7 +25302,7 @@ snapshots: pathval@2.0.1: {} - pbkdf2@3.1.5: + pbkdf2@3.1.6: dependencies: create-hash: 1.2.0 create-hmac: 1.1.7 @@ -24264,7 +25315,7 @@ snapshots: pend@1.2.0: {} - pg-connection-string@2.9.1: {} + pg-connection-string@2.13.0: {} picocolors@1.1.1: {} @@ -24327,7 +25378,7 @@ snapshots: postcss-attribute-case-insensitive@7.0.1(postcss@8.5.10): dependencies: postcss: 8.5.10 - postcss-selector-parser: 7.1.1 + postcss-selector-parser: 7.1.2 postcss-calc@9.0.1(postcss@8.5.10): dependencies: @@ -24363,7 +25414,7 @@ snapshots: postcss-colormin@6.1.0(postcss@8.5.10): dependencies: - browserslist: 4.28.1 + browserslist: 4.28.2 caniuse-api: 3.0.0 colord: 2.9.3 postcss: 8.5.10 @@ -24371,7 +25422,7 @@ snapshots: postcss-convert-values@6.1.0(postcss@8.5.10): dependencies: - browserslist: 4.28.1 + browserslist: 4.28.2 postcss: 8.5.10 postcss-value-parser: 4.2.0 @@ -24398,12 +25449,12 @@ snapshots: '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) '@csstools/css-tokenizer': 3.0.4 postcss: 8.5.10 - postcss-selector-parser: 7.1.1 + postcss-selector-parser: 7.1.2 postcss-dir-pseudo-class@9.0.1(postcss@8.5.10): dependencies: postcss: 8.5.10 - postcss-selector-parser: 7.1.1 + postcss-selector-parser: 7.1.2 postcss-discard-comments@6.0.2(postcss@8.5.10): dependencies: @@ -24436,12 +25487,12 @@ snapshots: postcss-focus-visible@10.0.1(postcss@8.5.10): dependencies: postcss: 8.5.10 - postcss-selector-parser: 7.1.1 + postcss-selector-parser: 7.1.2 postcss-focus-within@9.0.1(postcss@8.5.10): dependencies: postcss: 8.5.10 - postcss-selector-parser: 7.1.1 + postcss-selector-parser: 7.1.2 postcss-font-variant@5.0.0(postcss@8.5.10): dependencies: @@ -24462,7 +25513,7 @@ snapshots: postcss: 8.5.10 postcss-value-parser: 4.2.0 read-cache: 1.0.0 - resolve: 1.22.11 + resolve: 1.22.12 postcss-js@4.1.0(postcss@8.5.10): dependencies: @@ -24478,22 +25529,22 @@ snapshots: '@csstools/utilities': 2.0.0(postcss@8.5.10) 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-load-config@6.0.1(jiti@2.6.1)(postcss@8.5.10)(tsx@4.22.4)(yaml@2.8.3): dependencies: lilconfig: 3.1.3 optionalDependencies: jiti: 2.6.1 postcss: 8.5.10 - tsx: 4.21.0 + tsx: 4.22.4 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.10)(typescript@6.0.3)(webpack@5.107.2(esbuild@0.28.1)(postcss@8.5.10)): dependencies: cosmiconfig: 8.3.6(typescript@6.0.3) jiti: 2.6.1 postcss: 8.5.10 - semver: 7.8.1 - webpack: 5.105.4(esbuild@0.28.1) + semver: 7.8.4 + webpack: 5.107.2(esbuild@0.28.1)(postcss@8.5.10) transitivePeerDependencies: - typescript @@ -24516,7 +25567,7 @@ snapshots: postcss-merge-rules@6.1.1(postcss@8.5.10): dependencies: - browserslist: 4.28.1 + browserslist: 4.28.2 caniuse-api: 3.0.0 cssnano-utils: 4.0.2(postcss@8.5.10) postcss: 8.5.10 @@ -24536,7 +25587,7 @@ snapshots: postcss-minify-params@6.1.0(postcss@8.5.10): dependencies: - browserslist: 4.28.1 + browserslist: 4.28.2 cssnano-utils: 4.0.2(postcss@8.5.10) postcss: 8.5.10 postcss-value-parser: 4.2.0 @@ -24554,13 +25605,13 @@ snapshots: dependencies: icss-utils: 5.1.0(postcss@8.5.10) postcss: 8.5.10 - postcss-selector-parser: 7.1.1 + postcss-selector-parser: 7.1.2 postcss-value-parser: 4.2.0 postcss-modules-scope@3.2.1(postcss@8.5.10): dependencies: postcss: 8.5.10 - postcss-selector-parser: 7.1.1 + postcss-selector-parser: 7.1.2 postcss-modules-values@4.0.0(postcss@8.5.10): dependencies: @@ -24574,10 +25625,10 @@ snapshots: postcss-nesting@13.0.2(postcss@8.5.10): 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) + '@csstools/selector-resolve-nested': 3.1.0(postcss-selector-parser@7.1.2) + '@csstools/selector-specificity': 5.0.0(postcss-selector-parser@7.1.2) postcss: 8.5.10 - postcss-selector-parser: 7.1.1 + postcss-selector-parser: 7.1.2 postcss-normalize-charset@6.0.2(postcss@8.5.10): dependencies: @@ -24610,7 +25661,7 @@ snapshots: postcss-normalize-unicode@6.1.0(postcss@8.5.10): dependencies: - browserslist: 4.28.1 + browserslist: 4.28.2 postcss: 8.5.10 postcss-value-parser: 4.2.0 @@ -24648,7 +25699,7 @@ snapshots: postcss: 8.5.10 postcss-value-parser: 4.2.0 - postcss-preset-env@10.4.0(postcss@8.5.10): + postcss-preset-env@10.6.1(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) @@ -24675,23 +25726,27 @@ snapshots: '@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-normalize-display-values': 4.0.1(postcss@8.5.10) '@csstools/postcss-oklab-function': 4.0.12(postcss@8.5.10) + '@csstools/postcss-position-area-property': 1.0.0(postcss@8.5.10) '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.10) + '@csstools/postcss-property-rule-prelude-list': 1.0.0(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-syntax-descriptor-syntax-production': 1.0.1(postcss@8.5.10) + '@csstools/postcss-system-ui-font-family': 1.0.0(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) - browserslist: 4.28.1 + autoprefixer: 10.5.0(postcss@8.5.10) + browserslist: 4.28.2 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) - cssdb: 8.4.3 + cssdb: 8.9.0 postcss: 8.5.10 postcss-attribute-case-insensitive: 7.0.1(postcss@8.5.10) postcss-clamp: 4.1.0(postcss@8.5.10) @@ -24722,7 +25777,7 @@ snapshots: postcss-pseudo-class-any-link@10.0.1(postcss@8.5.10): dependencies: postcss: 8.5.10 - postcss-selector-parser: 7.1.1 + postcss-selector-parser: 7.1.2 postcss-reduce-idents@6.0.3(postcss@8.5.10): dependencies: @@ -24731,7 +25786,7 @@ snapshots: postcss-reduce-initial@6.1.0(postcss@8.5.10): dependencies: - browserslist: 4.28.1 + browserslist: 4.28.2 caniuse-api: 3.0.0 postcss: 8.5.10 @@ -24747,14 +25802,14 @@ snapshots: postcss-selector-not@8.0.1(postcss@8.5.10): dependencies: postcss: 8.5.10 - postcss-selector-parser: 7.1.1 + postcss-selector-parser: 7.1.2 postcss-selector-parser@6.1.2: dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 - postcss-selector-parser@7.1.1: + postcss-selector-parser@7.1.2: dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 @@ -24783,7 +25838,7 @@ snapshots: postcss@8.5.10: dependencies: - nanoid: 3.3.11 + nanoid: 3.3.12 picocolors: 1.1.1 source-map-js: 1.2.1 @@ -24800,11 +25855,11 @@ snapshots: pretty-time@1.1.0: {} - prism-react-renderer@2.4.1(react@19.2.0): + prism-react-renderer@2.4.1(react@19.2.7): dependencies: - '@types/prismjs': 1.26.5 + '@types/prismjs': 1.26.6 clsx: 2.1.1 - react: 19.2.0 + react: 19.2.7 prismjs@1.30.0: {} @@ -24814,10 +25869,6 @@ snapshots: progress@2.0.3: {} - promise@7.3.1: - dependencies: - asap: 2.0.6 - prompts@2.4.2: dependencies: kleur: 3.0.3 @@ -24829,13 +25880,11 @@ snapshots: object-assign: 4.1.1 react-is: 16.13.1 - properties-file@3.6.1: {} + properties-file@4.0.0: {} property-expr@2.0.6: {} - property-information@6.5.0: {} - - property-information@7.1.0: {} + property-information@7.2.0: {} proto-list@1.2.4: {} @@ -24851,7 +25900,7 @@ snapshots: '@protobufjs/path': 1.1.2 '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.1 - '@types/node': 24.10.1 + '@types/node': 25.9.2 long: 5.3.2 proxy-addr@2.0.7: @@ -24859,8 +25908,6 @@ snapshots: forwarded: 0.2.0 ipaddr.js: 1.9.1 - proxy-from-env@1.1.0: {} - proxy-from-env@2.1.0: {} prr@1.0.1: @@ -24895,7 +25942,7 @@ snapshots: qs@6.15.2: dependencies: - side-channel: 1.1.0 + side-channel: 1.1.1 querystring-es3@0.2.1: {} @@ -24929,23 +25976,23 @@ snapshots: dependencies: bytes: 3.1.2 http-errors: 2.0.1 - iconv-lite: 0.7.0 + iconv-lite: 0.7.2 unpipe: 1.0.0 - rc-resize-observer@1.4.3(react-dom@19.2.0(react@19.2.0))(react@19.2.0): + rc-resize-observer@1.4.3(react-dom@19.2.7(react@19.2.7))(react@19.2.7): dependencies: - '@babel/runtime': 7.28.4 + '@babel/runtime': 7.29.7 classnames: 2.5.1 - rc-util: 5.44.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + rc-util: 5.44.4(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) resize-observer-polyfill: 1.5.1 - rc-util@5.44.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0): + rc-util@5.44.4(react-dom@19.2.7(react@19.2.7))(react@19.2.7): dependencies: - '@babel/runtime': 7.28.4 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + '@babel/runtime': 7.29.7 + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) react-is: 18.3.1 rc@1.2.8: @@ -24955,28 +26002,32 @@ snapshots: minimist: 1.2.8 strip-json-comments: 2.0.1 + react-compiler-runtime@1.0.0(react@19.2.7): + dependencies: + react: 19.2.7 + react-docgen-typescript@2.4.0(typescript@6.0.3): dependencies: typescript: 6.0.3 - react-docgen@8.0.2: + react-docgen@8.0.3: dependencies: '@babel/core': 7.29.6 - '@babel/traverse': 7.29.0 - '@babel/types': 7.29.0 + '@babel/traverse': 7.29.7 + '@babel/types': 7.29.7 '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.28.0 '@types/doctrine': 0.0.9 '@types/resolve': 1.20.6 doctrine: 3.0.0 - resolve: 1.22.11 + resolve: 1.22.12 strip-indent: 4.1.1 transitivePeerDependencies: - supports-color - react-dom@19.2.0(react@19.2.0): + react-dom@19.2.7(react@19.2.7): dependencies: - react: 19.2.0 + react: 19.2.7 scheduler: 0.27.0 react-fast-compare@3.2.2: {} @@ -24987,66 +26038,66 @@ snapshots: react-is@18.3.1: {} - react-json-view-lite@2.5.0(react@19.2.0): + react-json-view-lite@2.5.0(react@19.2.7): dependencies: - react: 19.2.0 + react: 19.2.7 - react-loadable-ssr-addon-v5-slorber@1.0.3(@docusaurus/react-loadable@6.0.0(react@19.2.0))(webpack@5.105.4(esbuild@0.28.1)): + react-loadable-ssr-addon-v5-slorber@1.0.3(@docusaurus/react-loadable@6.0.0(react@19.2.7))(webpack@5.107.2(esbuild@0.28.1)(postcss@8.5.10)): dependencies: - '@babel/runtime': 7.28.4 - react-loadable: '@docusaurus/react-loadable@6.0.0(react@19.2.0)' - webpack: 5.105.4(esbuild@0.28.1) + '@babel/runtime': 7.29.7 + react-loadable: '@docusaurus/react-loadable@6.0.0(react@19.2.7)' + webpack: 5.107.2(esbuild@0.28.1)(postcss@8.5.10) - react-oidc-context@3.3.0(oidc-client-ts@3.4.1)(react@19.2.0): + react-oidc-context@3.3.1(oidc-client-ts@3.5.0)(react@19.2.7): dependencies: - oidc-client-ts: 3.4.1 - react: 19.2.0 + oidc-client-ts: 3.5.0 + react: 19.2.7 - react-router-config@5.1.1(react-router@5.3.4(react@19.2.0))(react@19.2.0): + react-router-config@5.1.1(react-router@5.3.4(react@19.2.7))(react@19.2.7): dependencies: - '@babel/runtime': 7.28.4 - react: 19.2.0 - react-router: 5.3.4(react@19.2.0) + '@babel/runtime': 7.29.7 + react: 19.2.7 + react-router: 5.3.4(react@19.2.7) - react-router-dom@5.3.4(react@19.2.0): + react-router-dom@5.3.4(react@19.2.7): dependencies: - '@babel/runtime': 7.28.4 + '@babel/runtime': 7.29.7 history: 4.10.1 loose-envify: 1.4.0 prop-types: 15.8.1 - react: 19.2.0 - react-router: 5.3.4(react@19.2.0) + react: 19.2.7 + react-router: 5.3.4(react@19.2.7) 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.15.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7): 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: 19.2.7 + react-dom: 19.2.7(react@19.2.7) + react-router: 7.15.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - react-router@5.3.4(react@19.2.0): + react-router@5.3.4(react@19.2.7): dependencies: - '@babel/runtime': 7.28.4 + '@babel/runtime': 7.29.7 history: 4.10.1 hoist-non-react-statics: 3.3.2 loose-envify: 1.4.0 path-to-regexp: 1.9.0 prop-types: 15.8.1 - react: 19.2.0 + react: 19.2.7 react-is: 16.13.1 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.15.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7): dependencies: cookie: 1.1.1 - react: 19.2.0 + react: 19.2.7 set-cookie-parser: 2.7.2 optionalDependencies: - react-dom: 19.2.0(react@19.2.0) + react-dom: 19.2.7(react@19.2.7) - react@19.2.0: {} + react@19.2.7: {} read-cache@1.0.0: dependencies: @@ -25056,14 +26107,14 @@ snapshots: dependencies: find-up-simple: 1.0.1 read-pkg: 10.1.0 - type-fest: 5.6.0 + type-fest: 5.7.0 read-pkg@10.1.0: dependencies: '@types/normalize-package-data': 2.4.4 normalize-package-data: 8.0.0 parse-json: 8.3.0 - type-fest: 5.6.0 + type-fest: 5.7.0 unicorn-magic: 0.4.0 read-vinyl-file-stream@2.0.3: @@ -25109,7 +26160,7 @@ snapshots: recma-build-jsx@1.0.0: dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 estree-util-build-jsx: 3.0.1 vfile: 6.0.3 @@ -25124,14 +26175,14 @@ snapshots: recma-parse@1.0.0: dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 esast-util-from-js: 2.0.1 unified: 11.0.5 vfile: 6.0.3 recma-stringify@1.0.0: dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 estree-util-to-js: 2.0.0 unified: 11.0.5 vfile: 6.0.3 @@ -25145,11 +26196,11 @@ snapshots: reflect.getprototypeof@1.0.10: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.2 es-errors: 1.3.0 - es-object-atoms: 1.1.1 + es-object-atoms: 1.1.2 get-intrinsic: 1.3.0 get-proto: 1.0.1 which-builtin-type: 1.2.1 @@ -25168,7 +26219,7 @@ snapshots: regexp.prototype.flags@1.5.4: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 define-properties: 1.2.1 es-errors: 1.3.0 get-proto: 1.0.1 @@ -25180,13 +26231,13 @@ snapshots: regenerate: 1.4.2 regenerate-unicode-properties: 10.2.2 regjsgen: 0.8.0 - regjsparser: 0.13.0 + regjsparser: 0.13.1 unicode-match-property-ecmascript: 2.0.0 unicode-match-property-value-ecmascript: 2.2.1 - registry-auth-token@5.1.0: + registry-auth-token@5.1.1: dependencies: - '@pnpm/npm-conf': 2.3.1 + '@pnpm/npm-conf': 3.0.2 registry-url@6.0.1: dependencies: @@ -25194,14 +26245,14 @@ snapshots: regjsgen@0.8.0: {} - regjsparser@0.13.0: + regjsparser@0.13.1: dependencies: jsesc: 3.1.0 - rehackt@0.1.0(@types/react@19.2.7)(react@19.2.0): + rehackt@0.1.0(@types/react@19.2.17)(react@19.2.7): optionalDependencies: - '@types/react': 19.2.7 - react: 19.2.0 + '@types/react': 19.2.17 + react: 19.2.7 rehype-raw@7.0.0: dependencies: @@ -25211,7 +26262,7 @@ snapshots: rehype-recma@1.0.0: dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 '@types/hast': 3.0.4 hast-util-to-estree: 3.1.3 transitivePeerDependencies: @@ -25219,14 +26270,6 @@ snapshots: relateurl@0.2.7: {} - relay-runtime@12.0.0: - dependencies: - '@babel/runtime': 7.28.4 - fbjs: 3.0.5 - invariant: 2.2.4 - transitivePeerDependencies: - - encoding - remark-directive@3.0.1: dependencies: '@types/mdast': 4.0.4 @@ -25274,7 +26317,7 @@ snapshots: remark-parse@11.0.0: dependencies: '@types/mdast': 4.0.4 - mdast-util-from-markdown: 2.0.2 + mdast-util-from-markdown: 2.0.3 micromark-util-types: 2.0.2 unified: 11.0.5 transitivePeerDependencies: @@ -25320,7 +26363,14 @@ snapshots: dependencies: debug: 4.4.3(supports-color@8.1.1) module-details-from-path: 1.0.4 - resolve: 1.22.11 + resolve: 1.22.12 + transitivePeerDependencies: + - supports-color + + require-in-the-middle@8.0.1: + dependencies: + debug: 4.4.3(supports-color@8.1.1) + module-details-from-path: 1.0.4 transitivePeerDependencies: - supports-color @@ -25338,11 +26388,10 @@ snapshots: resolve-pathname@3.0.0: {} - resolve-pkg-maps@1.0.0: {} - - resolve@1.22.11: + resolve@1.22.12: dependencies: - is-core-module: 2.16.1 + es-errors: 1.3.0 + is-core-module: 2.16.2 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 @@ -25372,9 +26421,9 @@ snapshots: glob: 11.1.0 package-json-from-dist: 1.0.1 - rimraf@6.1.2: + rimraf@6.1.3: dependencies: - glob: 13.0.0 + glob: 13.0.6 package-json-from-dist: 1.0.1 ripemd160@2.0.3: @@ -25434,7 +26483,7 @@ snapshots: '@rolldown/binding-win32-arm64-msvc': 1.0.3 '@rolldown/binding-win32-x64-msvc': 1.0.3 - rollup-plugin-visualizer@6.0.5(rolldown@1.0.3): + rollup-plugin-visualizer@6.0.11(rolldown@1.0.3): dependencies: open: 8.4.2 picomatch: 4.0.4 @@ -25464,9 +26513,9 @@ snapshots: dependencies: tslib: 2.8.1 - safe-array-concat@1.1.3: + safe-array-concat@1.1.4: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 call-bound: 1.0.4 get-intrinsic: 1.3.0 has-symbols: 1.1.0 @@ -25491,9 +26540,7 @@ snapshots: safer-buffer@2.1.2: {} - sax@1.4.3: {} - - sax@1.5.0: {} + sax@1.6.0: {} saxes@6.0.0: dependencies: @@ -25512,9 +26559,9 @@ snapshots: schema-utils@4.3.3: dependencies: '@types/json-schema': 7.0.15 - ajv: 8.18.0 - ajv-formats: 2.1.1(ajv@8.18.0) - ajv-keywords: 5.1.0(ajv@8.18.0) + ajv: 8.20.0 + ajv-formats: 2.1.1(ajv@8.20.0) + ajv-keywords: 5.1.0(ajv@8.20.0) scroll-into-view-if-needed@3.1.0: dependencies: @@ -25542,51 +26589,47 @@ snapshots: semver-diff@4.0.0: dependencies: - semver: 7.8.1 + semver: 7.8.4 semver@5.7.2: {} semver@6.3.1: {} - semver@7.7.2: {} - semver@7.7.4: {} semver@7.8.0: {} - semver@7.8.1: {} + semver@7.8.4: {} - send@0.19.0: + send@0.19.2: dependencies: debug: 2.6.9 depd: 2.0.0 destroy: 1.2.0 - encodeurl: 1.0.2 + encodeurl: 2.0.0 escape-html: 1.0.3 etag: 1.8.1 fresh: 0.5.2 - http-errors: 2.0.0 + http-errors: 2.0.1 mime: 1.6.0 ms: 2.1.3 on-finished: 2.4.1 range-parser: 1.2.1 - statuses: 2.0.1 + statuses: 2.0.2 transitivePeerDependencies: - supports-color sentence-case@3.0.4: dependencies: no-case: 3.0.4 - tslib: 2.8.1 + tslib: 2.6.3 upper-case-first: 2.0.2 - seq-queue@0.0.5: {} - sequelize-pool@7.1.0: {} - sequelize@6.37.8(mysql2@3.15.3)(tedious@16.7.1): + sequelize@6.37.8(mysql2@3.22.5(@types/node@22.19.20))(tedious@16.7.1): dependencies: - '@types/debug': 4.1.12 + '@types/debug': 4.1.13 '@types/validator': 13.15.10 debug: 4.4.3(supports-color@8.1.1) dottie: 2.0.7 @@ -25594,16 +26637,16 @@ snapshots: lodash: 4.18.1 moment: 2.30.1 moment-timezone: 0.5.48 - pg-connection-string: 2.9.1 + pg-connection-string: 2.13.0 retry-as-promised: 7.1.1 - semver: 7.8.1 + semver: 7.8.4 sequelize-pool: 7.1.0 toposort-class: 1.0.1 uuid: 8.3.2 - validator: 13.15.23 + validator: 13.15.35 wkx: 0.5.0 optionalDependencies: - mysql2: 3.15.3 + mysql2: 3.22.5(@types/node@22.19.20) tedious: 16.7.1 transitivePeerDependencies: - supports-color @@ -25624,24 +26667,24 @@ snapshots: path-to-regexp: 3.3.0 range-parser: 1.2.0 - serve-index@1.9.1: + serve-index@1.9.2: dependencies: accepts: 1.3.8 batch: 0.6.1 debug: 2.6.9 escape-html: 1.0.3 - http-errors: 1.6.3 + http-errors: 1.8.1 mime-types: 2.1.35 parseurl: 1.3.3 transitivePeerDependencies: - supports-color - serve-static@1.16.2: + serve-static@1.16.3: dependencies: encodeurl: 2.0.0 escape-html: 1.0.3 parseurl: 1.3.3 - send: 0.19.0 + send: 0.19.2 transitivePeerDependencies: - supports-color @@ -25667,12 +26710,10 @@ snapshots: dependencies: dunder-proto: 1.0.1 es-errors: 1.3.0 - es-object-atoms: 1.1.1 + es-object-atoms: 1.1.2 setimmediate@1.0.5: {} - setprototypeof@1.1.0: {} - setprototypeof@1.2.0: {} sha.js@2.4.12: @@ -25697,7 +26738,7 @@ snapshots: shimmer@1.2.1: {} - side-channel-list@1.0.0: + side-channel-list@1.0.1: dependencies: es-errors: 1.3.0 object-inspect: 1.13.4 @@ -25717,11 +26758,11 @@ snapshots: object-inspect: 1.13.4 side-channel-map: 1.0.1 - side-channel@1.1.0: + side-channel@1.1.1: dependencies: es-errors: 1.3.0 object-inspect: 1.13.4 - side-channel-list: 1.0.0 + side-channel-list: 1.0.1 side-channel-map: 1.0.1 side-channel-weakmap: 1.0.2 @@ -25733,8 +26774,6 @@ snapshots: signal-exit@4.1.0: {} - signedsource@1.0.0: {} - sirv@2.0.4: dependencies: '@polka/url': 1.0.0-next.29 @@ -25749,12 +26788,12 @@ snapshots: sisteransi@1.0.5: {} - sitemap@7.1.2: + sitemap@7.1.3: dependencies: '@types/node': 17.0.45 '@types/sax': 1.2.7 arg: 5.0.2 - sax: 1.5.0 + sax: 1.6.0 skin-tone@2.0.0: dependencies: @@ -25778,7 +26817,7 @@ snapshots: astral-regex: 2.0.0 is-fullwidth-code-point: 3.0.0 - slugify@1.6.6: {} + slugify@1.6.9: {} smol-toml@1.6.1: {} @@ -25787,7 +26826,7 @@ snapshots: dot-case: 3.0.4 tslib: 2.8.1 - snyk@1.1301.0: + snyk@1.1305.1: dependencies: '@sentry/node': 7.120.4 global-agent: 3.0.0 @@ -25796,7 +26835,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: {} @@ -25820,16 +26859,16 @@ snapshots: spdx-correct@3.2.0: dependencies: spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.22 + spdx-license-ids: 3.0.23 spdx-exceptions@2.5.0: {} spdx-expression-parse@3.0.1: dependencies: spdx-exceptions: 2.5.0 - spdx-license-ids: 3.0.22 + spdx-license-ids: 3.0.23 - spdx-license-ids@3.0.22: {} + spdx-license-ids@3.0.23: {} spdy-transport@3.0.0: dependencies: @@ -25858,13 +26897,13 @@ snapshots: sponge-case@1.0.1: dependencies: - tslib: 2.8.1 + tslib: 2.6.3 sprintf-js@1.0.3: {} sprintf-js@1.1.3: {} - sqlstring@2.3.3: {} + sql-escaper@1.3.3: {} srcset@4.0.0: {} @@ -25882,13 +26921,11 @@ snapshots: statuses@1.5.0: {} - statuses@2.0.1: {} - statuses@2.0.2: {} std-env@3.10.0: {} - std-env@4.0.0: {} + std-env@4.1.0: {} stop-iteration-iterator@1.1.0: dependencies: @@ -25897,16 +26934,16 @@ snapshots: stoppable@1.1.0: {} - storybook-addon-apollo-client@9.0.0(@apollo/client@3.14.0(@types/react@19.2.7)(graphql-ws@6.0.6(graphql@16.12.0)(ws@8.21.0))(graphql@16.12.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(graphql@16.12.0)(react@19.2.0): + storybook-addon-apollo-client@9.0.0(@apollo/client@3.14.1(@types/react@19.2.17)(graphql-ws@6.0.8(graphql@16.14.2)(ws@8.21.0))(graphql@16.14.2)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(graphql@16.14.2)(react@19.2.7): dependencies: - '@apollo/client': 3.14.0(@types/react@19.2.7)(graphql-ws@6.0.6(graphql@16.12.0)(ws@8.21.0))(graphql@16.12.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - graphql: 16.12.0 - react: 19.2.0 + '@apollo/client': 3.14.1(@types/react@19.2.17)(graphql-ws@6.0.8(graphql@16.14.2)(ws@8.21.0))(graphql@16.14.2)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + graphql: 16.14.2 + react: 19.2.7 - 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@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7): 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/icons': 2.0.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7) '@testing-library/jest-dom': 6.9.1 '@testing-library/user-event': 14.6.1(@testing-library/dom@10.4.1) '@vitest/expect': 3.2.4 @@ -25917,11 +26954,11 @@ snapshots: oxc-parser: 0.127.0 oxc-resolver: 11.20.0 recast: 0.23.11 - semver: 7.8.1 - use-sync-external-store: 1.6.0(react@19.2.0) + semver: 7.8.4 + use-sync-external-store: 1.6.0(react@19.2.7) ws: 8.21.0 optionalDependencies: - '@types/react': 19.2.7 + '@types/react': 19.2.17 transitivePeerDependencies: - '@testing-library/dom' - bufferutil @@ -25946,11 +26983,11 @@ snapshots: readable-stream: 3.6.2 xtend: 4.0.2 - streamx@2.23.0: + streamx@2.27.0: dependencies: events-universal: 1.0.1 fast-fifo: 1.3.2 - text-decoder: 1.2.3 + text-decoder: 1.2.7 transitivePeerDependencies: - bare-abort-controller - react-native-b4a @@ -25971,30 +27008,36 @@ snapshots: dependencies: eastasianwidth: 0.2.0 emoji-regex: 9.2.2 - strip-ansi: 7.1.2 + strip-ansi: 7.2.0 + + string-width@8.2.1: + dependencies: + get-east-asian-width: 1.6.0 + strip-ansi: 7.2.0 - string.prototype.trim@1.2.10: + string.prototype.trim@1.2.11: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 call-bound: 1.0.4 define-data-property: 1.1.4 define-properties: 1.2.1 - es-abstract: 1.24.0 - es-object-atoms: 1.1.1 + es-abstract: 1.24.2 + es-object-atoms: 1.1.2 has-property-descriptors: 1.0.2 + safe-regex-test: 1.1.0 - string.prototype.trimend@1.0.9: + string.prototype.trimend@1.0.10: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 call-bound: 1.0.4 define-properties: 1.2.1 - es-object-atoms: 1.1.1 + es-object-atoms: 1.1.2 string.prototype.trimstart@1.0.8: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 define-properties: 1.2.1 - es-object-atoms: 1.1.1 + es-object-atoms: 1.1.2 string_decoder@1.1.1: dependencies: @@ -26019,7 +27062,7 @@ snapshots: dependencies: ansi-regex: 5.0.1 - strip-ansi@7.1.2: + strip-ansi@7.2.0: dependencies: ansi-regex: 6.2.2 @@ -26045,7 +27088,9 @@ snapshots: dependencies: escape-string-regexp: 1.0.5 - strnum@2.3.0: {} + strnum@2.4.0: + dependencies: + anynum: 1.0.0 style-to-js@1.1.21: dependencies: @@ -26057,11 +27102,11 @@ snapshots: stylehacks@6.1.1(postcss@8.5.10): dependencies: - browserslist: 4.28.1 + browserslist: 4.28.2 postcss: 8.5.10 postcss-selector-parser: 6.1.2 - stylis@4.3.6: {} + stylis@4.4.0: {} sucrase@3.35.1: dependencies: @@ -26070,7 +27115,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: @@ -26097,22 +27142,28 @@ snapshots: css-what: 6.2.2 csso: 5.0.5 picocolors: 1.1.1 - sax: 1.5.0 + sax: 1.6.0 swap-case@2.0.2: dependencies: - tslib: 2.8.1 + tslib: 2.6.3 - swr@2.3.7(react@19.2.0): + swr@2.4.1(react@19.2.7): dependencies: dequal: 2.0.3 - react: 19.2.0 - use-sync-external-store: 1.6.0(react@19.2.0) + react: 19.2.7 + use-sync-external-store: 1.6.0(react@19.2.7) symbol-observable@4.0.0: {} symbol-tree@3.2.4: {} + sync-fetch@0.6.0: + dependencies: + node-fetch: 3.3.2 + timeout-signal: 2.0.0 + whatwg-mimetype: 4.0.0 + sync-fetch@0.6.0-2: dependencies: node-fetch: 3.3.2 @@ -26121,7 +27172,7 @@ snapshots: tagged-tag@1.0.0: {} - tailwindcss@3.4.18(tsx@4.21.0)(yaml@2.8.3): + tailwindcss@3.4.19(tsx@4.22.4)(yaml@2.8.3): dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -26140,32 +27191,45 @@ snapshots: 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-load-config: 6.0.1(jiti@2.6.1)(postcss@8.5.10)(tsx@4.22.4)(yaml@2.8.3) postcss-nested: 6.2.0(postcss@8.5.10) postcss-selector-parser: 6.1.2 - resolve: 1.22.11 + resolve: 1.22.12 sucrase: 3.35.1 transitivePeerDependencies: - tsx - yaml - tapable@2.3.0: {} + tapable@2.3.3: {} + + tar-stream@3.1.8: + dependencies: + b4a: 1.8.1 + bare-fs: 4.7.2 + fast-fifo: 1.3.2 + streamx: 2.27.0 + transitivePeerDependencies: + - bare-abort-controller + - bare-buffer + - react-native-b4a - tar-stream@3.1.7: + tar-stream@3.2.0: dependencies: - b4a: 1.7.3 + b4a: 1.8.1 + bare-fs: 4.7.2 fast-fifo: 1.3.2 - streamx: 2.23.0 + streamx: 2.27.0 transitivePeerDependencies: - bare-abort-controller + - bare-buffer - react-native-b4a tedious@16.7.1: dependencies: '@azure/identity': 4.2.1 - '@azure/keyvault-keys': 4.10.0 - '@js-joda/core': 5.6.5 - bl: 6.1.5 + '@azure/keyvault-keys': 4.10.2 + '@js-joda/core': 5.7.0 + bl: 6.1.6 es-aggregate-error: 1.0.14 iconv-lite: 0.6.3 js-md4: 0.3.2 @@ -26176,17 +27240,39 @@ snapshots: transitivePeerDependencies: - supports-color - terser-webpack-plugin@5.4.0(esbuild@0.28.1)(webpack@5.105.4(esbuild@0.28.1)): + teex@1.0.1: + dependencies: + streamx: 2.27.0 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a + + terser-webpack-plugin@5.6.1(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.10))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.10)(webpack@5.107.2(esbuild@0.28.1)(postcss@8.5.10)): + dependencies: + '@jridgewell/trace-mapping': 0.3.31 + jest-worker: 27.5.1 + schema-utils: 4.3.3 + terser: 5.48.0 + webpack: 5.107.2(esbuild@0.28.1)(postcss@8.5.10) + optionalDependencies: + clean-css: 5.3.3 + cssnano: 6.1.2(postcss@8.5.10) + esbuild: 0.28.1 + html-minifier-terser: 7.2.0 + postcss: 8.5.10 + + terser-webpack-plugin@5.6.1(esbuild@0.28.1)(webpack@5.107.2(esbuild@0.28.1)): dependencies: '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 schema-utils: 4.3.3 - terser: 5.44.1 - webpack: 5.105.4(esbuild@0.28.1) + terser: 5.48.0 + webpack: 5.107.2(esbuild@0.28.1) optionalDependencies: esbuild: 0.28.1 + optional: true - terser@5.44.1: + terser@5.48.0: dependencies: '@jridgewell/source-map': 0.3.11 acorn: 8.16.0 @@ -26195,19 +27281,19 @@ snapshots: test-exclude@7.0.2: dependencies: - '@istanbuljs/schema': 0.1.3 + '@istanbuljs/schema': 0.1.6 glob: 10.5.0 - minimatch: 10.2.4 + minimatch: 10.2.5 test-exclude@8.0.0: dependencies: - '@istanbuljs/schema': 0.1.3 + '@istanbuljs/schema': 0.1.6 glob: 13.0.6 - minimatch: 10.2.4 + minimatch: 10.2.5 - text-decoder@1.2.3: + text-decoder@1.2.7: dependencies: - b4a: 1.7.3 + b4a: 1.8.1 transitivePeerDependencies: - react-native-b4a @@ -26221,14 +27307,12 @@ snapshots: dependencies: any-promise: 1.3.0 - thingies@2.5.0(tslib@2.8.1): + thingies@2.6.0(tslib@2.8.1): dependencies: tslib: 2.8.1 throttle-debounce@5.0.2: {} - throttleit@2.1.0: {} - through2@2.0.5: dependencies: readable-stream: 2.3.8 @@ -26254,12 +27338,7 @@ snapshots: tinybench@2.9.0: {} - tinyexec@1.0.4: {} - - tinyglobby@0.2.15: - dependencies: - fdir: 6.5.0(picomatch@4.0.4) - picomatch: 4.0.4 + tinyexec@1.2.4: {} tinyglobby@0.2.17: dependencies: @@ -26276,7 +27355,7 @@ snapshots: title-case@3.0.3: dependencies: - tslib: 2.8.1 + tslib: 2.6.3 tldts-core@6.1.86: {} @@ -26337,7 +27416,7 @@ snapshots: trough@2.2.0: {} - ts-dedent@2.2.0: {} + ts-dedent@2.3.0: {} ts-interface-checker@0.1.13: {} @@ -26371,10 +27450,9 @@ snapshots: tslib@2.8.1: {} - tsx@4.21.0: + tsx@4.22.4: dependencies: esbuild: 0.28.1 - get-tsconfig: 4.13.0 optionalDependencies: fsevents: 2.3.3 @@ -26405,7 +27483,7 @@ snapshots: type-fest@4.41.0: {} - type-fest@5.6.0: + type-fest@5.7.0: dependencies: tagged-tag: 1.0.0 @@ -26414,9 +27492,9 @@ snapshots: media-typer: 0.3.0 mime-types: 2.1.35 - type-is@2.0.1: + type-is@2.1.0: dependencies: - content-type: 1.0.5 + content-type: 2.0.0 media-typer: 1.1.0 mime-types: 3.0.2 @@ -26428,7 +27506,7 @@ snapshots: typed-array-byte-length@1.0.3: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 for-each: 0.3.5 gopd: 1.2.0 has-proto: 1.2.0 @@ -26437,16 +27515,16 @@ snapshots: typed-array-byte-offset@1.0.4: dependencies: available-typed-arrays: 1.0.7 - call-bind: 1.0.8 + call-bind: 1.0.9 for-each: 0.3.5 gopd: 1.2.0 has-proto: 1.2.0 is-typed-array: 1.1.15 reflect.getprototypeof: 1.0.10 - typed-array-length@1.0.7: + typed-array-length@1.0.8: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 for-each: 0.3.5 gopd: 1.2.0 is-typed-array: 1.1.15 @@ -26461,8 +27539,6 @@ snapshots: typescript@6.0.3: {} - ua-parser-js@1.0.41: {} - unbash@2.2.0: {} unbox-primitive@1.1.0: @@ -26476,7 +27552,7 @@ snapshots: undici-types@6.21.0: {} - undici-types@7.16.0: {} + undici-types@7.24.6: {} unicode-canonical-property-names-ecmascript@2.0.1: {} @@ -26530,7 +27606,7 @@ snapshots: '@types/unist': 3.0.3 unist-util-is: 6.0.1 - unist-util-visit@5.0.0: + unist-util-visit@5.1.0: dependencies: '@types/unist': 3.0.3 unist-util-is: 6.0.1 @@ -26555,9 +27631,9 @@ snapshots: upath@2.0.1: {} - update-browserslist-db@1.2.3(browserslist@4.28.1): + update-browserslist-db@1.2.3(browserslist@4.28.2): dependencies: - browserslist: 4.28.1 + browserslist: 4.28.2 escalade: 3.2.0 picocolors: 1.1.1 @@ -26574,17 +27650,17 @@ snapshots: is-yarn-global: 0.4.1 latest-version: 7.0.0 pupa: 3.3.0 - semver: 7.7.4 + semver: 7.8.4 semver-diff: 4.0.0 xdg-basedir: 5.1.0 upper-case-first@2.0.2: dependencies: - tslib: 2.8.1 + tslib: 2.6.3 upper-case@2.0.2: dependencies: - tslib: 2.8.1 + tslib: 2.6.3 uri-js@4.4.1: dependencies: @@ -26592,14 +27668,14 @@ snapshots: uri-templates@0.2.0: {} - 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)): + url-loader@4.1.1(file-loader@6.2.0(webpack@5.107.2(esbuild@0.28.1)(postcss@8.5.10)))(webpack@5.107.2(esbuild@0.28.1)(postcss@8.5.10)): dependencies: loader-utils: 2.0.4 mime-types: 2.1.35 schema-utils: 3.3.0 - webpack: 5.105.4(esbuild@0.28.1) + webpack: 5.107.2(esbuild@0.28.1)(postcss@8.5.10) optionalDependencies: - file-loader: 6.2.0(webpack@5.105.4(esbuild@0.28.1)) + file-loader: 6.2.0(webpack@5.107.2(esbuild@0.28.1)(postcss@8.5.10)) url-parse@1.5.10: dependencies: @@ -26613,9 +27689,9 @@ snapshots: urlpattern-polyfill@10.1.0: {} - use-sync-external-store@1.6.0(react@19.2.0): + use-sync-external-store@1.6.0(react@19.2.7): dependencies: - react: 19.2.0 + react: 19.2.7 util-arity@1.1.0: {} @@ -26627,7 +27703,7 @@ snapshots: is-arguments: 1.2.0 is-generator-function: 1.1.2 is-typed-array: 1.1.15 - which-typed-array: 1.1.19 + which-typed-array: 1.1.22 utila@0.4.0: {} @@ -26658,7 +27734,7 @@ snapshots: validate-npm-package-name@7.0.2: {} - validator@13.15.23: {} + validator@13.15.35: {} value-equal@1.0.1: {} @@ -26681,15 +27757,32 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 - vite-plugin-node-polyfills@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)): + vite-plugin-node-polyfills@0.28.0(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3)): dependencies: '@rollup/plugin-inject': 5.0.5 node-stdlib-browser: 1.3.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) + vite: 8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3) transitivePeerDependencies: - rollup - 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): + vite@8.0.16(@types/node@22.19.20)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3): + dependencies: + lightningcss: 1.32.0 + picomatch: 4.0.4 + postcss: 8.5.10 + rolldown: 1.0.3 + tinyglobby: 0.2.17 + optionalDependencies: + '@types/node': 22.19.20 + esbuild: 0.28.1 + fsevents: 2.3.3 + jiti: 2.6.1 + less: 4.6.4 + terser: 5.48.0 + tsx: 4.22.4 + yaml: 2.8.3 + + vite@8.0.16(@types/node@22.19.21)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3): dependencies: lightningcss: 1.32.0 picomatch: 4.0.4 @@ -26697,16 +27790,16 @@ snapshots: rolldown: 1.0.3 tinyglobby: 0.2.17 optionalDependencies: - '@types/node': 22.19.15 + '@types/node': 22.19.21 esbuild: 0.28.1 fsevents: 2.3.3 jiti: 2.6.1 - less: 4.4.2 - terser: 5.44.1 - tsx: 4.21.0 + less: 4.6.4 + terser: 5.48.0 + tsx: 4.22.4 yaml: 2.8.3 - 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): + vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3): dependencies: lightningcss: 1.32.0 picomatch: 4.0.4 @@ -26714,72 +27807,103 @@ snapshots: rolldown: 1.0.3 tinyglobby: 0.2.17 optionalDependencies: - '@types/node': 24.10.1 + '@types/node': 25.9.2 esbuild: 0.28.1 fsevents: 2.3.3 jiti: 2.6.1 - less: 4.4.2 - terser: 5.44.1 - tsx: 4.21.0 + less: 4.6.4 + terser: 5.48.0 + tsx: 4.22.4 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)(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.8(@opentelemetry/api@1.9.0)(@types/node@22.19.20)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(jsdom@26.1.0)(vite@8.0.16(@types/node@22.19.20)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3)): + dependencies: + '@vitest/expect': 4.1.8 + '@vitest/mocker': 4.1.8(vite@8.0.16(@types/node@22.19.20)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(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.1.0 + expect-type: 1.3.0 + magic-string: 0.30.21 + obug: 2.1.2 + pathe: 2.0.3 + picomatch: 4.0.4 + std-env: 4.1.0 + tinybench: 2.9.0 + tinyexec: 1.2.4 + tinyglobby: 0.2.17 + tinyrainbow: 3.1.0 + vite: 8.0.16(@types/node@22.19.20)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3) + why-is-node-running: 2.3.0 + optionalDependencies: + '@opentelemetry/api': 1.9.0 + '@types/node': 22.19.20 + '@vitest/browser-playwright': 4.1.8(playwright@1.59.0)(vite@8.0.16(@types/node@22.19.20)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3))(vitest@4.1.8) + '@vitest/coverage-istanbul': 4.1.8(vitest@4.1.8) + jsdom: 26.1.0 + transitivePeerDependencies: + - msw + + vitest@4.1.8(@opentelemetry/api@1.9.0)(@types/node@22.19.21)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(jsdom@26.1.0)(vite@8.0.16(@types/node@22.19.21)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(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/mocker': 4.1.8(vite@8.0.16(@types/node@22.19.21)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(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 + es-module-lexer: 2.1.0 expect-type: 1.3.0 magic-string: 0.30.21 - obug: 2.1.1 + obug: 2.1.2 pathe: 2.0.3 picomatch: 4.0.4 - std-env: 4.0.0 + std-env: 4.1.0 tinybench: 2.9.0 - tinyexec: 1.0.4 - tinyglobby: 0.2.15 + tinyexec: 1.2.4 + tinyglobby: 0.2.17 tinyrainbow: 3.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) + vite: 8.0.16(@types/node@22.19.21)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3) why-is-node-running: 2.3.0 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) + '@types/node': 22.19.21 + '@vitest/browser-playwright': 4.1.8(playwright@1.59.0)(vite@8.0.16(@types/node@22.19.21)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3))(vitest@4.1.8) '@vitest/coverage-istanbul': 4.1.8(vitest@4.1.8) 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)(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.8(@opentelemetry/api@1.9.0)(@types/node@25.9.2)(@vitest/browser-playwright@4.1.8)(@vitest/coverage-istanbul@4.1.8)(jsdom@26.1.0)(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(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/mocker': 4.1.8(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(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 + es-module-lexer: 2.1.0 expect-type: 1.3.0 magic-string: 0.30.21 - obug: 2.1.1 + obug: 2.1.2 pathe: 2.0.3 picomatch: 4.0.4 - std-env: 4.0.0 + std-env: 4.1.0 tinybench: 2.9.0 - tinyexec: 1.0.4 - tinyglobby: 0.2.15 + tinyexec: 1.2.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) + vite: 8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(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.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) + '@types/node': 25.9.2 + '@vitest/browser-playwright': 4.1.8(playwright@1.59.0)(vite@8.0.16(@types/node@25.9.2)(esbuild@0.28.1)(jiti@2.6.1)(less@4.6.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.8.3))(vitest@4.1.8) '@vitest/coverage-istanbul': 4.1.8(vitest@4.1.8) jsdom: 26.1.0 transitivePeerDependencies: @@ -26822,7 +27946,7 @@ snapshots: dependencies: '@discoveryjs/json-ext': 0.5.7 acorn: 8.16.0 - acorn-walk: 8.3.4 + acorn-walk: 8.3.5 commander: 7.2.0 debounce: 1.2.1 escape-string-regexp: 4.0.0 @@ -26836,29 +27960,31 @@ snapshots: - bufferutil - utf-8-validate - webpack-dev-middleware@7.4.5(webpack@5.105.4(esbuild@0.28.1)): + webpack-dev-middleware@7.4.5(tslib@2.8.1)(webpack@5.107.2(esbuild@0.28.1)(postcss@8.5.10)): dependencies: colorette: 2.0.20 - memfs: 4.51.1 + memfs: 4.57.6(tslib@2.8.1) mime-types: 3.0.2 on-finished: 2.4.1 range-parser: 1.2.1 schema-utils: 4.3.3 optionalDependencies: - webpack: 5.105.4(esbuild@0.28.1) + webpack: 5.107.2(esbuild@0.28.1)(postcss@8.5.10) + transitivePeerDependencies: + - tslib - webpack-dev-server@5.2.5(webpack@5.105.4(esbuild@0.28.1)): + webpack-dev-server@5.2.5(tslib@2.8.1)(webpack@5.107.2(esbuild@0.28.1)(postcss@8.5.10)): dependencies: '@types/bonjour': 3.5.13 '@types/connect-history-api-fallback': 1.5.4 '@types/express': 4.17.25 - '@types/express-serve-static-core': 4.19.7 + '@types/express-serve-static-core': 4.19.8 '@types/serve-index': 1.9.4 '@types/serve-static': 1.15.10 '@types/sockjs': 0.3.36 '@types/ws': 8.18.1 ansi-html-community: 0.0.8 - bonjour-service: 1.3.0 + bonjour-service: 1.4.1 chokidar: 3.6.0 colorette: 2.0.20 compression: 1.8.1 @@ -26866,22 +27992,23 @@ snapshots: express: 4.22.2 graceful-fs: 4.2.11 http-proxy-middleware: 3.0.7 - ipaddr.js: 2.3.0 + ipaddr.js: 2.4.0 launch-editor: 2.14.1 open: 10.2.0 p-retry: 6.2.1 schema-utils: 4.3.3 selfsigned: 5.5.0 - serve-index: 1.9.1 + serve-index: 1.9.2 sockjs: 0.3.24 spdy: 4.0.2 - webpack-dev-middleware: 7.4.5(webpack@5.105.4(esbuild@0.28.1)) + webpack-dev-middleware: 7.4.5(tslib@2.8.1)(webpack@5.107.2(esbuild@0.28.1)(postcss@8.5.10)) ws: 8.21.0 optionalDependencies: - webpack: 5.105.4(esbuild@0.28.1) + webpack: 5.107.2(esbuild@0.28.1)(postcss@8.5.10) transitivePeerDependencies: - bufferutil - supports-color + - tslib - utf-8-validate webpack-merge@5.10.0: @@ -26896,52 +28023,138 @@ snapshots: flat: 5.0.2 wildcard: 2.0.1 - webpack-sources@3.3.4: {} + webpack-sources@3.5.0: {} webpack-virtual-modules@0.6.2: {} - webpack@5.105.4(esbuild@0.28.1): + webpack@5.107.2(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.10))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.10): dependencies: - '@types/eslint-scope': 3.7.7 - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 '@types/json-schema': 7.0.15 '@webassemblyjs/ast': 1.14.1 '@webassemblyjs/wasm-edit': 1.14.1 '@webassemblyjs/wasm-parser': 1.14.1 acorn: 8.16.0 acorn-import-phases: 1.0.4(acorn@8.16.0) - browserslist: 4.28.1 + browserslist: 4.28.2 chrome-trace-event: 1.0.4 - enhanced-resolve: 5.20.0 - es-module-lexer: 2.0.0 + enhanced-resolve: 5.23.0 + es-module-lexer: 2.1.0 eslint-scope: 5.1.1 events: 3.3.0 glob-to-regexp: 0.4.1 graceful-fs: 4.2.11 - json-parse-even-better-errors: 2.3.1 - loader-runner: 4.3.1 - mime-types: 2.1.35 + loader-runner: 4.3.2 + mime-db: 1.54.0 + neo-async: 2.6.2 + schema-utils: 4.3.3 + tapable: 2.3.3 + terser-webpack-plugin: 5.6.1(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.10))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.10)(webpack@5.107.2(esbuild@0.28.1)(postcss@8.5.10)) + watchpack: 2.5.1 + webpack-sources: 3.5.0 + transitivePeerDependencies: + - '@minify-html/node' + - '@swc/core' + - '@swc/css' + - '@swc/html' + - clean-css + - cssnano + - csso + - esbuild + - html-minifier-terser + - lightningcss + - postcss + - uglify-js + + webpack@5.107.2(esbuild@0.28.1): + dependencies: + '@types/estree': 1.0.9 + '@types/json-schema': 7.0.15 + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/wasm-edit': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 + acorn: 8.16.0 + acorn-import-phases: 1.0.4(acorn@8.16.0) + browserslist: 4.28.2 + chrome-trace-event: 1.0.4 + enhanced-resolve: 5.23.0 + es-module-lexer: 2.1.0 + eslint-scope: 5.1.1 + events: 3.3.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + loader-runner: 4.3.2 + mime-db: 1.54.0 + neo-async: 2.6.2 + schema-utils: 4.3.3 + tapable: 2.3.3 + terser-webpack-plugin: 5.6.1(esbuild@0.28.1)(webpack@5.107.2(esbuild@0.28.1)) + watchpack: 2.5.1 + webpack-sources: 3.5.0 + transitivePeerDependencies: + - '@minify-html/node' + - '@swc/core' + - '@swc/css' + - '@swc/html' + - clean-css + - cssnano + - csso + - esbuild + - html-minifier-terser + - lightningcss + - postcss + - uglify-js + optional: true + + webpack@5.107.2(esbuild@0.28.1)(postcss@8.5.10): + dependencies: + '@types/estree': 1.0.9 + '@types/json-schema': 7.0.15 + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/wasm-edit': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 + acorn: 8.16.0 + acorn-import-phases: 1.0.4(acorn@8.16.0) + browserslist: 4.28.2 + chrome-trace-event: 1.0.4 + enhanced-resolve: 5.23.0 + es-module-lexer: 2.1.0 + eslint-scope: 5.1.1 + events: 3.3.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + loader-runner: 4.3.2 + mime-db: 1.54.0 neo-async: 2.6.2 schema-utils: 4.3.3 - tapable: 2.3.0 - terser-webpack-plugin: 5.4.0(esbuild@0.28.1)(webpack@5.105.4(esbuild@0.28.1)) + tapable: 2.3.3 + terser-webpack-plugin: 5.6.1(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.10))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.10)(webpack@5.107.2(esbuild@0.28.1)(postcss@8.5.10)) watchpack: 2.5.1 - webpack-sources: 3.3.4 + webpack-sources: 3.5.0 transitivePeerDependencies: + - '@minify-html/node' - '@swc/core' + - '@swc/css' + - '@swc/html' + - clean-css + - cssnano + - csso - esbuild + - html-minifier-terser + - lightningcss + - postcss - uglify-js - webpackbar@7.0.0(webpack@5.105.4(esbuild@0.28.1)): + webpackbar@7.0.0(webpack@5.107.2(esbuild@0.28.1)(postcss@8.5.10)): dependencies: ansis: 3.17.0 consola: 3.4.2 pretty-time: 1.1.0 std-env: 3.10.0 optionalDependencies: - webpack: 5.105.4(esbuild@0.28.1) + webpack: 5.107.2(esbuild@0.28.1)(postcss@8.5.10) - websocket-driver@0.7.4: + websocket-driver@0.7.5: dependencies: http-parser-js: 0.5.10 safe-buffer: 5.2.1 @@ -26987,7 +28200,7 @@ snapshots: isarray: 2.0.5 which-boxed-primitive: 1.1.1 which-collection: 1.0.2 - which-typed-array: 1.1.19 + which-typed-array: 1.1.22 which-collection@1.0.2: dependencies: @@ -26996,10 +28209,10 @@ snapshots: is-weakmap: 2.0.2 is-weakset: 2.0.4 - which-typed-array@1.1.19: + which-typed-array@1.1.22: dependencies: available-typed-arrays: 1.0.7 - call-bind: 1.0.8 + call-bind: 1.0.9 call-bound: 1.0.4 for-each: 0.3.5 get-proto: 1.0.1 @@ -27035,7 +28248,7 @@ snapshots: readable-stream: 3.6.2 triple-beam: 1.4.1 - winston@3.18.3: + winston@3.19.0: dependencies: '@colors/colors': 1.6.0 '@dabh/diagnostics': 2.0.8 @@ -27051,7 +28264,7 @@ snapshots: wkx@0.5.0: dependencies: - '@types/node': 24.10.1 + '@types/node': 22.19.20 wrap-ansi@6.2.0: dependencies: @@ -27069,7 +28282,7 @@ snapshots: dependencies: ansi-styles: 6.2.3 string-width: 5.1.2 - strip-ansi: 7.1.2 + strip-ansi: 7.2.0 wrappy@1.0.2: {} @@ -27084,13 +28297,13 @@ snapshots: wsl-utils@0.1.0: dependencies: - is-wsl: 3.1.0 + is-wsl: 3.1.1 xdg-basedir@5.1.0: {} xml-js@1.6.11: dependencies: - sax: 1.5.0 + sax: 1.6.0 xml-name-validator@5.0.0: {} @@ -27098,12 +28311,12 @@ snapshots: xml2js@0.5.0: dependencies: - sax: 1.5.0 + sax: 1.6.0 xmlbuilder: 11.0.1 xml2js@0.6.2: dependencies: - sax: 1.4.3 + sax: 1.6.0 xmlbuilder: 11.0.1 xmlbuilder@11.0.1: {} @@ -27168,6 +28381,6 @@ snapshots: zen-observable@0.8.15: {} - zod@4.1.13: {} + zod@4.4.3: {} zwitch@2.0.4: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 485b2da47..ed5f94b15 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -34,12 +34,13 @@ catalog: react-dom: ^19.1.1 '@ant-design/icons': ^6.0.2 rimraf: 6.0.1 - storybook: 10.4.2 + storybook: ^10.4.2 '@storybook/addon-a11y': ^10.4.2 '@storybook/addon-docs': ^10.4.2 '@storybook/addon-onboarding': ^10.4.2 '@storybook/addon-vitest': ^10.4.2 '@storybook/react-vite': ^10.4.2 + '@storybook/react': ^10.4.2 tsx: ^4.21.0 typescript: 6.0.3 "@typescript/native-preview": 7.0.0-dev.20260428.1 diff --git a/sonar-project.properties b/sonar-project.properties index e5b7d641a..958f0dc01 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -76,15 +76,6 @@ packages/ocom/service-blob-storage/src,\ packages/ocom/service-mongoose/src,\ packages/ocom/service-otel/src,\ packages/ocom/service-token-validation/src,\ -packages/ocom/ui-community-route-accounts/src,\ -packages/ocom/ui-community-route-admin/src,\ -packages/ocom/ui-community-route-root/src,\ -packages/ocom/ui-community-shared/src,\ -packages/ocom/ui-staff-route-community-management/src,\ -packages/ocom/ui-staff-route-finance/src,\ -packages/ocom/ui-staff-route-root/src,\ -packages/ocom/ui-staff-route-tech-admin/src,\ -packages/ocom/ui-staff-route-user-management/src,\ packages/ocom/ui-staff-shared/src,\ packages/ocom/ui-shared/src