From 52854953d3950cd0b2a7b9d9a9a20f1bdf9d4670 Mon Sep 17 00:00:00 2001 From: Arif Ahmed Date: Mon, 17 Nov 2025 13:00:07 -0500 Subject: [PATCH 1/8] feat: implement pause listing functionality - Add pause application service following cancel pattern - Add pauseItemListing GraphQL mutation and resolver - Update UI components with pause button and confirmation modal - Filter paused listings from reservers' search results - Add state mapping for domain to UI status conversion Implements pause listing feature per issue #42 requirements. Allows sharers to pause active listings, removing them from search results while retaining reservation history. --- .../components/all-listings-card.tsx | 16 +++++--- .../all-listings-table.container.graphql | 8 ++++ .../all-listings-table.container.tsx | 41 ++++++++++++++++++- .../components/all-listings-table.tsx | 16 +++++--- .../src/contexts/listing/item/index.ts | 5 +++ .../src/contexts/listing/item/pause.ts | 32 +++++++++++++++ .../schema/types/listing/item-listing.graphql | 1 + .../types/listing/item-listing.resolvers.ts | 22 +++++++++- 8 files changed, 126 insertions(+), 15 deletions(-) create mode 100644 packages/sthrift/application-services/src/contexts/listing/item/pause.ts diff --git a/apps/ui-sharethrift/src/components/layouts/home/my-listings/components/all-listings-card.tsx b/apps/ui-sharethrift/src/components/layouts/home/my-listings/components/all-listings-card.tsx index 165bed80b..16273e998 100644 --- a/apps/ui-sharethrift/src/components/layouts/home/my-listings/components/all-listings-card.tsx +++ b/apps/ui-sharethrift/src/components/layouts/home/my-listings/components/all-listings-card.tsx @@ -21,14 +21,18 @@ const AllListingsCard: React.FC = ({ if (record.status === 'Active' || record.status === 'Reserved') { buttons.push( - , + + , ); } diff --git a/apps/ui-sharethrift/src/components/layouts/home/my-listings/components/all-listings-table.container.graphql b/apps/ui-sharethrift/src/components/layouts/home/my-listings/components/all-listings-table.container.graphql index b321da12a..25cfc8c8c 100644 --- a/apps/ui-sharethrift/src/components/layouts/home/my-listings/components/all-listings-table.container.graphql +++ b/apps/ui-sharethrift/src/components/layouts/home/my-listings/components/all-listings-table.container.graphql @@ -29,4 +29,12 @@ fragment HomeAllListingsTableContainerListingFields on ListingAll { createdAt sharingPeriodStart sharingPeriodEnd +} + +mutation HomeAllListingsTableContainerPauseItemListing($id: ObjectID!) { + pauseItemListing(id: $id) { + id + state + updatedAt + } } \ No newline at end of file diff --git a/apps/ui-sharethrift/src/components/layouts/home/my-listings/components/all-listings-table.container.tsx b/apps/ui-sharethrift/src/components/layouts/home/my-listings/components/all-listings-table.container.tsx index 245b2ff94..fa5a278ec 100644 --- a/apps/ui-sharethrift/src/components/layouts/home/my-listings/components/all-listings-table.container.tsx +++ b/apps/ui-sharethrift/src/components/layouts/home/my-listings/components/all-listings-table.container.tsx @@ -2,7 +2,7 @@ import { useState } from "react"; import { useQuery, useMutation } from "@apollo/client/react"; import { AllListingsTable } from "./all-listings-table.tsx"; import { ComponentQueryLoader } from "@sthrift/ui-components"; -import { HomeAllListingsTableContainerMyListingsAllDocument, HomeAllListingsTableContainerCancelItemListingDocument } from "../../../../../generated.tsx"; +import { HomeAllListingsTableContainerMyListingsAllDocument, HomeAllListingsTableContainerCancelItemListingDocument, HomeAllListingsTableContainerPauseItemListingDocument } from "../../../../../generated.tsx"; import { message } from "antd"; export interface AllListingsTableContainerProps { @@ -10,6 +10,27 @@ export interface AllListingsTableContainerProps { onPageChange: (page: number) => void; } +/** + * Maps domain listing state to UI status + * Domain states: Published, Paused, Cancelled, Drafted, Expired, Blocked, Appeal Requested + * UI statuses: Active, Paused, Cancelled, Draft, Expired, Blocked, Cancelled + */ +const mapDomainStateToUIStatus = (state: string | null | undefined): string => { + if (!state) return 'Unknown'; + + const stateMap: Record = { + 'Published': 'Active', + 'Paused': 'Paused', + 'Cancelled': 'Cancelled', + 'Drafted': 'Draft', + 'Expired': 'Expired', + 'Blocked': 'Blocked', + 'Appeal Requested': 'Blocked', // Map appeal requested to blocked for UI + }; + + return stateMap[state] || state; +}; + export const AllListingsTableContainer: React.FC = ({ currentPage, onPageChange, @@ -49,6 +70,16 @@ export const AllListingsTableContainer: React.FC }, }); + const [pauseListing] = useMutation(HomeAllListingsTableContainerPauseItemListingDocument, { + onCompleted: () => { + message.success("Listing paused successfully"); + refetch(); + }, + onError: (error) => { + message.error(`Failed to pause listing: ${error.message}`); + }, + }); + const listings = data?.myListingsAll?.items ?? []; console.log("Listings data:", data); const total = data?.myListingsAll?.total ?? 0; @@ -67,7 +98,7 @@ export const AllListingsTableContainer: React.FC image: listing.images?.[0] ?? null, publishedAt: listing.createdAt ?? null, reservationPeriod, - status: listing.state ?? 'Unknown', + status: mapDomainStateToUIStatus(listing.state), pendingRequestsCount: 0, // TODO: implement in future }; }); @@ -105,6 +136,12 @@ export const AllListingsTableContainer: React.FC } catch (error) { console.error("Cancel listing error:", error); } + } else if (action === "pause") { + try { + await pauseListing({ variables: { id: listingId } }); + } catch (error) { + console.error("Pause listing error:", error); + } } else { // TODO: Implement other actions in future PRs console.log(`Action: ${action}, Listing ID: ${listingId}`); diff --git a/apps/ui-sharethrift/src/components/layouts/home/my-listings/components/all-listings-table.tsx b/apps/ui-sharethrift/src/components/layouts/home/my-listings/components/all-listings-table.tsx index 033d1b0cd..86620bf3a 100644 --- a/apps/ui-sharethrift/src/components/layouts/home/my-listings/components/all-listings-table.tsx +++ b/apps/ui-sharethrift/src/components/layouts/home/my-listings/components/all-listings-table.tsx @@ -59,14 +59,18 @@ export const AllListingsTable: React.FC = ({ // Conditional actions based on status if (record.status === 'Active' || record.status === 'Reserved') { buttons.push( - , + + , ); } diff --git a/packages/sthrift/application-services/src/contexts/listing/item/index.ts b/packages/sthrift/application-services/src/contexts/listing/item/index.ts index 54a359392..8de420fbc 100644 --- a/packages/sthrift/application-services/src/contexts/listing/item/index.ts +++ b/packages/sthrift/application-services/src/contexts/listing/item/index.ts @@ -8,6 +8,7 @@ import { } from './query-by-sharer.ts'; import { type ItemListingQueryAllCommand, queryAll } from './query-all.ts'; import { type ItemListingCancelCommand, cancel } from './cancel.ts'; +import { type ItemListingPauseCommand, pause } from './pause.ts'; import { queryPaged } from './query-paged.ts'; import { type ItemListingUpdateCommand, update } from './update.ts'; @@ -29,6 +30,9 @@ export interface ItemListingApplicationService { cancel: ( command: ItemListingCancelCommand, ) => Promise; + pause: ( + command: ItemListingPauseCommand, + ) => Promise; queryPaged: (command: { page: number; pageSize: number; @@ -54,6 +58,7 @@ export const ItemListing = ( queryBySharer: queryBySharer(dataSources), queryAll: queryAll(dataSources), cancel: cancel(dataSources), + pause: pause(dataSources), queryPaged: queryPaged(dataSources), update: update(dataSources), }; diff --git a/packages/sthrift/application-services/src/contexts/listing/item/pause.ts b/packages/sthrift/application-services/src/contexts/listing/item/pause.ts new file mode 100644 index 000000000..ce6b68258 --- /dev/null +++ b/packages/sthrift/application-services/src/contexts/listing/item/pause.ts @@ -0,0 +1,32 @@ +import type { Domain } from '@sthrift/domain'; +import type { DataSources } from '@sthrift/persistence'; + +export interface ItemListingPauseCommand { + id: string; +} + +export const pause = (dataSources: DataSources) => { + return async ( + command: ItemListingPauseCommand, + ): Promise => { + let itemListingToReturn: + | Domain.Contexts.Listing.ItemListing.ItemListingEntityReference + | undefined; + await dataSources.domainDataSource.Listing.ItemListing.ItemListingUnitOfWork.withScopedTransaction( + async (repo) => { + const listing = await repo.getById(command.id); + if (!listing) { + throw new Error('Listing not found'); + } + + listing.pause(); + itemListingToReturn = await repo.save(listing); + }, + ); + if (!itemListingToReturn) { + throw new Error('ItemListing not paused'); + } + return itemListingToReturn; + }; +}; + diff --git a/packages/sthrift/graphql/src/schema/types/listing/item-listing.graphql b/packages/sthrift/graphql/src/schema/types/listing/item-listing.graphql index a5e48b8f3..7b204ea0b 100644 --- a/packages/sthrift/graphql/src/schema/types/listing/item-listing.graphql +++ b/packages/sthrift/graphql/src/schema/types/listing/item-listing.graphql @@ -72,6 +72,7 @@ input CreateItemListingInput { extend type Mutation { createItemListing(input: CreateItemListingInput!): ItemListing! cancelItemListing(id: ObjectID!): ItemListing! + pauseItemListing(id: ObjectID!): ItemListing! removeListing(id: ObjectID!): Boolean! unblockListing(id: ObjectID!): Boolean! } diff --git a/packages/sthrift/graphql/src/schema/types/listing/item-listing.resolvers.ts b/packages/sthrift/graphql/src/schema/types/listing/item-listing.resolvers.ts index 354bce333..aeda42036 100644 --- a/packages/sthrift/graphql/src/schema/types/listing/item-listing.resolvers.ts +++ b/packages/sthrift/graphql/src/schema/types/listing/item-listing.resolvers.ts @@ -45,7 +45,10 @@ const itemListingResolvers: Resolvers = { ); }, itemListings: async (_parent, _args, context) => { - return await context.applicationServices.Listing.ItemListing.queryAll({}); + const allListings = await context.applicationServices.Listing.ItemListing.queryAll({}); + // Filter out paused listings from search results for reservers + // Paused listings should not be visible to reservers + return allListings.filter(listing => listing.state !== 'Paused'); }, itemListing: async (_parent, args, context) => { @@ -156,6 +159,23 @@ const itemListingResolvers: Resolvers = { }); return result }, + pauseItemListing: async ( + _parent: unknown, + args: { id: string }, + context, + ) => { + const userEmail = + context.applicationServices.verifiedUser?.verifiedJwt?.email; + if (!userEmail) { + throw new Error('Authentication required'); + } + + const result = + await context.applicationServices.Listing.ItemListing.pause({ + id: args.id, + }); + return result; + }, }, }; From caebdcf9e360a4f8d957acfbcac90ca1c15ea8c8 Mon Sep 17 00:00:00 2001 From: Arif Ahmed Date: Mon, 17 Nov 2025 14:15:25 -0500 Subject: [PATCH 2/8] test: add unit tests and Storybook stories for pause listing - Add GraphQL resolver tests for pauseItemListing mutation - Add application service unit tests for pause functionality - Add container component tests with state mapping verification - Update Storybook stories with pause action scenarios - Add feature file scenarios for pause listing resolver Completes test coverage requirements per instruction markdowns. --- .../all-listings-table.container.test.tsx | 133 ++++++++++++++++++ .../stories/all-listings-table.stories.tsx | 46 ++++++ .../src/contexts/listing/item/pause.test.ts | 125 ++++++++++++++++ .../features/item-listing.resolvers.feature | 23 +++ .../listing/item-listing.resolvers.test.ts | 93 ++++++++++++ 5 files changed, 420 insertions(+) create mode 100644 apps/ui-sharethrift/src/components/layouts/home/my-listings/components/all-listings-table.container.test.tsx create mode 100644 packages/sthrift/application-services/src/contexts/listing/item/pause.test.ts diff --git a/apps/ui-sharethrift/src/components/layouts/home/my-listings/components/all-listings-table.container.test.tsx b/apps/ui-sharethrift/src/components/layouts/home/my-listings/components/all-listings-table.container.test.tsx new file mode 100644 index 000000000..449031522 --- /dev/null +++ b/apps/ui-sharethrift/src/components/layouts/home/my-listings/components/all-listings-table.container.test.tsx @@ -0,0 +1,133 @@ +import { describe, it, expect, vi, beforeEach } from 'vitest'; +import { render, screen, waitFor } from '@testing-library/react'; +import { MockedProvider } from '@apollo/client/testing'; +import { AllListingsTableContainer } from './all-listings-table.container.tsx'; +import { + HomeAllListingsTableContainerMyListingsAllDocument, + HomeAllListingsTableContainerPauseItemListingDocument, +} from '../../../../../generated.tsx'; + +// Mock Ant Design message +vi.mock('antd', async () => { + const actual = await vi.importActual('antd'); + return { + ...actual, + message: { + success: vi.fn(), + error: vi.fn(), + }, + }); +}); + +describe('AllListingsTableContainer', () => { + const mockListingsData = { + myListingsAll: { + items: [ + { + id: 'listing-1', + title: 'Test Listing', + state: 'Published', + images: ['image1.jpg'], + createdAt: '2025-01-01T00:00:00Z', + sharingPeriodStart: '2025-02-01T00:00:00Z', + sharingPeriodEnd: '2025-02-28T00:00:00Z', + }, + ], + total: 1, + page: 1, + pageSize: 6, + }, + }; + + const mocks = [ + { + request: { + query: HomeAllListingsTableContainerMyListingsAllDocument, + variables: { + page: 1, + pageSize: 6, + searchText: '', + statusFilters: [], + sorter: undefined, + }, + }, + result: { + data: mockListingsData, + }, + }, + ]; + + beforeEach(() => { + vi.clearAllMocks(); + }); + + it('should render and display listings', async () => { + render( + + + , + ); + + await waitFor(() => { + expect(screen.getByText('Test Listing')).toBeInTheDocument(); + }); + }); + + it('should map domain state to UI status correctly', async () => { + const mocksWithPaused = [ + { + request: { + query: HomeAllListingsTableContainerMyListingsAllDocument, + variables: { + page: 1, + pageSize: 6, + searchText: '', + statusFilters: [], + sorter: undefined, + }, + }, + result: { + data: { + myListingsAll: { + items: [ + { + id: 'listing-1', + title: 'Published Listing', + state: 'Published', + images: [], + createdAt: '2025-01-01T00:00:00Z', + sharingPeriodStart: '2025-02-01T00:00:00Z', + sharingPeriodEnd: '2025-02-28T00:00:00Z', + }, + { + id: 'listing-2', + title: 'Paused Listing', + state: 'Paused', + images: [], + createdAt: '2025-01-01T00:00:00Z', + sharingPeriodStart: '2025-02-01T00:00:00Z', + sharingPeriodEnd: '2025-02-28T00:00:00Z', + }, + ], + total: 2, + page: 1, + pageSize: 6, + }, + }, + }, + }, + ]; + + render( + + + , + ); + + await waitFor(() => { + expect(screen.getByText('Published Listing')).toBeInTheDocument(); + expect(screen.getByText('Paused Listing')).toBeInTheDocument(); + }); + }); +}); + diff --git a/apps/ui-sharethrift/src/components/layouts/home/my-listings/stories/all-listings-table.stories.tsx b/apps/ui-sharethrift/src/components/layouts/home/my-listings/stories/all-listings-table.stories.tsx index 1d1dd5218..fc0c25d4b 100644 --- a/apps/ui-sharethrift/src/components/layouts/home/my-listings/stories/all-listings-table.stories.tsx +++ b/apps/ui-sharethrift/src/components/layouts/home/my-listings/stories/all-listings-table.stories.tsx @@ -20,6 +20,15 @@ const MOCK_LISTINGS = [ status: 'Active', pendingRequestsCount: 3, }, + { + id: '3', + title: 'City Bike', + image: '/assets/item-images/bike.png', + publishedAt: '2025-01-15', + reservationPeriod: '2025-02-01 - 2025-02-28', + status: 'Reserved', + pendingRequestsCount: 1, + }, ]; const meta: Meta = { @@ -49,3 +58,40 @@ export default meta; type Story = StoryObj; export const Default: Story = {}; + +export const WithPauseAction: Story = { + args: { + ...meta.args, + onAction: (action: string, listingId: string) => { + if (action === 'pause') { + console.log('Pause action triggered for listing:', listingId); + alert(`Pausing listing ${listingId}. In real app, this would show a confirmation modal.`); + } else { + console.log('Action:', action, 'Listing:', listingId); + } + }, + }, +}; + +export const ActiveListingsWithPause: Story = { + args: { + ...meta.args, + data: MOCK_LISTINGS.filter((listing) => listing.status === 'Active' || listing.status === 'Reserved'), + onAction: (action: string, listingId: string) => { + console.log('Action:', action, 'Listing:', listingId); + if (action === 'pause') { + alert(`Pause confirmation would appear for listing ${listingId}`); + } + }, + }, +}; + +export const PausedListings: Story = { + args: { + ...meta.args, + data: MOCK_LISTINGS.filter((listing) => listing.status === 'Paused'), + onAction: (action: string, listingId: string) => { + console.log('Action:', action, 'Listing:', listingId); + }, + }, +}; diff --git a/packages/sthrift/application-services/src/contexts/listing/item/pause.test.ts b/packages/sthrift/application-services/src/contexts/listing/item/pause.test.ts new file mode 100644 index 000000000..a697caeff --- /dev/null +++ b/packages/sthrift/application-services/src/contexts/listing/item/pause.test.ts @@ -0,0 +1,125 @@ +import { describe, it, expect, vi, beforeEach } from 'vitest'; +import type { Domain } from '@sthrift/domain'; +import type { DataSources } from '@sthrift/persistence'; +import { pause, type ItemListingPauseCommand } from './pause.ts'; + +describe('pause', () => { + let mockDataSources: DataSources; + let mockListing: Domain.Contexts.Listing.ItemListing.ItemListingEntityReference; + let mockRepo: { + getById: ReturnType; + save: ReturnType; + }; + let mockUow: { + withScopedTransaction: ReturnType; + }; + + beforeEach(() => { + mockListing = { + id: 'listing-1', + title: 'Test Listing', + description: 'Test description', + category: 'Electronics', + location: 'Delhi', + sharingPeriodStart: new Date('2025-10-06'), + sharingPeriodEnd: new Date('2025-11-06'), + state: 'Published', + sharer: { + id: 'user-1', + } as Domain.Contexts.User.PersonalUser.PersonalUserEntityReference, + images: [], + reports: 0, + sharingHistory: [], + createdAt: new Date(), + updatedAt: new Date(), + schemaVersion: '1.0.0', + listingType: 'item-listing', + }; + + mockRepo = { + getById: vi.fn().mockResolvedValue(mockListing), + save: vi.fn().mockResolvedValue({ + ...mockListing, + state: 'Paused', + }), + }; + + mockUow = { + withScopedTransaction: vi.fn().mockImplementation(async (callback) => { + return await callback(mockRepo); + }), + }; + + mockDataSources = { + domainDataSource: { + Listing: { + ItemListing: { + ItemListingUnitOfWork: mockUow, + }, + }, + }, + } as unknown as DataSources; + }); + + it('should pause a listing successfully', async () => { + const command: ItemListingPauseCommand = { id: 'listing-1' }; + const pauseFn = pause(mockDataSources); + + // Mock the pause method on the listing + const listingWithPause = { + ...mockListing, + pause: vi.fn(), + }; + mockRepo.getById = vi.fn().mockResolvedValue(listingWithPause); + + const result = await pauseFn(command); + + expect(mockUow.withScopedTransaction).toHaveBeenCalled(); + expect(mockRepo.getById).toHaveBeenCalledWith('listing-1'); + expect(listingWithPause.pause).toHaveBeenCalled(); + expect(mockRepo.save).toHaveBeenCalledWith(listingWithPause); + expect(result.state).toBe('Paused'); + }); + + it('should throw error when listing is not found', async () => { + const command: ItemListingPauseCommand = { id: 'nonexistent-id' }; + const pauseFn = pause(mockDataSources); + + mockRepo.getById = vi.fn().mockResolvedValue(null); + + await expect(pauseFn(command)).rejects.toThrow('Listing not found'); + expect(mockUow.withScopedTransaction).toHaveBeenCalled(); + expect(mockRepo.getById).toHaveBeenCalledWith('nonexistent-id'); + expect(mockRepo.save).not.toHaveBeenCalled(); + }); + + it('should throw error when save fails', async () => { + const command: ItemListingPauseCommand = { id: 'listing-1' }; + const pauseFn = pause(mockDataSources); + + const listingWithPause = { + ...mockListing, + pause: vi.fn(), + }; + mockRepo.getById = vi.fn().mockResolvedValue(listingWithPause); + mockRepo.save = vi.fn().mockResolvedValue(undefined); + + await expect(pauseFn(command)).rejects.toThrow('ItemListing not paused'); + expect(mockUow.withScopedTransaction).toHaveBeenCalled(); + expect(mockRepo.getById).toHaveBeenCalledWith('listing-1'); + expect(listingWithPause.pause).toHaveBeenCalled(); + expect(mockRepo.save).toHaveBeenCalled(); + }); + + it('should throw error when repository throws', async () => { + const command: ItemListingPauseCommand = { id: 'listing-1' }; + const pauseFn = pause(mockDataSources); + + mockUow.withScopedTransaction = vi.fn().mockRejectedValue( + new Error('Database error'), + ); + + await expect(pauseFn(command)).rejects.toThrow('Database error'); + }); +}); + diff --git a/packages/sthrift/graphql/src/schema/types/listing/features/item-listing.resolvers.feature b/packages/sthrift/graphql/src/schema/types/listing/features/item-listing.resolvers.feature index e13713d63..9a3f38d92 100644 --- a/packages/sthrift/graphql/src/schema/types/listing/features/item-listing.resolvers.feature +++ b/packages/sthrift/graphql/src/schema/types/listing/features/item-listing.resolvers.feature @@ -86,6 +86,29 @@ So that I can view, filter, and create listings through the GraphQL API Given Listing.ItemListing.create throws an error When the createItemListing mutation is executed Then it should propagate the error message + + Scenario: Pausing an item listing successfully + Given a user with a verifiedJwt in their context + And a valid listing ID for an active listing + When the pauseItemListing mutation is executed + Then it should call Listing.ItemListing.pause with the listing ID + And it should return the paused listing with state "Paused" + + Scenario: Pausing an item listing without authentication + Given a user without a verifiedJwt in their context + When the pauseItemListing mutation is executed + Then it should throw an "Authentication required" error + + Scenario: Pausing a non-existent item listing + Given a user with a verifiedJwt in their context + And a listing ID that does not match any record + When the pauseItemListing mutation is executed + Then it should propagate the error from the application service + + Scenario: Error while pausing an item listing + Given Listing.ItemListing.pause throws an error + When the pauseItemListing mutation is executed + Then it should propagate the error message Scenario: Mapping item listing fields for myListingsAll Given a valid result from queryPaged diff --git a/packages/sthrift/graphql/src/schema/types/listing/item-listing.resolvers.test.ts b/packages/sthrift/graphql/src/schema/types/listing/item-listing.resolvers.test.ts index 34f660dff..ded3301f6 100644 --- a/packages/sthrift/graphql/src/schema/types/listing/item-listing.resolvers.test.ts +++ b/packages/sthrift/graphql/src/schema/types/listing/item-listing.resolvers.test.ts @@ -121,6 +121,8 @@ function makeMockGraphContext( queryPaged: vi.fn(), create: vi.fn(), update: vi.fn(), + cancel: vi.fn(), + pause: vi.fn(), }, }, User: { @@ -731,4 +733,95 @@ test.for(feature, ({ Scenario }) => { }); }); + Scenario('Pausing an item listing successfully', ({ Given, And, When, Then }) => { + Given('a user with a verifiedJwt in their context', () => { + context = makeMockGraphContext(); + }); + And('a valid listing ID for an active listing', () => { + vi.mocked( + context.applicationServices.Listing.ItemListing.pause, + ).mockResolvedValue(createMockListing({ id: 'listing-1', state: 'Paused' })); + }); + When('the pauseItemListing mutation is executed', async () => { + const resolver = itemListingResolvers.Mutation?.pauseItemListing as TestResolver<{ id: string }>; + result = await resolver({}, { id: 'listing-1' }, context, {} as never); + }); + Then('it should call Listing.ItemListing.pause with the listing ID', () => { + expect( + context.applicationServices.Listing.ItemListing.pause, + ).toHaveBeenCalledWith({ id: 'listing-1' }); + }); + And('it should return the paused listing with state "Paused"', () => { + expect(result).toBeDefined(); + expect((result as { state: string }).state).toBe('Paused'); + }); + }); + + Scenario('Pausing an item listing without authentication', ({ Given, When, Then }) => { + Given('a user without a verifiedJwt in their context', () => { + context = makeMockGraphContext({ + applicationServices: { + ...makeMockGraphContext().applicationServices, + verifiedUser: null, + }, + }); + }); + When('the pauseItemListing mutation is executed', async () => { + try { + const resolver = itemListingResolvers.Mutation?.pauseItemListing as TestResolver<{ id: string }>; + await resolver({}, { id: 'listing-1' }, context, {} as never); + } catch (e) { + error = e as Error; + } + }); + Then('it should throw an "Authentication required" error', () => { + expect(error).toBeDefined(); + expect(error?.message).toBe('Authentication required'); + }); + }); + + Scenario('Pausing a non-existent item listing', ({ Given, And, When, Then }) => { + Given('a user with a verifiedJwt in their context', () => { + context = makeMockGraphContext(); + }); + And('a listing ID that does not match any record', () => { + vi.mocked( + context.applicationServices.Listing.ItemListing.pause, + ).mockRejectedValue(new Error('Listing not found')); + }); + When('the pauseItemListing mutation is executed', async () => { + try { + const resolver = itemListingResolvers.Mutation?.pauseItemListing as TestResolver<{ id: string }>; + await resolver({}, { id: 'nonexistent-id' }, context, {} as never); + } catch (e) { + error = e as Error; + } + }); + Then('it should propagate the error from the application service', () => { + expect(error).toBeDefined(); + expect(error?.message).toBe('Listing not found'); + }); + }); + + Scenario('Error while pausing an item listing', ({ Given, When, Then }) => { + Given('Listing.ItemListing.pause throws an error', () => { + context = makeMockGraphContext(); + vi.mocked( + context.applicationServices.Listing.ItemListing.pause, + ).mockRejectedValue(new Error('Pause failed')); + }); + When('the pauseItemListing mutation is executed', async () => { + try { + const resolver = itemListingResolvers.Mutation?.pauseItemListing as TestResolver<{ id: string }>; + await resolver({}, { id: 'listing-1' }, context, {} as never); + } catch (e) { + error = e as Error; + } + }); + Then('it should propagate the error message', () => { + expect(error).toBeDefined(); + expect(error?.message).toBe('Pause failed'); + }); + }); + }); \ No newline at end of file From 564893e956772911a59125fd5eb0f4691a0d2b04 Mon Sep 17 00:00:00 2001 From: Arif Ahmed Date: Wed, 19 Nov 2025 10:10:00 -0500 Subject: [PATCH 3/8] Fix ui build by adjusting tsconfig --- apps/ui-sharethrift/tsconfig.json | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/apps/ui-sharethrift/tsconfig.json b/apps/ui-sharethrift/tsconfig.json index 36099fa98..2768f8366 100644 --- a/apps/ui-sharethrift/tsconfig.json +++ b/apps/ui-sharethrift/tsconfig.json @@ -9,8 +9,16 @@ "skipLibCheck": true, "module": "ESNext", "moduleResolution": "bundler", - "allowImportingTsExtensions": true + "allowImportingTsExtensions": true, + "noPropertyAccessFromIndexSignature": false }, "include": ["src/**/*"], - "exclude": ["node_modules", "dist"] + "exclude": [ + "node_modules", + "dist", + "src/**/*.test.ts", + "src/**/*.test.tsx", + "src/**/*.spec.ts", + "src/**/*.spec.tsx" + ] } From 39b5f0f3cbb1129a20cd9a55fa4e15029788e97a Mon Sep 17 00:00:00 2001 From: Arif Ahmed Date: Wed, 19 Nov 2025 11:29:46 -0500 Subject: [PATCH 4/8] chore: update Docusaurus and testing library dependencies, and add new build configurations and scripts. --- apps/docs/package.json | 118 +-- apps/ui-sharethrift/package.json | 125 +-- .../all-listings-table.container.test.tsx | 22 +- apps/ui-sharethrift/tsconfig.test.json | 13 + package.json | 135 +-- packages/sthrift/ui-components/package.json | 143 ++- .../ui-components/scripts/copy-assets.mjs | 20 + pnpm-lock.yaml | 893 +++++++++--------- 8 files changed, 775 insertions(+), 694 deletions(-) create mode 100644 apps/ui-sharethrift/tsconfig.test.json create mode 100644 packages/sthrift/ui-components/scripts/copy-assets.mjs diff --git a/apps/docs/package.json b/apps/docs/package.json index d264f917e..f67f74cf4 100644 --- a/apps/docs/package.json +++ b/apps/docs/package.json @@ -1,60 +1,60 @@ { - "name": "@sthrift/docs", - "version": "0.0.0", - "private": true, - "scripts": { - "docusaurus": "docusaurus", - "start": "docusaurus start --port 3002", - "build": "docusaurus build", - "swizzle": "docusaurus swizzle", - "deploy": "docusaurus deploy", - "clear": "docusaurus clear", - "serve": "docusaurus serve", - "write-translations": "docusaurus write-translations", - "write-heading-ids": "docusaurus write-heading-ids", - "typecheck": "tsc", - "test": "vitest run", - "test:coverage": "vitest run --coverage", - "test:watch": "vitest" - }, - "dependencies": { - "@docusaurus/core": "3.8.1", - "@docusaurus/preset-classic": "3.8.1", - "@mdx-js/react": "^3.0.0", - "clsx": "^2.0.0", - "prism-react-renderer": "^2.3.0", - "react": "^19.0.0", - "react-dom": "^19.0.0" - }, - "devDependencies": { - "@cellix/typescript-config": "workspace:*", - "@cellix/vitest-config": "workspace:*", - "@docusaurus/module-type-aliases": "3.8.1", - "@docusaurus/tsconfig": "3.8.1", - "@docusaurus/types": "3.8.1", - "@testing-library/jest-dom": "^6.6.3", - "@testing-library/react": "^16.1.0", - "@testing-library/user-event": "^14.5.2", - "@types/react": "^19.1.11", - "@types/react-dom": "^19.1.6", - "@vitest/coverage-v8": "^3.2.4", - "jsdom": "^26.1.0", - "typescript": "~5.6.2", - "vitest": "^3.2.4" - }, - "browserslist": { - "production": [ - ">0.5%", - "not dead", - "not op_mini all" - ], - "development": [ - "last 3 chrome version", - "last 3 firefox version", - "last 5 safari version" - ] - }, - "engines": { - "node": ">=18.0" - } -} \ No newline at end of file + "name": "@sthrift/docs", + "version": "0.0.0", + "private": true, + "scripts": { + "docusaurus": "docusaurus", + "start": "docusaurus start --port 3002", + "build": "docusaurus build", + "swizzle": "docusaurus swizzle", + "deploy": "docusaurus deploy", + "clear": "docusaurus clear", + "serve": "docusaurus serve", + "write-translations": "docusaurus write-translations", + "write-heading-ids": "docusaurus write-heading-ids", + "typecheck": "tsc", + "test": "vitest run", + "test:coverage": "vitest run --coverage", + "test:watch": "vitest" + }, + "dependencies": { + "@docusaurus/core": "3.9.2", + "@docusaurus/preset-classic": "3.9.2", + "@mdx-js/react": "^3.0.0", + "clsx": "^2.0.0", + "prism-react-renderer": "^2.3.0", + "react": "^19.0.0", + "react-dom": "^19.0.0" + }, + "devDependencies": { + "@cellix/typescript-config": "workspace:*", + "@cellix/vitest-config": "workspace:*", + "@docusaurus/module-type-aliases": "3.9.2", + "@docusaurus/tsconfig": "3.9.2", + "@docusaurus/types": "3.9.2", + "@testing-library/jest-dom": "^6.6.3", + "@testing-library/react": "^16.1.0", + "@testing-library/user-event": "^14.5.2", + "@types/react": "^19.1.11", + "@types/react-dom": "^19.1.6", + "@vitest/coverage-v8": "^3.2.4", + "jsdom": "^26.1.0", + "typescript": "~5.6.2", + "vitest": "^3.2.4" + }, + "browserslist": { + "production": [ + ">0.5%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 3 chrome version", + "last 3 firefox version", + "last 5 safari version" + ] + }, + "engines": { + "node": ">=18.0" + } +} diff --git a/apps/ui-sharethrift/package.json b/apps/ui-sharethrift/package.json index c5f8a03de..17e0fb3dd 100644 --- a/apps/ui-sharethrift/package.json +++ b/apps/ui-sharethrift/package.json @@ -1,63 +1,64 @@ { - "name": "@sthrift/ui-sharethrift", - "private": true, - "version": "0.0.0", - "type": "module", - "scripts": { - "start": "vite", - "build": "tsc -b && vite build", - "lint": "eslint .", - "preview": "vite preview", - "tswatch": "tsc --build --watch", - "storybook": "storybook dev -p 6006", - "build-storybook": "storybook build" - }, - "dependencies": { - "@ant-design/icons": "^6.1.0", - "@ant-design/v5-patch-for-react-19": "^1.0.3", - "@apollo/client": "^4.0.7", - "@sthrift/ui-components": "workspace:*", - "@tailwindcss/vite": "^4.1.11", - "@twilio/conversations": "^2.6.3", - "antd": "^5.27.1", - "clean": "^4.0.2", - "crypto-hash": "^3.1.0", - "dayjs": "^1.11.18", - "graphql": "^16.11.0", - "lodash": "^4.17.21", - "react": "^19.1.1", - "react-dom": "^19.1.1", - "react-oidc-context": "^3.3.0", - "react-router-dom": "^7.8.0", - "rxjs": "^7.8.2", - "tailwindcss": "^4.1.11" - }, - "devDependencies": { - "@cellix/typescript-config": "workspace:*", - "@cellix/vitest-config": "workspace:*", - "@chromatic-com/storybook": "^4.1.0", - "@eslint/js": "^9.30.1", - "@graphql-typed-document-node/core": "^3.2.0", - "@storybook/addon-a11y": "^9.1.1", - "@storybook/addon-docs": "^9.1.1", - "@storybook/addon-vitest": "^9.1.1", - "@storybook/react": "^9.1.10", - "@storybook/react-vite": "^9.1.1", - "@types/lodash": "^4.17.20", - "@types/react": "^19.1.9", - "@types/react-dom": "^19.1.7", - "@vitejs/plugin-react": "^4.7.0", - "@vitest/browser": "3.2.4", - "@vitest/coverage-v8": "^3.2.4", - "eslint": "^9.30.1", - "eslint-plugin-react-hooks": "^5.2.0", - "eslint-plugin-react-refresh": "^0.4.20", - "globals": "^16.3.0", - "rollup": "^4.46.3", - "storybook": "^9.1.1", - "typescript": "~5.8.3", - "typescript-eslint": "^8.35.1", - "vite": "^7.1.2", - "vitest": "^3.2.4" - } -} \ No newline at end of file + "name": "@sthrift/ui-sharethrift", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "start": "vite", + "build": "tsc -b && vite build", + "lint": "eslint .", + "preview": "vite preview", + "tswatch": "tsc --build --watch", + "storybook": "storybook dev -p 6006", + "build-storybook": "storybook build" + }, + "dependencies": { + "@ant-design/icons": "^6.1.0", + "@ant-design/v5-patch-for-react-19": "^1.0.3", + "@apollo/client": "^4.0.7", + "@sthrift/ui-components": "workspace:*", + "@tailwindcss/vite": "^4.1.11", + "@twilio/conversations": "^2.6.3", + "antd": "^5.27.1", + "clean": "^4.0.2", + "crypto-hash": "^3.1.0", + "dayjs": "^1.11.18", + "graphql": "^16.11.0", + "lodash": "^4.17.21", + "react": "^19.1.1", + "react-dom": "^19.1.1", + "react-oidc-context": "^3.3.0", + "react-router-dom": "^7.8.0", + "rxjs": "^7.8.2", + "tailwindcss": "^4.1.11" + }, + "devDependencies": { + "@cellix/typescript-config": "workspace:*", + "@cellix/vitest-config": "workspace:*", + "@chromatic-com/storybook": "^4.1.0", + "@eslint/js": "^9.30.1", + "@graphql-typed-document-node/core": "^3.2.0", + "@testing-library/react": "^16.3.0", + "@storybook/addon-a11y": "^9.1.1", + "@storybook/addon-docs": "^9.1.1", + "@storybook/addon-vitest": "^9.1.1", + "@storybook/react": "^9.1.10", + "@storybook/react-vite": "^9.1.1", + "@types/lodash": "^4.17.20", + "@types/react": "^19.1.9", + "@types/react-dom": "^19.1.7", + "@vitejs/plugin-react": "^4.7.0", + "@vitest/browser": "3.2.4", + "@vitest/coverage-v8": "^3.2.4", + "eslint": "^9.30.1", + "eslint-plugin-react-hooks": "^5.2.0", + "eslint-plugin-react-refresh": "^0.4.20", + "globals": "^16.3.0", + "rollup": "^4.46.3", + "storybook": "^9.1.1", + "typescript": "~5.8.3", + "typescript-eslint": "^8.35.1", + "vite": "^7.1.2", + "vitest": "^3.2.4" + } +} diff --git a/apps/ui-sharethrift/src/components/layouts/home/my-listings/components/all-listings-table.container.test.tsx b/apps/ui-sharethrift/src/components/layouts/home/my-listings/components/all-listings-table.container.test.tsx index 449031522..1fbc8b3da 100644 --- a/apps/ui-sharethrift/src/components/layouts/home/my-listings/components/all-listings-table.container.test.tsx +++ b/apps/ui-sharethrift/src/components/layouts/home/my-listings/components/all-listings-table.container.test.tsx @@ -1,11 +1,8 @@ import { describe, it, expect, vi, beforeEach } from 'vitest'; import { render, screen, waitFor } from '@testing-library/react'; -import { MockedProvider } from '@apollo/client/testing'; -import { AllListingsTableContainer } from './all-listings-table.container.tsx'; -import { - HomeAllListingsTableContainerMyListingsAllDocument, - HomeAllListingsTableContainerPauseItemListingDocument, -} from '../../../../../generated.tsx'; +import { MockedProvider } from '@apollo/client/testing/react'; +import { AllListingsTableContainer } from './all-listings-table.container'; +import { HomeAllListingsTableContainerMyListingsAllDocument } from '../../../../../generated.tsx'; // Mock Ant Design message vi.mock('antd', async () => { @@ -16,7 +13,7 @@ vi.mock('antd', async () => { success: vi.fn(), error: vi.fn(), }, - }); + }; }); describe('AllListingsTableContainer', () => { @@ -63,13 +60,13 @@ describe('AllListingsTableContainer', () => { it('should render and display listings', async () => { render( - + , ); await waitFor(() => { - expect(screen.getByText('Test Listing')).toBeInTheDocument(); + expect(screen.getByText('Test Listing')).toBeTruthy(); }); }); @@ -119,15 +116,14 @@ describe('AllListingsTableContainer', () => { ]; render( - + , ); await waitFor(() => { - expect(screen.getByText('Published Listing')).toBeInTheDocument(); - expect(screen.getByText('Paused Listing')).toBeInTheDocument(); + expect(screen.getByText('Published Listing')).toBeTruthy(); + expect(screen.getByText('Paused Listing')).toBeTruthy(); }); }); }); - diff --git a/apps/ui-sharethrift/tsconfig.test.json b/apps/ui-sharethrift/tsconfig.test.json new file mode 100644 index 000000000..42848543a --- /dev/null +++ b/apps/ui-sharethrift/tsconfig.test.json @@ -0,0 +1,13 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "types": ["vitest/globals", "node"] + }, + "include": [ + "src/**/*.test.ts", + "src/**/*.test.tsx", + "src/**/*.spec.ts", + "src/**/*.spec.tsx" + ], + "exclude": ["node_modules", "dist"] +} diff --git a/package.json b/package.json index 4335db229..338cc16fa 100644 --- a/package.json +++ b/package.json @@ -1,66 +1,71 @@ { - "name": "sharethrift", - "version": "1.0.0", - "description": "", - "type": "module", - "author": "Simnova", - "license": "MIT", - "packageManager": "pnpm@10.18.2", - "main": "apps/api/dist/src/index.js", - "scripts": { - "build": "turbo run build", - "test": "turbo run test", - "lint": "turbo run lint", - "dev": "pnpm run build && turbo run azurite gen:watch start --parallel", - "start": "turbo run build && concurrently pnpm:start:* --kill-others-on-fail --workspace=@sthrift/api", - "format": "turbo run format", - "gen": "graphql-codegen --config codegen.yml", - "gen:watch": "graphql-codegen --config codegen.yml --watch", - "tsbuild": "tsc --build", - "tswatch": "tsc --build --watch", - "clean": "pnpm install && turbo run clean && rimraf dist node_modules **/coverage", - "start:api": "pnpm run start --workspace=@sthrift/api", - "start:ui-sharethrift": "pnpm run dev --workspace=@sthrift/ui-sharethrift", - "start-emulator:mongo-memory-server": "pnpm run start --workspace=@cellix/mock-mongodb-memory-server", - "start-emulator:auth-server": "pnpm run start --workspace=@cellix/mock-oauth2-server", - "start-emulator:payment-server": "pnpm run start --workspace=@cellix/mock-payment-server", - "start-emulator:messaging-server": "pnpm run start --workspace=@sthrift/mock-messaging-server", - "test:all": "turbo run test:all", - "test:coverage": "turbo run test:coverage", - "test:coverage:merge": "pnpm run test:coverage && pnpm run merge-lcov-reports", - "merge-lcov-reports": "node build-pipeline/scripts/merge-coverage.js", - "test:integration": "turbo run test:integration", - "test:serenity": "turbo run test:serenity", - "test:unit": "turbo run test:unit", - "test:watch": "turbo run test:watch --concurrency 15", - "sonar": "sonar-scanner", - "sonar:pr": "export PR_NUMBER=$(node build-pipeline/scripts/get-pr-number.cjs) && sonar-scanner -Dsonar.pullrequest.key=$PR_NUMBER -Dsonar.pullrequest.branch=$(git branch --show-current) -Dsonar.pullrequest.base=main", - "sonar:pr-windows": "for /f %i in ('node build-pipeline/scripts/get-pr-number.cjs') do set PR_NUMBER=%i && sonar-scanner -Dsonar.pullrequest.key=%PR_NUMBER% -Dsonar.pullrequest.branch=%BRANCH_NAME% -Dsonar.pullrequest.base=main", - "verify": "pnpm run test:coverage:merge && pnpm run sonar:pr && pnpm run check-sonar" - }, - "devDependencies": { - "@amiceli/vitest-cucumber": "^5.1.2", - "@biomejs/biome": "2.0.0", - "@graphql-codegen/cli": "^5.0.7", - "@graphql-codegen/introspection": "^4.0.3", - "@graphql-codegen/typed-document-node": "^5.1.2", - "@graphql-codegen/typescript": "^4.1.6", - "@graphql-codegen/typescript-operations": "^4.6.1", - "@graphql-codegen/typescript-resolvers": "^4.5.1", - "@parcel/watcher": "^2.5.1", - "@playwright/test": "^1.55.1", - "@sonar/scan": "^4.3.0", - "@types/node": "^24.7.2", - "@vitest/coverage-v8": "^3.2.4", - "azurite": "^3.35.0", - "concurrently": "^9.1.2", - "cpx2": "^3.0.2", - "rimraf": "^6.0.1", - "rollup": "3.29.4", - "tsx": "^4.20.3", - "turbo": "^2.5.8", - "typescript": "^5.8.3", - "vite": "^7.0.4", - "vitest": "^3.2.4" - } -} \ No newline at end of file + "name": "sharethrift", + "version": "1.0.0", + "description": "", + "type": "module", + "author": "Simnova", + "license": "MIT", + "packageManager": "pnpm@10.18.2", + "main": "apps/api/dist/src/index.js", + "scripts": { + "build": "turbo run build", + "test": "turbo run test", + "lint": "turbo run lint", + "dev": "pnpm run build && turbo run azurite gen:watch start --parallel", + "start": "turbo run build && concurrently pnpm:start:* --kill-others-on-fail --workspace=@sthrift/api", + "format": "turbo run format", + "gen": "graphql-codegen --config codegen.yml", + "gen:watch": "graphql-codegen --config codegen.yml --watch", + "tsbuild": "tsc --build", + "tswatch": "tsc --build --watch", + "clean": "pnpm install && turbo run clean && rimraf dist node_modules **/coverage", + "start:api": "pnpm run start --workspace=@sthrift/api", + "start:ui-sharethrift": "pnpm run dev --workspace=@sthrift/ui-sharethrift", + "start-emulator:mongo-memory-server": "pnpm run start --workspace=@cellix/mock-mongodb-memory-server", + "start-emulator:auth-server": "pnpm run start --workspace=@cellix/mock-oauth2-server", + "start-emulator:payment-server": "pnpm run start --workspace=@cellix/mock-payment-server", + "start-emulator:messaging-server": "pnpm run start --workspace=@sthrift/mock-messaging-server", + "test:all": "turbo run test:all", + "test:coverage": "turbo run test:coverage", + "test:coverage:merge": "pnpm run test:coverage && pnpm run merge-lcov-reports", + "merge-lcov-reports": "node build-pipeline/scripts/merge-coverage.js", + "test:integration": "turbo run test:integration", + "test:serenity": "turbo run test:serenity", + "test:unit": "turbo run test:unit", + "test:watch": "turbo run test:watch --concurrency 15", + "sonar": "sonar-scanner", + "sonar:pr": "export PR_NUMBER=$(node build-pipeline/scripts/get-pr-number.cjs) && sonar-scanner -Dsonar.pullrequest.key=$PR_NUMBER -Dsonar.pullrequest.branch=$(git branch --show-current) -Dsonar.pullrequest.base=main", + "sonar:pr-windows": "for /f %i in ('node build-pipeline/scripts/get-pr-number.cjs') do set PR_NUMBER=%i && sonar-scanner -Dsonar.pullrequest.key=%PR_NUMBER% -Dsonar.pullrequest.branch=%BRANCH_NAME% -Dsonar.pullrequest.base=main", + "verify": "pnpm run test:coverage:merge && pnpm run sonar:pr && pnpm run check-sonar" + }, + "devDependencies": { + "@amiceli/vitest-cucumber": "^5.1.2", + "@biomejs/biome": "2.0.0", + "@graphql-codegen/cli": "^5.0.7", + "@graphql-codegen/introspection": "^4.0.3", + "@graphql-codegen/typed-document-node": "^5.1.2", + "@graphql-codegen/typescript": "^4.1.6", + "@graphql-codegen/typescript-operations": "^4.6.1", + "@graphql-codegen/typescript-resolvers": "^4.5.1", + "@parcel/watcher": "^2.5.1", + "@playwright/test": "^1.55.1", + "@sonar/scan": "^4.3.0", + "@types/node": "^24.7.2", + "@vitest/coverage-v8": "^3.2.4", + "azurite": "^3.35.0", + "concurrently": "^9.1.2", + "cpx2": "^3.0.2", + "rimraf": "^6.1.0", + "rollup": "3.29.4", + "tsx": "^4.20.3", + "turbo": "^2.5.8", + "typescript": "^5.8.3", + "vite": "^7.0.4", + "vitest": "^3.2.4" + }, + "pnpm": { + "overrides": { + "glob": "11.1.0" + } + } +} diff --git a/packages/sthrift/ui-components/package.json b/packages/sthrift/ui-components/package.json index aa7ed3655..0e0433b74 100644 --- a/packages/sthrift/ui-components/package.json +++ b/packages/sthrift/ui-components/package.json @@ -1,73 +1,72 @@ { - "name": "@sthrift/ui-components", - "version": "1.0.0", - "private": true, - "type": "module", - "files": [ - "dist" - ], - "exports": { - ".": { - "types": "./dist/src/index.d.ts", - "default": "./dist/src/index.js" - }, - "./src/styles/theme.css": { - "default": "./src/styles/theme.css" - }, - "./src/assets/item-images/confetti.png": { - "default": "./src/assets/item-images/confetti.png" - }, - "./src/assets/*": { - "default": "./src/assets/*" - } - }, - "scripts": { - "prebuild": "biome lint", - "build": "tsc --build && pnpm run copy-css", - "copy-css": "cpx \"src/**/*.{css,svg,png,jpg,jpeg,gif}\" dist/src", - "watch": "tsc- --watch", - "test": "vitest run", - "test:coverage": "vitest run --coverage", - "test:watch": "vitest", - "lint": "biome lint", - "clean": "rimraf dist", - "storybook": "storybook dev -p 6007", - "build-storybook": "storybook build" - }, - "dependencies": { - "@ant-design/icons": "^6.1.0", - "@apollo/client": "^4.0.7", - "@cellix/ui-core": "workspace:*", - "@graphql-typed-document-node/core": "^3.2.0", - "antd": "^5.27.1", - "graphql": "^16.11.0", - "react": "^19.1.1", - "react-dom": "^19.1.1", - "react-oidc-context": "^3.3.0", - "react-router-dom": "^7.8.2", - "rxjs": "^7.8.2" - }, - "devDependencies": { - "@cellix/typescript-config": "workspace:*", - "@cellix/vitest-config": "workspace:*", - "@chromatic-com/storybook": "^4.1.1", - "@storybook/addon-a11y": "^9.1.3", - "@storybook/addon-docs": "^9.1.3", - "@storybook/addon-onboarding": "^9.1.3", - "@storybook/addon-vitest": "^9.1.3", - "@storybook/react": "^9.1.10", - "@storybook/react-vite": "^9.1.3", - "@types/react": "^19.1.11", - "@types/react-dom": "^19.1.6", - "@vitest/browser": "^3.2.4", - "@vitest/coverage-v8": "^3.2.4", - "jsdom": "^26.1.0", - "markdown-to-jsx": "^7.4.6", - "playwright": "^1.55.0", - "rimraf": "^6.0.1", - "storybook": "^9.1.3", - "typescript": "^5.8.3", - "vite": "^7.0.4", - "vitest": "^3.2.4" - } -} \ No newline at end of file + "name": "@sthrift/ui-components", + "version": "1.0.0", + "private": true, + "type": "module", + "files": [ + "dist" + ], + "exports": { + ".": { + "types": "./dist/src/index.d.ts", + "default": "./dist/src/index.js" + }, + "./src/styles/theme.css": { + "default": "./src/styles/theme.css" + }, + "./src/assets/item-images/confetti.png": { + "default": "./src/assets/item-images/confetti.png" + }, + "./src/assets/*": { + "default": "./src/assets/*" + } + }, + "scripts": { + "prebuild": "biome lint", + "build": "tsc --build && node scripts/copy-assets.mjs", + "watch": "tsc- --watch", + "test": "vitest run", + "test:coverage": "vitest run --coverage", + "test:watch": "vitest", + "lint": "biome lint", + "clean": "rimraf dist", + "storybook": "storybook dev -p 6007", + "build-storybook": "storybook build" + }, + "dependencies": { + "@ant-design/icons": "^6.1.0", + "@apollo/client": "^4.0.7", + "@cellix/ui-core": "workspace:*", + "@graphql-typed-document-node/core": "^3.2.0", + "antd": "^5.27.1", + "graphql": "^16.11.0", + "react": "^19.1.1", + "react-dom": "^19.1.1", + "react-oidc-context": "^3.3.0", + "react-router-dom": "^7.8.2", + "rxjs": "^7.8.2" + }, + "devDependencies": { + "@cellix/typescript-config": "workspace:*", + "@cellix/vitest-config": "workspace:*", + "@chromatic-com/storybook": "^4.1.1", + "@storybook/addon-a11y": "^9.1.3", + "@storybook/addon-docs": "^9.1.3", + "@storybook/addon-onboarding": "^9.1.3", + "@storybook/addon-vitest": "^9.1.3", + "@storybook/react": "^9.1.10", + "@storybook/react-vite": "^9.1.3", + "@types/react": "^19.1.11", + "@types/react-dom": "^19.1.6", + "@vitest/browser": "^3.2.4", + "@vitest/coverage-v8": "^3.2.4", + "jsdom": "^26.1.0", + "markdown-to-jsx": "^7.4.6", + "playwright": "^1.55.0", + "rimraf": "^6.0.1", + "storybook": "^9.1.3", + "typescript": "^5.8.3", + "vite": "^7.0.4", + "vitest": "^3.2.4" + } +} diff --git a/packages/sthrift/ui-components/scripts/copy-assets.mjs b/packages/sthrift/ui-components/scripts/copy-assets.mjs new file mode 100644 index 000000000..a869a3574 --- /dev/null +++ b/packages/sthrift/ui-components/scripts/copy-assets.mjs @@ -0,0 +1,20 @@ +import { mkdir, cp } from 'node:fs/promises'; +import { dirname, resolve } from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); + +const srcDir = resolve(__dirname, '..', 'src'); +const destDir = resolve(__dirname, '..', 'dist', 'src'); + +await mkdir(destDir, { recursive: true }); + +// Copy all files recursively; the build only outputs JS/DTs into dist/src, +// so copying the entire src tree preserves CSS and assets alongside. +try { + await cp(srcDir, destDir, { recursive: true }); +} catch (error) { + console.error('Failed to copy assets:', error); + process.exit(1); +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1abd353c4..cbde43205 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -13,6 +13,9 @@ catalogs: specifier: 8.17.0 version: 8.17.0 +overrides: + glob: 11.1.0 + importers: .: @@ -66,8 +69,8 @@ importers: specifier: ^3.0.2 version: 3.0.2 rimraf: - specifier: ^6.0.1 - version: 6.0.1 + specifier: ^6.1.0 + version: 6.1.0 rollup: specifier: 3.29.4 version: 3.29.4 @@ -166,11 +169,11 @@ importers: apps/docs: dependencies: '@docusaurus/core': - specifier: 3.8.1 - version: 3.8.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3) + specifier: 3.9.2 + version: 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3) '@docusaurus/preset-classic': - specifier: 3.8.1 - version: 3.8.1(@algolia/client-search@5.41.0)(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(search-insights@2.17.3)(typescript@5.6.3) + specifier: 3.9.2 + version: 3.9.2(@algolia/client-search@5.41.0)(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(search-insights@2.17.3)(typescript@5.6.3) '@mdx-js/react': specifier: ^3.0.0 version: 3.1.1(@types/react@19.2.2)(react@19.2.0) @@ -194,14 +197,14 @@ importers: specifier: workspace:* version: link:../../packages/cellix/vitest-config '@docusaurus/module-type-aliases': - specifier: 3.8.1 - version: 3.8.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + specifier: 3.9.2 + version: 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@docusaurus/tsconfig': - specifier: 3.8.1 - version: 3.8.1 + specifier: 3.9.2 + version: 3.9.2 '@docusaurus/types': - specifier: 3.8.1 - version: 3.8.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + specifier: 3.9.2 + version: 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@testing-library/jest-dom': specifier: ^6.6.3 version: 6.9.1 @@ -317,6 +320,9 @@ importers: '@storybook/react-vite': specifier: ^9.1.1 version: 9.1.13(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(rollup@4.52.5)(storybook@9.1.13(@testing-library/dom@10.4.1)(vite@7.1.12(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(typescript@5.8.3)(vite@7.1.12(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + '@testing-library/react': + specifier: ^16.3.0 + version: 16.3.0(@testing-library/dom@10.4.1)(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@types/lodash': specifier: ^4.17.20 version: 4.17.20 @@ -2722,120 +2728,120 @@ packages: search-insights: optional: true - '@docusaurus/babel@3.8.1': - resolution: {integrity: sha512-3brkJrml8vUbn9aeoZUlJfsI/GqyFcDgQJwQkmBtclJgWDEQBKKeagZfOgx0WfUQhagL1sQLNW0iBdxnI863Uw==} - engines: {node: '>=18.0'} + '@docusaurus/babel@3.9.2': + resolution: {integrity: sha512-GEANdi/SgER+L7Japs25YiGil/AUDnFFHaCGPBbundxoWtCkA2lmy7/tFmgED4y1htAy6Oi4wkJEQdGssnw9MA==} + engines: {node: '>=20.0'} - '@docusaurus/bundler@3.8.1': - resolution: {integrity: sha512-/z4V0FRoQ0GuSLToNjOSGsk6m2lQUG4FRn8goOVoZSRsTrU8YR2aJacX5K3RG18EaX9b+52pN4m1sL3MQZVsQA==} - engines: {node: '>=18.0'} + '@docusaurus/bundler@3.9.2': + resolution: {integrity: sha512-ZOVi6GYgTcsZcUzjblpzk3wH1Fya2VNpd5jtHoCCFcJlMQ1EYXZetfAnRHLcyiFeBABaI1ltTYbOBtH/gahGVA==} + engines: {node: '>=20.0'} peerDependencies: '@docusaurus/faster': '*' peerDependenciesMeta: '@docusaurus/faster': optional: true - '@docusaurus/core@3.8.1': - resolution: {integrity: sha512-ENB01IyQSqI2FLtOzqSI3qxG2B/jP4gQPahl2C3XReiLebcVh5B5cB9KYFvdoOqOWPyr5gXK4sjgTKv7peXCrA==} - engines: {node: '>=18.0'} + '@docusaurus/core@3.9.2': + resolution: {integrity: sha512-HbjwKeC+pHUFBfLMNzuSjqFE/58+rLVKmOU3lxQrpsxLBOGosYco/Q0GduBb0/jEMRiyEqjNT/01rRdOMWq5pw==} + engines: {node: '>=20.0'} hasBin: true peerDependencies: '@mdx-js/react': ^3.0.0 react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 - '@docusaurus/cssnano-preset@3.8.1': - resolution: {integrity: sha512-G7WyR2N6SpyUotqhGznERBK+x84uyhfMQM2MmDLs88bw4Flom6TY46HzkRkSEzaP9j80MbTN8naiL1fR17WQug==} - engines: {node: '>=18.0'} + '@docusaurus/cssnano-preset@3.9.2': + resolution: {integrity: sha512-8gBKup94aGttRduABsj7bpPFTX7kbwu+xh3K9NMCF5K4bWBqTFYW+REKHF6iBVDHRJ4grZdIPbvkiHd/XNKRMQ==} + engines: {node: '>=20.0'} - '@docusaurus/logger@3.8.1': - resolution: {integrity: sha512-2wjeGDhKcExEmjX8k1N/MRDiPKXGF2Pg+df/bDDPnnJWHXnVEZxXj80d6jcxp1Gpnksl0hF8t/ZQw9elqj2+ww==} - engines: {node: '>=18.0'} + '@docusaurus/logger@3.9.2': + resolution: {integrity: sha512-/SVCc57ByARzGSU60c50rMyQlBuMIJCjcsJlkphxY6B0GV4UH3tcA1994N8fFfbJ9kX3jIBe/xg3XP5qBtGDbA==} + engines: {node: '>=20.0'} - '@docusaurus/mdx-loader@3.8.1': - resolution: {integrity: sha512-DZRhagSFRcEq1cUtBMo4TKxSNo/W6/s44yhr8X+eoXqCLycFQUylebOMPseHi5tc4fkGJqwqpWJLz6JStU9L4w==} - engines: {node: '>=18.0'} + '@docusaurus/mdx-loader@3.9.2': + resolution: {integrity: sha512-wiYoGwF9gdd6rev62xDU8AAM8JuLI/hlwOtCzMmYcspEkzecKrP8J8X+KpYnTlACBUUtXNJpSoCwFWJhLRevzQ==} + engines: {node: '>=20.0'} peerDependencies: react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 - '@docusaurus/module-type-aliases@3.8.1': - resolution: {integrity: sha512-6xhvAJiXzsaq3JdosS7wbRt/PwEPWHr9eM4YNYqVlbgG1hSK3uQDXTVvQktasp3VO6BmfYWPozueLWuj4gB+vg==} + '@docusaurus/module-type-aliases@3.9.2': + resolution: {integrity: sha512-8qVe2QA9hVLzvnxP46ysuofJUIc/yYQ82tvA/rBTrnpXtCjNSFLxEZfd5U8cYZuJIVlkPxamsIgwd5tGZXfvew==} peerDependencies: react: '*' react-dom: '*' - '@docusaurus/plugin-content-blog@3.8.1': - resolution: {integrity: sha512-vNTpMmlvNP9n3hGEcgPaXyvTljanAKIUkuG9URQ1DeuDup0OR7Ltvoc8yrmH+iMZJbcQGhUJF+WjHLwuk8HSdw==} - engines: {node: '>=18.0'} + '@docusaurus/plugin-content-blog@3.9.2': + resolution: {integrity: sha512-3I2HXy3L1QcjLJLGAoTvoBnpOwa6DPUa3Q0dMK19UTY9mhPkKQg/DYhAGTiBUKcTR0f08iw7kLPqOhIgdV3eVQ==} + engines: {node: '>=20.0'} peerDependencies: '@docusaurus/plugin-content-docs': '*' react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 - '@docusaurus/plugin-content-docs@3.8.1': - resolution: {integrity: sha512-oByRkSZzeGNQByCMaX+kif5Nl2vmtj2IHQI2fWjCfCootsdKZDPFLonhIp5s3IGJO7PLUfe0POyw0Xh/RrGXJA==} - engines: {node: '>=18.0'} + '@docusaurus/plugin-content-docs@3.9.2': + resolution: {integrity: sha512-C5wZsGuKTY8jEYsqdxhhFOe1ZDjH0uIYJ9T/jebHwkyxqnr4wW0jTkB72OMqNjsoQRcb0JN3PcSeTwFlVgzCZg==} + engines: {node: '>=20.0'} peerDependencies: react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 - '@docusaurus/plugin-content-pages@3.8.1': - resolution: {integrity: sha512-a+V6MS2cIu37E/m7nDJn3dcxpvXb6TvgdNI22vJX8iUTp8eoMoPa0VArEbWvCxMY/xdC26WzNv4wZ6y0iIni/w==} - engines: {node: '>=18.0'} + '@docusaurus/plugin-content-pages@3.9.2': + resolution: {integrity: sha512-s4849w/p4noXUrGpPUF0BPqIAfdAe76BLaRGAGKZ1gTDNiGxGcpsLcwJ9OTi1/V8A+AzvsmI9pkjie2zjIQZKA==} + engines: {node: '>=20.0'} peerDependencies: react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 - '@docusaurus/plugin-css-cascade-layers@3.8.1': - resolution: {integrity: sha512-VQ47xRxfNKjHS5ItzaVXpxeTm7/wJLFMOPo1BkmoMG4Cuz4nuI+Hs62+RMk1OqVog68Swz66xVPK8g9XTrBKRw==} - engines: {node: '>=18.0'} + '@docusaurus/plugin-css-cascade-layers@3.9.2': + resolution: {integrity: sha512-w1s3+Ss+eOQbscGM4cfIFBlVg/QKxyYgj26k5AnakuHkKxH6004ZtuLe5awMBotIYF2bbGDoDhpgQ4r/kcj4rQ==} + engines: {node: '>=20.0'} - '@docusaurus/plugin-debug@3.8.1': - resolution: {integrity: sha512-nT3lN7TV5bi5hKMB7FK8gCffFTBSsBsAfV84/v293qAmnHOyg1nr9okEw8AiwcO3bl9vije5nsUvP0aRl2lpaw==} - engines: {node: '>=18.0'} + '@docusaurus/plugin-debug@3.9.2': + resolution: {integrity: sha512-j7a5hWuAFxyQAkilZwhsQ/b3T7FfHZ+0dub6j/GxKNFJp2h9qk/P1Bp7vrGASnvA9KNQBBL1ZXTe7jlh4VdPdA==} + engines: {node: '>=20.0'} peerDependencies: react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 - '@docusaurus/plugin-google-analytics@3.8.1': - resolution: {integrity: sha512-Hrb/PurOJsmwHAsfMDH6oVpahkEGsx7F8CWMjyP/dw1qjqmdS9rcV1nYCGlM8nOtD3Wk/eaThzUB5TSZsGz+7Q==} - engines: {node: '>=18.0'} + '@docusaurus/plugin-google-analytics@3.9.2': + resolution: {integrity: sha512-mAwwQJ1Us9jL/lVjXtErXto4p4/iaLlweC54yDUK1a97WfkC6Z2k5/769JsFgwOwOP+n5mUQGACXOEQ0XDuVUw==} + engines: {node: '>=20.0'} peerDependencies: react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 - '@docusaurus/plugin-google-gtag@3.8.1': - resolution: {integrity: sha512-tKE8j1cEZCh8KZa4aa80zpSTxsC2/ZYqjx6AAfd8uA8VHZVw79+7OTEP2PoWi0uL5/1Is0LF5Vwxd+1fz5HlKg==} - engines: {node: '>=18.0'} + '@docusaurus/plugin-google-gtag@3.9.2': + resolution: {integrity: sha512-YJ4lDCphabBtw19ooSlc1MnxtYGpjFV9rEdzjLsUnBCeis2djUyCozZaFhCg6NGEwOn7HDDyMh0yzcdRpnuIvA==} + engines: {node: '>=20.0'} peerDependencies: react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 - '@docusaurus/plugin-google-tag-manager@3.8.1': - resolution: {integrity: sha512-iqe3XKITBquZq+6UAXdb1vI0fPY5iIOitVjPQ581R1ZKpHr0qe+V6gVOrrcOHixPDD/BUKdYwkxFjpNiEN+vBw==} - engines: {node: '>=18.0'} + '@docusaurus/plugin-google-tag-manager@3.9.2': + resolution: {integrity: sha512-LJtIrkZN/tuHD8NqDAW1Tnw0ekOwRTfobWPsdO15YxcicBo2ykKF0/D6n0vVBfd3srwr9Z6rzrIWYrMzBGrvNw==} + engines: {node: '>=20.0'} peerDependencies: react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 - '@docusaurus/plugin-sitemap@3.8.1': - resolution: {integrity: sha512-+9YV/7VLbGTq8qNkjiugIelmfUEVkTyLe6X8bWq7K5qPvGXAjno27QAfFq63mYfFFbJc7z+pudL63acprbqGzw==} - engines: {node: '>=18.0'} + '@docusaurus/plugin-sitemap@3.9.2': + resolution: {integrity: sha512-WLh7ymgDXjG8oPoM/T4/zUP7KcSuFYRZAUTl8vR6VzYkfc18GBM4xLhcT+AKOwun6kBivYKUJf+vlqYJkm+RHw==} + engines: {node: '>=20.0'} peerDependencies: react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 - '@docusaurus/plugin-svgr@3.8.1': - resolution: {integrity: sha512-rW0LWMDsdlsgowVwqiMb/7tANDodpy1wWPwCcamvhY7OECReN3feoFwLjd/U4tKjNY3encj0AJSTxJA+Fpe+Gw==} - engines: {node: '>=18.0'} + '@docusaurus/plugin-svgr@3.9.2': + resolution: {integrity: sha512-n+1DE+5b3Lnf27TgVU5jM1d4x5tUh2oW5LTsBxJX4PsAPV0JGcmI6p3yLYtEY0LRVEIJh+8RsdQmRE66wSV8mw==} + engines: {node: '>=20.0'} peerDependencies: react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 - '@docusaurus/preset-classic@3.8.1': - resolution: {integrity: sha512-yJSjYNHXD8POMGc2mKQuj3ApPrN+eG0rO1UPgSx7jySpYU+n4WjBikbrA2ue5ad9A7aouEtMWUoiSRXTH/g7KQ==} - engines: {node: '>=18.0'} + '@docusaurus/preset-classic@3.9.2': + resolution: {integrity: sha512-IgyYO2Gvaigi21LuDIe+nvmN/dfGXAiMcV/murFqcpjnZc7jxFAxW+9LEjdPt61uZLxG4ByW/oUmX/DDK9t/8w==} + engines: {node: '>=20.0'} peerDependencies: react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 @@ -2845,52 +2851,52 @@ packages: peerDependencies: react: '*' - '@docusaurus/theme-classic@3.8.1': - resolution: {integrity: sha512-bqDUCNqXeYypMCsE1VcTXSI1QuO4KXfx8Cvl6rYfY0bhhqN6d2WZlRkyLg/p6pm+DzvanqHOyYlqdPyP0iz+iw==} - engines: {node: '>=18.0'} + '@docusaurus/theme-classic@3.9.2': + resolution: {integrity: sha512-IGUsArG5hhekXd7RDb11v94ycpJpFdJPkLnt10fFQWOVxAtq5/D7hT6lzc2fhyQKaaCE62qVajOMKL7OiAFAIA==} + engines: {node: '>=20.0'} peerDependencies: react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 - '@docusaurus/theme-common@3.8.1': - resolution: {integrity: sha512-UswMOyTnPEVRvN5Qzbo+l8k4xrd5fTFu2VPPfD6FcW/6qUtVLmJTQCktbAL3KJ0BVXGm5aJXz/ZrzqFuZERGPw==} - engines: {node: '>=18.0'} + '@docusaurus/theme-common@3.9.2': + resolution: {integrity: sha512-6c4DAbR6n6nPbnZhY2V3tzpnKnGL+6aOsLvFL26VRqhlczli9eWG0VDUNoCQEPnGwDMhPS42UhSAnz5pThm5Ag==} + engines: {node: '>=20.0'} peerDependencies: '@docusaurus/plugin-content-docs': '*' react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 - '@docusaurus/theme-search-algolia@3.8.1': - resolution: {integrity: sha512-NBFH5rZVQRAQM087aYSRKQ9yGEK9eHd+xOxQjqNpxMiV85OhJDD4ZGz6YJIod26Fbooy54UWVdzNU0TFeUUUzQ==} - engines: {node: '>=18.0'} + '@docusaurus/theme-search-algolia@3.9.2': + resolution: {integrity: sha512-GBDSFNwjnh5/LdkxCKQHkgO2pIMX1447BxYUBG2wBiajS21uj64a+gH/qlbQjDLxmGrbrllBrtJkUHxIsiwRnw==} + engines: {node: '>=20.0'} peerDependencies: react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 - '@docusaurus/theme-translations@3.8.1': - resolution: {integrity: sha512-OTp6eebuMcf2rJt4bqnvuwmm3NVXfzfYejL+u/Y1qwKhZPrjPoKWfk1CbOP5xH5ZOPkiAsx4dHdQBRJszK3z2g==} - engines: {node: '>=18.0'} + '@docusaurus/theme-translations@3.9.2': + resolution: {integrity: sha512-vIryvpP18ON9T9rjgMRFLr2xJVDpw1rtagEGf8Ccce4CkTrvM/fRB8N2nyWYOW5u3DdjkwKw5fBa+3tbn9P4PA==} + engines: {node: '>=20.0'} - '@docusaurus/tsconfig@3.8.1': - resolution: {integrity: sha512-XBWCcqhRHhkhfolnSolNL+N7gj3HVE3CoZVqnVjfsMzCoOsuQw2iCLxVVHtO+rePUUfouVZHURDgmqIySsF66A==} + '@docusaurus/tsconfig@3.9.2': + resolution: {integrity: sha512-j6/Fp4Rlpxsc632cnRnl5HpOWeb6ZKssDj6/XzzAzVGXXfm9Eptx3rxCC+fDzySn9fHTS+CWJjPineCR1bB5WQ==} - '@docusaurus/types@3.8.1': - resolution: {integrity: sha512-ZPdW5AB+pBjiVrcLuw3dOS6BFlrG0XkS2lDGsj8TizcnREQg3J8cjsgfDviszOk4CweNfwo1AEELJkYaMUuOPg==} + '@docusaurus/types@3.9.2': + resolution: {integrity: sha512-Ux1JUNswg+EfUEmajJjyhIohKceitY/yzjRUpu04WXgvVz+fbhVC0p+R0JhvEu4ytw8zIAys2hrdpQPBHRIa8Q==} peerDependencies: react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 - '@docusaurus/utils-common@3.8.1': - resolution: {integrity: sha512-zTZiDlvpvoJIrQEEd71c154DkcriBecm4z94OzEE9kz7ikS3J+iSlABhFXM45mZ0eN5pVqqr7cs60+ZlYLewtg==} - engines: {node: '>=18.0'} + '@docusaurus/utils-common@3.9.2': + resolution: {integrity: sha512-I53UC1QctruA6SWLvbjbhCpAw7+X7PePoe5pYcwTOEXD/PxeP8LnECAhTHHwWCblyUX5bMi4QLRkxvyZ+IT8Aw==} + engines: {node: '>=20.0'} - '@docusaurus/utils-validation@3.8.1': - resolution: {integrity: sha512-gs5bXIccxzEbyVecvxg6upTwaUbfa0KMmTj7HhHzc016AGyxH2o73k1/aOD0IFrdCsfJNt37MqNI47s2MgRZMA==} - engines: {node: '>=18.0'} + '@docusaurus/utils-validation@3.9.2': + resolution: {integrity: sha512-l7yk3X5VnNmATbwijJkexdhulNsQaNDwoagiwujXoxFbWLcxHQqNQ+c/IAlzrfMMOfa/8xSBZ7KEKDesE/2J7A==} + engines: {node: '>=20.0'} - '@docusaurus/utils@3.8.1': - resolution: {integrity: sha512-P1ml0nvOmEFdmu0smSXOqTS1sxU5tqvnc0dA4MTKV39kye+bhQnjkIKEE18fNOvxjyB86k8esoCIFM3x4RykOQ==} - engines: {node: '>=18.0'} + '@docusaurus/utils@3.9.2': + resolution: {integrity: sha512-lBSBiRruFurFKXr5Hbsl2thmGweAPmddhF3jb99U4EMDA5L+e5Y1rAkOS07Nvrup7HUMBDrCV45meaxZnt28nQ==} + engines: {node: '>=20.0'} '@emotion/hash@0.8.0': resolution: {integrity: sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==} @@ -3515,6 +3521,42 @@ packages: '@js-sdsl/ordered-map@4.4.2': resolution: {integrity: sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==} + '@jsonjoy.com/base64@1.1.2': + resolution: {integrity: sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==} + 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/codegen@1.0.0': + resolution: {integrity: sha512-E8Oy+08cmCf0EK/NMxpaJZmOxPqM+6iSe2S4nlSBrPZOORoDJILxtbSUEDKQyTamm/BVAhIGllOBNU79/dwf0g==} + 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-pointer@1.0.2': + resolution: {integrity: sha512-Fsn6wM2zlDzY1U+v4Nc8bo3bVqgfNTGcn6dMgs6FjrEnt4ZCe60o6ByKRjOGlI2gow0aE/Q41QOigdTqkyK5fg==} + 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' + '@leichtgewicht/ip-codec@2.0.5': resolution: {integrity: sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==} @@ -3884,10 +3926,6 @@ packages: resolution: {integrity: sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==} engines: {node: '>= 10.0.0'} - '@pkgjs/parseargs@0.11.0': - resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} - engines: {node: '>=14'} - '@playwright/test@1.56.1': resolution: {integrity: sha512-vSMYtL/zOcFpvJCW71Q/OEGQb7KYBPAdKh35WNSkaZA75JlAO8ED8UN6GUNTm3drWomcbcqRPFqQbLae8yBTdg==} engines: {node: '>=18'} @@ -4715,8 +4753,8 @@ packages: '@types/resolve@1.20.6': resolution: {integrity: sha512-A4STmOXPhMUtHH+S6ymgE2GiBSMqf4oTvcQZMcHzokuTLVYzXTB8ttjcgxOVaAp2lGwEdzZ0J+cRbbeevQj1UQ==} - '@types/retry@0.12.0': - resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} + '@types/retry@0.12.2': + resolution: {integrity: sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==} '@types/sax@1.2.7': resolution: {integrity: sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==} @@ -5774,10 +5812,6 @@ packages: resolution: {integrity: sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==} engines: {node: '>=18'} - copy-text-to-clipboard@3.2.2: - resolution: {integrity: sha512-T6SqyLd1iLuqPA90J5N4cTalrtovCySh58iiZDGJ6FGznbclKh4UI+FGacQSgFzwKG77W7XT5gwbVEbd9cIH1A==} - engines: {node: '>=12'} - copy-to-clipboard@3.3.3: resolution: {integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==} @@ -6046,10 +6080,6 @@ packages: resolution: {integrity: sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==} engines: {node: '>=18'} - default-gateway@6.0.3: - resolution: {integrity: sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==} - engines: {node: '>= 10'} - defaults@1.0.4: resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} @@ -6694,12 +6724,6 @@ packages: resolution: {integrity: sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==} engines: {node: '>=14.14'} - fs-monkey@1.1.0: - resolution: {integrity: sha512-QMUezzXWII9EV5aTFXW1UBVUO77wYPpjqIF8/AviUCThNeSYZykpoTixUeaNNBwmCev0AMDWMAni+f8Hxb1IFw==} - - fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - fsevents@2.3.2: resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -6773,6 +6797,12 @@ packages: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} + glob-to-regex.js@1.2.0: + resolution: {integrity: sha512-QMwlOQKU/IzqMUOAZWubUOT8Qft+Y0KQWnX9nK3ch0CJg0tTp4TvGZsTfudYKv2NzoQSyPcnA6TYeIQ3jGichQ==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + glob-to-regexp@0.4.1: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} @@ -6780,19 +6810,11 @@ packages: resolution: {integrity: sha512-ZyqlgowMbfj2NPjxaZZ/EtsXlOch28FRXgMd64vqZWk1bT9+wvSRLYD1om9M7QfQru51zJPAT17qXm4/zd+9QA==} engines: {node: '>= 0.10'} - glob@10.4.5: - resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} - hasBin: true - - glob@11.0.3: - resolution: {integrity: sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA==} + glob@11.1.0: + resolution: {integrity: sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==} engines: {node: 20 || >=22} hasBin: true - glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Glob versions prior to v9 are no longer supported - global-dirs@3.0.1: resolution: {integrity: sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==} engines: {node: '>=10'} @@ -6995,9 +7017,6 @@ packages: resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==} engines: {node: '>=18'} - html-entities@2.6.0: - resolution: {integrity: sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==} - html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} @@ -7086,6 +7105,10 @@ packages: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} + hyperdyperid@1.2.0: + resolution: {integrity: sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==} + engines: {node: '>=10.18'} + iconv-lite@0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} @@ -7159,10 +7182,6 @@ packages: resolution: {integrity: sha512-6I/HUDeYFfuNCVS3td055BaXBwKYuzw7K3ExVMStBowKo9oOAMJIXIHvdyR3iboTCp1b+1i5DSkIZTcwIktuDw==} engines: {'0': node >= 0.4.0} - inflight@1.0.6: - 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==} @@ -7318,6 +7337,10 @@ packages: resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} engines: {node: '>= 0.4'} + is-network-error@1.3.0: + resolution: {integrity: sha512-6oIwpsgRfnDiyEDLMay/GqCl3HoAtH5+RUKW29gYkL0QA+ipzpDLA16yQs7/RHCSu+BwgbJaOUqa4A99qNVQVw==} + engines: {node: '>=16'} + is-npm@6.1.0: resolution: {integrity: sha512-O2z4/kNgyjhQwVR1Wpkbfc19JIhggF97NZNCpWTnjH7kVcZMUrnut9XSN7txI7VdyIYk5ZatOq3zvSuWpU8hoA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -7485,9 +7508,6 @@ packages: resolution: {integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==} engines: {node: '>=8'} - 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==} engines: {node: 20 || >=22} @@ -7530,12 +7550,12 @@ packages: js-tokens@9.0.1: resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} - js-yaml@3.14.1: - resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + js-yaml@3.14.2: + resolution: {integrity: sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==} hasBin: true - js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + js-yaml@4.1.1: + resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} hasBin: true jsbi@4.3.2: @@ -7990,9 +8010,8 @@ packages: resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} engines: {node: '>= 0.6'} - memfs@3.5.3: - resolution: {integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==} - engines: {node: '>= 4.0.0'} + memfs@4.51.0: + resolution: {integrity: sha512-4zngfkVM/GpIhC8YazOsM6E8hoB33NP0BCESPOA6z7qaL6umPJNqkO8CNYaLV2FB2MV6H1O3x2luHHOSqppv+A==} memory-pager@1.5.0: resolution: {integrity: sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==} @@ -8167,6 +8186,10 @@ packages: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} + mime-types@3.0.1: + resolution: {integrity: sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==} + engines: {node: '>= 0.6'} + mime@1.6.0: resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} engines: {node: '>=4'} @@ -8206,6 +8229,10 @@ packages: resolution: {integrity: sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==} engines: {node: 20 || >=22} + minimatch@10.1.1: + resolution: {integrity: sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==} + engines: {node: 20 || >=22} + minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -8506,9 +8533,6 @@ packages: resolution: {integrity: sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==} engines: {node: '>= 0.8'} - once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - one-time@1.0.0: resolution: {integrity: sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==} @@ -8583,9 +8607,9 @@ packages: resolution: {integrity: sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==} engines: {node: '>=8'} - p-retry@4.6.2: - resolution: {integrity: sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==} - engines: {node: '>=8'} + p-retry@6.2.1: + resolution: {integrity: sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ==} + engines: {node: '>=16.17'} p-timeout@3.2.0: resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==} @@ -8661,10 +8685,6 @@ packages: resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - path-is-inside@1.0.2: resolution: {integrity: sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==} @@ -8683,10 +8703,6 @@ packages: resolution: {integrity: sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==} engines: {node: '>=0.10.0'} - path-scurry@1.11.1: - resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} - engines: {node: '>=16 || 14 >=14.18'} - path-scurry@2.0.0: resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==} engines: {node: 20 || >=22} @@ -9813,6 +9829,11 @@ packages: engines: {node: 20 || >=22} hasBin: true + rimraf@6.1.0: + resolution: {integrity: sha512-DxdlA1bdNzkZK7JiNWH+BAx1x4tEJWoTofIopFo6qWUU94jYrFZ0ubY05TqH3nWPJ1nKa1JWVFDINZ3fnrle/A==} + engines: {node: 20 || >=22} + hasBin: true + rollup@3.29.4: resolution: {integrity: sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==} engines: {node: '>=14.18.0', npm: '>=8.0.0'} @@ -10452,6 +10473,12 @@ 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==} + engines: {node: '>=10.18'} + peerDependencies: + tslib: ^2 + throttle-debounce@5.0.2: resolution: {integrity: sha512-B71/4oyj61iNH0KeCamLuE2rmKuTO5byTOSVwECM5FA7TiAiAW+UqTKZ9ERueC4qvgSttUhdmq1mXC3kJqGX7A==} engines: {node: '>=12.22'} @@ -10555,6 +10582,12 @@ packages: resolution: {integrity: sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==} engines: {node: '>=18'} + tree-dump@1.1.0: + resolution: {integrity: sha512-rMuvhU4MCDbcbnleZTFezWsaZXRFemSqAM+7jPnzUl1fo9w3YEKOxAeui0fz3OI4EU4hf23iyA7uQRVko+UaBA==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + tree-kill@1.2.2: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} hasBin: true @@ -11078,18 +11111,21 @@ packages: engines: {node: '>= 10.13.0'} hasBin: true - webpack-dev-middleware@5.3.4: - resolution: {integrity: sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==} - engines: {node: '>= 12.13.0'} + webpack-dev-middleware@7.4.5: + resolution: {integrity: sha512-uxQ6YqGdE4hgDKNf7hUiPXOdtkXvBJXrfEGYSx7P7LC8hnUYGK70X6xQXUvXeNyBDDcsiQXpG2m3G9vxowaEuA==} + engines: {node: '>= 18.12.0'} peerDependencies: - webpack: ^4.0.0 || ^5.0.0 + webpack: ^5.0.0 + peerDependenciesMeta: + webpack: + optional: true - webpack-dev-server@4.15.2: - resolution: {integrity: sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==} - engines: {node: '>= 12.13.0'} + webpack-dev-server@5.2.2: + resolution: {integrity: sha512-QcQ72gh8a+7JO63TAx/6XZf/CWhgMzu5m0QirvPfGvptOusAxG12w2+aua1Jkjr7hzaWDnJ2n6JFeexMHI+Zjg==} + engines: {node: '>= 18.12.0'} hasBin: true peerDependencies: - webpack: ^4.37.0 || ^5.0.0 + webpack: ^5.0.0 webpack-cli: '*' peerDependenciesMeta: webpack: @@ -11227,9 +11263,6 @@ packages: resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} engines: {node: '>=12'} - wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - write-file-atomic@3.0.3: resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} @@ -13156,7 +13189,7 @@ snapshots: debug: 4.4.3(supports-color@8.1.1) error-stack-parser: 2.1.4 figures: 3.2.0 - glob: 10.4.5 + glob: 11.1.0 has-ansi: 4.0.1 indent-string: 4.0.0 is-installed-globally: 0.4.0 @@ -13290,7 +13323,7 @@ snapshots: transitivePeerDependencies: - '@algolia/client-search' - '@docusaurus/babel@3.8.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@docusaurus/babel@3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: '@babel/core': 7.28.5 '@babel/generator': 7.28.5 @@ -13302,8 +13335,8 @@ snapshots: '@babel/runtime': 7.28.4 '@babel/runtime-corejs3': 7.28.4 '@babel/traverse': 7.28.5 - '@docusaurus/logger': 3.8.1 - '@docusaurus/utils': 3.8.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/logger': 3.9.2 + '@docusaurus/utils': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) babel-plugin-dynamic-import-node: 2.3.3 fs-extra: 11.3.2 tslib: 2.8.1 @@ -13316,14 +13349,14 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/bundler@3.8.1(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3)': + '@docusaurus/bundler@3.9.2(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3)': dependencies: '@babel/core': 7.28.5 - '@docusaurus/babel': 3.8.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/cssnano-preset': 3.8.1 - '@docusaurus/logger': 3.8.1 - '@docusaurus/types': 3.8.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/utils': 3.8.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/babel': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/cssnano-preset': 3.9.2 + '@docusaurus/logger': 3.9.2 + '@docusaurus/types': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/utils': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) babel-loader: 9.2.1(@babel/core@7.28.5)(webpack@5.102.1) clean-css: 5.3.3 copy-webpack-plugin: 11.0.0(webpack@5.102.1) @@ -13357,15 +13390,15 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/core@3.8.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3)': + '@docusaurus/core@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3)': dependencies: - '@docusaurus/babel': 3.8.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/bundler': 3.8.1(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3) - '@docusaurus/logger': 3.8.1 - '@docusaurus/mdx-loader': 3.8.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/utils': 3.8.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/utils-common': 3.8.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/utils-validation': 3.8.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/babel': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/bundler': 3.9.2(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3) + '@docusaurus/logger': 3.9.2 + '@docusaurus/mdx-loader': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/utils': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/utils-common': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/utils-validation': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@mdx-js/react': 3.1.1(@types/react@19.2.2)(react@19.2.0) boxen: 6.2.1 chalk: 4.1.2 @@ -13402,7 +13435,7 @@ snapshots: update-notifier: 6.0.2 webpack: 5.102.1 webpack-bundle-analyzer: 4.10.2 - webpack-dev-server: 4.15.2(webpack@5.102.1) + webpack-dev-server: 5.2.2(webpack@5.102.1) webpack-merge: 6.0.1 transitivePeerDependencies: - '@docusaurus/faster' @@ -13421,23 +13454,23 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/cssnano-preset@3.8.1': + '@docusaurus/cssnano-preset@3.9.2': dependencies: cssnano-preset-advanced: 6.1.2(postcss@8.5.6) postcss: 8.5.6 postcss-sort-media-queries: 5.2.0(postcss@8.5.6) tslib: 2.8.1 - '@docusaurus/logger@3.8.1': + '@docusaurus/logger@3.9.2': dependencies: chalk: 4.1.2 tslib: 2.8.1 - '@docusaurus/mdx-loader@3.8.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@docusaurus/mdx-loader@3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: - '@docusaurus/logger': 3.8.1 - '@docusaurus/utils': 3.8.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/utils-validation': 3.8.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/logger': 3.9.2 + '@docusaurus/utils': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/utils-validation': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@mdx-js/mdx': 3.1.1 '@slorber/remark-comment': 1.0.0 escape-html: 1.0.3 @@ -13468,9 +13501,9 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/module-type-aliases@3.8.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@docusaurus/module-type-aliases@3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: - '@docusaurus/types': 3.8.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/types': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@types/history': 4.7.11 '@types/react': 19.2.2 '@types/react-router-config': 5.0.11 @@ -13486,17 +13519,17 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/plugin-content-blog@3.8.1(@docusaurus/plugin-content-docs@3.8.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3))(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3)': - dependencies: - '@docusaurus/core': 3.8.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3) - '@docusaurus/logger': 3.8.1 - '@docusaurus/mdx-loader': 3.8.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/plugin-content-docs': 3.8.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3) - '@docusaurus/theme-common': 3.8.1(@docusaurus/plugin-content-docs@3.8.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3))(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/types': 3.8.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/utils': 3.8.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/utils-common': 3.8.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/utils-validation': 3.8.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/plugin-content-blog@3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3))(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3)': + dependencies: + '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3) + '@docusaurus/logger': 3.9.2 + '@docusaurus/mdx-loader': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/plugin-content-docs': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3) + '@docusaurus/theme-common': 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3))(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/types': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/utils': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/utils-common': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/utils-validation': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) cheerio: 1.0.0-rc.12 feed: 4.2.2 fs-extra: 11.3.2 @@ -13527,21 +13560,21 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/plugin-content-docs@3.8.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3)': - dependencies: - '@docusaurus/core': 3.8.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3) - '@docusaurus/logger': 3.8.1 - '@docusaurus/mdx-loader': 3.8.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/module-type-aliases': 3.8.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/theme-common': 3.8.1(@docusaurus/plugin-content-docs@3.8.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3))(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/types': 3.8.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/utils': 3.8.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/utils-common': 3.8.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/utils-validation': 3.8.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3)': + dependencies: + '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3) + '@docusaurus/logger': 3.9.2 + '@docusaurus/mdx-loader': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/module-type-aliases': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/theme-common': 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3))(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/types': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/utils': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/utils-common': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/utils-validation': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@types/react-router-config': 5.0.11 combine-promises: 1.2.0 fs-extra: 11.3.2 - js-yaml: 4.1.0 + js-yaml: 4.1.1 lodash: 4.17.21 react: 19.2.0 react-dom: 19.2.0(react@19.2.0) @@ -13567,13 +13600,13 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/plugin-content-pages@3.8.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3)': + '@docusaurus/plugin-content-pages@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3)': dependencies: - '@docusaurus/core': 3.8.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3) - '@docusaurus/mdx-loader': 3.8.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/types': 3.8.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/utils': 3.8.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/utils-validation': 3.8.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3) + '@docusaurus/mdx-loader': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/types': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/utils': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/utils-validation': 3.9.2(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) @@ -13597,12 +13630,12 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/plugin-css-cascade-layers@3.8.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3)': + '@docusaurus/plugin-css-cascade-layers@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3)': dependencies: - '@docusaurus/core': 3.8.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3) - '@docusaurus/types': 3.8.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/utils': 3.8.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/utils-validation': 3.8.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3) + '@docusaurus/types': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/utils': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/utils-validation': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) tslib: 2.8.1 transitivePeerDependencies: - '@docusaurus/faster' @@ -13624,11 +13657,11 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/plugin-debug@3.8.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3)': + '@docusaurus/plugin-debug@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3)': dependencies: - '@docusaurus/core': 3.8.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3) - '@docusaurus/types': 3.8.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/utils': 3.8.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3) + '@docusaurus/types': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/utils': 3.9.2(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) @@ -13652,11 +13685,11 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/plugin-google-analytics@3.8.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3)': + '@docusaurus/plugin-google-analytics@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3)': dependencies: - '@docusaurus/core': 3.8.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3) - '@docusaurus/types': 3.8.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/utils-validation': 3.8.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3) + '@docusaurus/types': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/utils-validation': 3.9.2(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) tslib: 2.8.1 @@ -13678,11 +13711,11 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/plugin-google-gtag@3.8.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3)': + '@docusaurus/plugin-google-gtag@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3)': dependencies: - '@docusaurus/core': 3.8.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3) - '@docusaurus/types': 3.8.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/utils-validation': 3.8.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3) + '@docusaurus/types': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/utils-validation': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@types/gtag.js': 0.0.12 react: 19.2.0 react-dom: 19.2.0(react@19.2.0) @@ -13705,11 +13738,11 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/plugin-google-tag-manager@3.8.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3)': + '@docusaurus/plugin-google-tag-manager@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3)': dependencies: - '@docusaurus/core': 3.8.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3) - '@docusaurus/types': 3.8.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/utils-validation': 3.8.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3) + '@docusaurus/types': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/utils-validation': 3.9.2(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) tslib: 2.8.1 @@ -13731,14 +13764,14 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/plugin-sitemap@3.8.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3)': + '@docusaurus/plugin-sitemap@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3)': dependencies: - '@docusaurus/core': 3.8.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3) - '@docusaurus/logger': 3.8.1 - '@docusaurus/types': 3.8.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/utils': 3.8.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/utils-common': 3.8.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/utils-validation': 3.8.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3) + '@docusaurus/logger': 3.9.2 + '@docusaurus/types': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/utils': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/utils-common': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/utils-validation': 3.9.2(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) @@ -13762,12 +13795,12 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/plugin-svgr@3.8.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3)': + '@docusaurus/plugin-svgr@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3)': dependencies: - '@docusaurus/core': 3.8.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3) - '@docusaurus/types': 3.8.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/utils': 3.8.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/utils-validation': 3.8.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3) + '@docusaurus/types': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/utils': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/utils-validation': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@svgr/core': 8.1.0(typescript@5.6.3) '@svgr/webpack': 8.1.0(typescript@5.6.3) react: 19.2.0 @@ -13792,23 +13825,23 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/preset-classic@3.8.1(@algolia/client-search@5.41.0)(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(search-insights@2.17.3)(typescript@5.6.3)': - dependencies: - '@docusaurus/core': 3.8.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3) - '@docusaurus/plugin-content-blog': 3.8.1(@docusaurus/plugin-content-docs@3.8.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3))(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3) - '@docusaurus/plugin-content-docs': 3.8.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3) - '@docusaurus/plugin-content-pages': 3.8.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3) - '@docusaurus/plugin-css-cascade-layers': 3.8.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3) - '@docusaurus/plugin-debug': 3.8.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3) - '@docusaurus/plugin-google-analytics': 3.8.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3) - '@docusaurus/plugin-google-gtag': 3.8.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3) - '@docusaurus/plugin-google-tag-manager': 3.8.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3) - '@docusaurus/plugin-sitemap': 3.8.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3) - '@docusaurus/plugin-svgr': 3.8.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3) - '@docusaurus/theme-classic': 3.8.1(@types/react@19.2.2)(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3) - '@docusaurus/theme-common': 3.8.1(@docusaurus/plugin-content-docs@3.8.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3))(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/theme-search-algolia': 3.8.1(@algolia/client-search@5.41.0)(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(search-insights@2.17.3)(typescript@5.6.3) - '@docusaurus/types': 3.8.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/preset-classic@3.9.2(@algolia/client-search@5.41.0)(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(search-insights@2.17.3)(typescript@5.6.3)': + dependencies: + '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3) + '@docusaurus/plugin-content-blog': 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3))(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3) + '@docusaurus/plugin-content-docs': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3) + '@docusaurus/plugin-content-pages': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3) + '@docusaurus/plugin-css-cascade-layers': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3) + '@docusaurus/plugin-debug': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3) + '@docusaurus/plugin-google-analytics': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3) + '@docusaurus/plugin-google-gtag': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3) + '@docusaurus/plugin-google-tag-manager': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3) + '@docusaurus/plugin-sitemap': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3) + '@docusaurus/plugin-svgr': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3) + '@docusaurus/theme-classic': 3.9.2(@types/react@19.2.2)(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3) + '@docusaurus/theme-common': 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3))(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/theme-search-algolia': 3.9.2(@algolia/client-search@5.41.0)(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(search-insights@2.17.3)(typescript@5.6.3) + '@docusaurus/types': 3.9.2(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) transitivePeerDependencies: @@ -13837,24 +13870,23 @@ snapshots: '@types/react': 19.2.2 react: 19.2.0 - '@docusaurus/theme-classic@3.8.1(@types/react@19.2.2)(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3)': - dependencies: - '@docusaurus/core': 3.8.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3) - '@docusaurus/logger': 3.8.1 - '@docusaurus/mdx-loader': 3.8.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/module-type-aliases': 3.8.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/plugin-content-blog': 3.8.1(@docusaurus/plugin-content-docs@3.8.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3))(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3) - '@docusaurus/plugin-content-docs': 3.8.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3) - '@docusaurus/plugin-content-pages': 3.8.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3) - '@docusaurus/theme-common': 3.8.1(@docusaurus/plugin-content-docs@3.8.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3))(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/theme-translations': 3.8.1 - '@docusaurus/types': 3.8.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/utils': 3.8.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/utils-common': 3.8.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/utils-validation': 3.8.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/theme-classic@3.9.2(@types/react@19.2.2)(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3)': + dependencies: + '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3) + '@docusaurus/logger': 3.9.2 + '@docusaurus/mdx-loader': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/module-type-aliases': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/plugin-content-blog': 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3))(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3) + '@docusaurus/plugin-content-docs': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3) + '@docusaurus/plugin-content-pages': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3) + '@docusaurus/theme-common': 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3))(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/theme-translations': 3.9.2 + '@docusaurus/types': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/utils': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/utils-common': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/utils-validation': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@mdx-js/react': 3.1.1(@types/react@19.2.2)(react@19.2.0) clsx: 2.1.1 - copy-text-to-clipboard: 3.2.2 infima: 0.2.0-alpha.45 lodash: 4.17.21 nprogress: 0.2.0 @@ -13885,13 +13917,13 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/theme-common@3.8.1(@docusaurus/plugin-content-docs@3.8.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@docusaurus/theme-common@3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: - '@docusaurus/mdx-loader': 3.8.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/module-type-aliases': 3.8.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/plugin-content-docs': 3.8.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3) - '@docusaurus/utils': 3.8.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/utils-common': 3.8.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/mdx-loader': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/module-type-aliases': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/plugin-content-docs': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3) + '@docusaurus/utils': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/utils-common': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@types/history': 4.7.11 '@types/react': 19.2.2 '@types/react-router-config': 5.0.11 @@ -13909,16 +13941,16 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/theme-search-algolia@3.8.1(@algolia/client-search@5.41.0)(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(search-insights@2.17.3)(typescript@5.6.3)': + '@docusaurus/theme-search-algolia@3.9.2(@algolia/client-search@5.41.0)(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(search-insights@2.17.3)(typescript@5.6.3)': dependencies: '@docsearch/react': 3.9.0(@algolia/client-search@5.41.0)(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(search-insights@2.17.3) - '@docusaurus/core': 3.8.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3) - '@docusaurus/logger': 3.8.1 - '@docusaurus/plugin-content-docs': 3.8.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3) - '@docusaurus/theme-common': 3.8.1(@docusaurus/plugin-content-docs@3.8.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3))(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/theme-translations': 3.8.1 - '@docusaurus/utils': 3.8.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/utils-validation': 3.8.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3) + '@docusaurus/logger': 3.9.2 + '@docusaurus/plugin-content-docs': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3) + '@docusaurus/theme-common': 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.6.3))(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/theme-translations': 3.9.2 + '@docusaurus/utils': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/utils-validation': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) algoliasearch: 5.41.0 algoliasearch-helper: 3.26.0(algoliasearch@5.41.0) clsx: 2.1.1 @@ -13950,17 +13982,18 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/theme-translations@3.8.1': + '@docusaurus/theme-translations@3.9.2': dependencies: fs-extra: 11.3.2 tslib: 2.8.1 - '@docusaurus/tsconfig@3.8.1': {} + '@docusaurus/tsconfig@3.9.2': {} - '@docusaurus/types@3.8.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@docusaurus/types@3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: '@mdx-js/mdx': 3.1.1 '@types/history': 4.7.11 + '@types/mdast': 4.0.4 '@types/react': 19.2.2 commander: 5.1.0 joi: 17.13.3 @@ -13977,9 +14010,9 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/utils-common@3.8.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@docusaurus/utils-common@3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: - '@docusaurus/types': 3.8.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/types': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) tslib: 2.8.1 transitivePeerDependencies: - '@swc/core' @@ -13990,14 +14023,14 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/utils-validation@3.8.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@docusaurus/utils-validation@3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: - '@docusaurus/logger': 3.8.1 - '@docusaurus/utils': 3.8.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/utils-common': 3.8.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/logger': 3.9.2 + '@docusaurus/utils': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/utils-common': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) fs-extra: 11.3.2 joi: 17.13.3 - js-yaml: 4.1.0 + js-yaml: 4.1.1 lodash: 4.17.21 tslib: 2.8.1 transitivePeerDependencies: @@ -14009,11 +14042,11 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/utils@3.8.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@docusaurus/utils@3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: - '@docusaurus/logger': 3.8.1 - '@docusaurus/types': 3.8.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@docusaurus/utils-common': 3.8.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/logger': 3.9.2 + '@docusaurus/types': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@docusaurus/utils-common': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) escape-string-regexp: 4.0.0 execa: 5.1.1 file-loader: 6.2.0(webpack@5.102.1) @@ -14022,7 +14055,7 @@ snapshots: globby: 11.1.0 gray-matter: 4.0.3 jiti: 1.21.7 - js-yaml: 4.1.0 + js-yaml: 4.1.1 lodash: 4.17.21 micromatch: 4.0.8 p-queue: 6.6.2 @@ -14171,7 +14204,7 @@ snapshots: globals: 14.0.0 ignore: 5.3.2 import-fresh: 3.3.1 - js-yaml: 4.1.0 + js-yaml: 4.1.1 minimatch: 3.1.2 strip-json-comments: 3.1.1 transitivePeerDependencies: @@ -14390,7 +14423,7 @@ snapshots: '@graphql-tools/utils': 8.9.0(graphql@16.11.0) dataloader: 2.1.0 graphql: 16.11.0 - tslib: 2.4.1 + tslib: 2.8.1 value-or-promise: 1.0.11 '@graphql-tools/batch-execute@9.0.19(graphql@16.11.0)': @@ -14611,7 +14644,7 @@ snapshots: '@graphql-tools/optimize@2.0.0(graphql@16.11.0)': dependencies: graphql: 16.11.0 - tslib: 2.6.3 + tslib: 2.8.1 '@graphql-tools/prisma-loader@8.0.17(@types/node@24.9.1)(graphql@16.11.0)': dependencies: @@ -14627,7 +14660,7 @@ snapshots: http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 jose: 5.10.0 - js-yaml: 4.1.0 + js-yaml: 4.1.1 lodash: 4.17.21 scuid: 1.1.0 tslib: 2.8.1 @@ -14647,7 +14680,7 @@ snapshots: '@ardatan/relay-compiler': 12.0.3(graphql@16.11.0) '@graphql-tools/utils': 10.9.1(graphql@16.11.0) graphql: 16.11.0 - tslib: 2.6.3 + tslib: 2.8.1 transitivePeerDependencies: - encoding @@ -14798,7 +14831,7 @@ snapshots: '@joshwooding/vite-plugin-react-docgen-typescript@0.6.1(typescript@5.8.3)(vite@7.1.12(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': dependencies: - glob: 10.4.5 + glob: 11.1.0 magic-string: 0.30.19 react-docgen-typescript: 2.4.0(typescript@5.8.3) vite: 7.1.12(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) @@ -14838,6 +14871,42 @@ snapshots: '@js-sdsl/ordered-map@4.4.2': {} + '@jsonjoy.com/base64@1.1.2(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/codegen@1.0.0(tslib@2.8.1)': + dependencies: + 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) + '@jsonjoy.com/buffers': 1.2.1(tslib@2.8.1) + '@jsonjoy.com/codegen': 1.0.0(tslib@2.8.1) + '@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) + tree-dump: 1.1.0(tslib@2.8.1) + tslib: 2.8.1 + + '@jsonjoy.com/json-pointer@1.0.2(tslib@2.8.1)': + dependencies: + '@jsonjoy.com/codegen': 1.0.0(tslib@2.8.1) + '@jsonjoy.com/util': 1.9.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 + '@leichtgewicht/ip-codec@2.0.5': {} '@lucaspaganini/value-objects@1.3.1': {} @@ -15292,9 +15361,6 @@ snapshots: '@parcel/watcher-win32-ia32': 2.5.1 '@parcel/watcher-win32-x64': 2.5.1 - '@pkgjs/parseargs@0.11.0': - optional: true - '@playwright/test@1.56.1': dependencies: playwright: 1.56.1 @@ -16214,7 +16280,7 @@ snapshots: '@types/resolve@1.20.6': {} - '@types/retry@0.12.0': {} + '@types/retry@0.12.2': {} '@types/sax@1.2.7': dependencies: @@ -17182,7 +17248,7 @@ snapshots: camel-case@4.1.2: dependencies: pascal-case: 3.1.2 - tslib: 2.6.3 + tslib: 2.8.1 camelcase@5.0.0: {} @@ -17254,7 +17320,7 @@ snapshots: path-case: 3.0.4 sentence-case: 3.0.4 snake-case: 3.0.4 - tslib: 2.6.3 + tslib: 2.8.1 char-regex@1.0.2: {} @@ -17483,7 +17549,7 @@ snapshots: constant-case@3.0.4: dependencies: no-case: 3.0.4 - tslib: 2.6.3 + tslib: 2.8.1 upper-case: 2.0.2 content-disposition@0.5.2: {} @@ -17509,8 +17575,6 @@ snapshots: cookie@1.0.2: {} - copy-text-to-clipboard@3.2.2: {} - copy-to-clipboard@3.3.3: dependencies: toggle-selection: 1.0.6 @@ -17543,7 +17607,7 @@ snapshots: cosmiconfig@8.3.6(typescript@5.6.3): dependencies: import-fresh: 3.3.1 - js-yaml: 4.1.0 + js-yaml: 4.1.1 parse-json: 5.2.0 path-type: 4.0.0 optionalDependencies: @@ -17552,7 +17616,7 @@ snapshots: cosmiconfig@8.3.6(typescript@5.8.3): dependencies: import-fresh: 3.3.1 - js-yaml: 4.1.0 + js-yaml: 4.1.1 parse-json: 5.2.0 path-type: 4.0.0 optionalDependencies: @@ -17565,7 +17629,7 @@ snapshots: debug: 4.4.3(supports-color@8.1.1) duplexer: 0.1.2 fs-extra: 10.1.0 - glob: 7.2.3 + glob: 11.1.0 glob2base: 0.0.12 minimatch: 3.1.2 resolve: 1.22.11 @@ -17813,10 +17877,6 @@ snapshots: bundle-name: 4.1.0 default-browser-id: 5.0.0 - default-gateway@6.0.3: - dependencies: - execa: 5.1.1 - defaults@1.0.4: dependencies: clone: 1.0.4 @@ -17941,7 +18001,7 @@ snapshots: dot-case@3.0.4: dependencies: no-case: 3.0.4 - tslib: 2.6.3 + tslib: 2.8.1 dot-prop@6.0.1: dependencies: @@ -18597,10 +18657,6 @@ snapshots: jsonfile: 6.2.0 universalify: 2.0.1 - fs-monkey@1.1.0: {} - - fs.realpath@1.0.0: {} - fsevents@2.3.2: optional: true @@ -18674,39 +18730,25 @@ snapshots: dependencies: is-glob: 4.0.3 + glob-to-regex.js@1.2.0(tslib@2.8.1): + dependencies: + tslib: 2.8.1 + glob-to-regexp@0.4.1: {} glob2base@0.0.12: dependencies: find-index: 0.1.1 - glob@10.4.5: - dependencies: - foreground-child: 3.3.1 - jackspeak: 3.4.3 - minimatch: 9.0.5 - minipass: 7.1.2 - package-json-from-dist: 1.0.1 - path-scurry: 1.11.1 - - glob@11.0.3: + glob@11.1.0: dependencies: foreground-child: 3.3.1 jackspeak: 4.1.1 - minimatch: 10.0.3 + minimatch: 10.1.1 minipass: 7.1.2 package-json-from-dist: 1.0.1 path-scurry: 2.0.0 - glob@7.2.3: - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - global-dirs@3.0.1: dependencies: ini: 2.0.0 @@ -18826,7 +18868,7 @@ snapshots: gray-matter@4.0.3: dependencies: - js-yaml: 3.14.1 + js-yaml: 3.14.2 kind-of: 6.0.3 section-matter: 1.0.0 strip-bom-string: 1.0.0 @@ -18966,7 +19008,7 @@ snapshots: header-case@2.0.4: dependencies: capital-case: 1.0.4 - tslib: 2.6.3 + tslib: 2.8.1 history@4.10.1: dependencies: @@ -18998,8 +19040,6 @@ snapshots: dependencies: whatwg-encoding: 3.1.1 - html-entities@2.6.0: {} - html-escaper@2.0.2: {} html-minifier-terser@6.1.0: @@ -19119,6 +19159,8 @@ snapshots: human-signals@2.1.0: {} + hyperdyperid@1.2.0: {} + iconv-lite@0.4.24: dependencies: safer-buffer: 2.1.2 @@ -19171,11 +19213,6 @@ snapshots: inflection@1.13.4: {} - inflight@1.0.6: - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - inherits@2.0.3: {} inherits@2.0.4: {} @@ -19325,7 +19362,7 @@ snapshots: is-lower-case@2.0.2: dependencies: - tslib: 2.6.3 + tslib: 2.8.1 is-map@2.0.3: {} @@ -19333,6 +19370,8 @@ snapshots: is-negative-zero@2.0.3: {} + is-network-error@1.3.0: {} + is-npm@6.1.0: {} is-number-object@1.1.1: @@ -19406,7 +19445,7 @@ snapshots: is-upper-case@2.0.2: dependencies: - tslib: 2.6.3 + tslib: 2.8.1 is-weakmap@2.0.2: {} @@ -19474,12 +19513,6 @@ snapshots: html-escaper: 2.0.2 istanbul-lib-report: 3.0.1 - jackspeak@3.4.3: - dependencies: - '@isaacs/cliui': 8.0.2 - optionalDependencies: - '@pkgjs/parseargs': 0.11.0 - jackspeak@4.1.1: dependencies: '@isaacs/cliui': 8.0.2 @@ -19528,12 +19561,12 @@ snapshots: js-tokens@9.0.1: {} - js-yaml@3.14.1: + js-yaml@3.14.2: dependencies: argparse: 1.0.10 esprima: 4.0.1 - js-yaml@4.1.0: + js-yaml@4.1.1: dependencies: argparse: 2.0.1 @@ -19823,11 +19856,11 @@ snapshots: lower-case-first@2.0.2: dependencies: - tslib: 2.6.3 + tslib: 2.8.1 lower-case@2.0.2: dependencies: - tslib: 2.6.3 + tslib: 2.8.1 lowercase-keys@3.0.0: {} @@ -20081,9 +20114,14 @@ snapshots: media-typer@0.3.0: {} - memfs@3.5.3: + memfs@4.51.0: dependencies: - fs-monkey: 1.1.0 + '@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) + tree-dump: 1.1.0(tslib@2.8.1) + tslib: 2.8.1 memory-pager@1.5.0: {} @@ -20413,6 +20451,10 @@ snapshots: dependencies: mime-db: 1.52.0 + mime-types@3.0.1: + dependencies: + mime-db: 1.54.0 + mime@1.6.0: {} mime@3.0.0: {} @@ -20437,6 +20479,10 @@ snapshots: dependencies: '@isaacs/brace-expansion': 5.0.0 + minimatch@10.1.1: + dependencies: + '@isaacs/brace-expansion': 5.0.0 + minimatch@3.1.2: dependencies: brace-expansion: 1.1.12 @@ -20658,7 +20704,7 @@ snapshots: normalize-package-data@6.0.2: dependencies: hosted-git-info: 7.0.2 - semver: 7.7.1 + semver: 7.7.3 validate-npm-package-license: 3.0.4 normalize-path@2.1.1: @@ -20722,10 +20768,6 @@ snapshots: on-headers@1.1.0: {} - once@1.4.0: - dependencies: - wrappy: 1.0.2 - one-time@1.0.0: dependencies: fn.name: 1.1.0 @@ -20820,9 +20862,10 @@ snapshots: eventemitter3: 4.0.7 p-timeout: 3.2.0 - p-retry@4.6.2: + p-retry@6.2.1: dependencies: - '@types/retry': 0.12.0 + '@types/retry': 0.12.2 + is-network-error: 1.3.0 retry: 0.13.1 p-timeout@3.2.0: @@ -20847,7 +20890,7 @@ snapshots: param-case@3.0.4: dependencies: dot-case: 3.0.4 - tslib: 2.6.3 + tslib: 2.8.1 parent-module@1.0.1: dependencies: @@ -20900,21 +20943,19 @@ snapshots: pascal-case@3.1.2: dependencies: no-case: 3.0.4 - tslib: 2.6.3 + tslib: 2.8.1 path-browserify@1.0.1: {} path-case@3.0.4: dependencies: dot-case: 3.0.4 - tslib: 2.6.3 + tslib: 2.8.1 path-exists@4.0.0: {} path-exists@5.0.0: {} - path-is-absolute@1.0.1: {} - path-is-inside@1.0.2: {} path-key@3.1.1: {} @@ -20927,11 +20968,6 @@ snapshots: dependencies: path-root-regex: 0.1.2 - path-scurry@1.11.1: - dependencies: - lru-cache: 10.4.3 - minipass: 7.1.2 - path-scurry@2.0.0: dependencies: lru-cache: 11.2.2 @@ -22267,15 +22303,20 @@ snapshots: rimraf@2.7.1: dependencies: - glob: 7.2.3 + glob: 11.1.0 rimraf@3.0.2: dependencies: - glob: 7.2.3 + glob: 11.1.0 rimraf@6.0.1: dependencies: - glob: 11.0.3 + glob: 11.1.0 + package-json-from-dist: 1.0.1 + + rimraf@6.1.0: + dependencies: + glob: 11.1.0 package-json-from-dist: 1.0.1 rollup@3.29.4: @@ -22440,7 +22481,7 @@ snapshots: sentence-case@3.0.4: dependencies: no-case: 3.0.4 - tslib: 2.6.3 + tslib: 2.8.1 upper-case-first: 2.0.2 seq-queue@0.0.5: {} @@ -22650,7 +22691,7 @@ snapshots: snake-case@3.0.4: dependencies: dot-case: 3.0.4 - tslib: 2.6.3 + tslib: 2.8.1 sockjs@0.3.24: dependencies: @@ -22718,7 +22759,7 @@ snapshots: sponge-case@1.0.1: dependencies: - tslib: 2.6.3 + tslib: 2.8.1 sprintf-js@1.0.3: {} @@ -22932,7 +22973,7 @@ snapshots: swap-case@2.0.2: dependencies: - tslib: 2.6.3 + tslib: 2.8.1 symbol-tree@3.2.4: {} @@ -22990,7 +23031,7 @@ snapshots: test-exclude@7.0.1: dependencies: '@istanbuljs/schema': 0.1.3 - glob: 10.4.5 + glob: 11.1.0 minimatch: 9.0.5 text-decoder@1.2.3: @@ -23009,6 +23050,10 @@ snapshots: dependencies: any-promise: 1.3.0 + thingies@2.5.0(tslib@2.8.1): + dependencies: + tslib: 2.8.1 + throttle-debounce@5.0.2: {} through@2.3.8: {} @@ -23042,7 +23087,7 @@ snapshots: title-case@3.0.3: dependencies: - tslib: 2.6.3 + tslib: 2.8.1 tldts-core@6.1.86: {} @@ -23087,6 +23132,10 @@ snapshots: dependencies: punycode: 2.3.1 + tree-dump@1.1.0(tslib@2.8.1): + dependencies: + tslib: 2.8.1 + tree-kill@1.2.2: {} trim-lines@3.0.1: {} @@ -23473,11 +23522,11 @@ snapshots: upper-case-first@2.0.2: dependencies: - tslib: 2.6.3 + tslib: 2.8.1 upper-case@2.0.2: dependencies: - tslib: 2.6.3 + tslib: 2.8.1 uri-js@4.4.1: dependencies: @@ -23680,20 +23729,23 @@ snapshots: - bufferutil - utf-8-validate - webpack-dev-middleware@5.3.4(webpack@5.102.1): + webpack-dev-middleware@7.4.5(webpack@5.102.1): dependencies: colorette: 2.0.20 - memfs: 3.5.3 - mime-types: 2.1.35 + memfs: 4.51.0 + mime-types: 3.0.1 + on-finished: 2.4.1 range-parser: 1.2.1 schema-utils: 4.3.3 + optionalDependencies: webpack: 5.102.1 - webpack-dev-server@4.15.2(webpack@5.102.1): + webpack-dev-server@5.2.2(webpack@5.102.1): dependencies: '@types/bonjour': 3.5.13 '@types/connect-history-api-fallback': 1.5.4 '@types/express': 4.17.23 + '@types/express-serve-static-core': 4.19.7 '@types/serve-index': 1.9.4 '@types/serve-static': 1.15.9 '@types/sockjs': 0.3.36 @@ -23704,22 +23756,19 @@ snapshots: colorette: 2.0.20 compression: 1.8.1 connect-history-api-fallback: 2.0.0 - default-gateway: 6.0.3 express: 4.21.2 graceful-fs: 4.2.11 - html-entities: 2.6.0 http-proxy-middleware: 2.0.9(@types/express@4.17.23) ipaddr.js: 2.2.0 launch-editor: 2.11.1 - open: 8.4.2 - p-retry: 4.6.2 - rimraf: 3.0.2 + open: 10.2.0 + p-retry: 6.2.1 schema-utils: 4.3.3 selfsigned: 2.4.1 serve-index: 1.9.1 sockjs: 0.3.24 spdy: 4.0.2 - webpack-dev-middleware: 5.3.4(webpack@5.102.1) + webpack-dev-middleware: 7.4.5(webpack@5.102.1) ws: 8.18.3 optionalDependencies: webpack: 5.102.1 @@ -23923,8 +23972,6 @@ snapshots: string-width: 5.1.2 strip-ansi: 7.1.2 - wrappy@1.0.2: {} - write-file-atomic@3.0.3: dependencies: imurmurhash: 0.1.4 From 4963a6a82bdfd09a95a2953c933421bdb496f2a3 Mon Sep 17 00:00:00 2001 From: Arif Ahmed Date: Fri, 21 Nov 2025 09:14:20 -0500 Subject: [PATCH 5/8] fix: remove unused mapDomainStateToUIStatus helper function - Removed unused mapDomainStateToUIStatus function causing TS6133 error - Function was not being used anywhere in the component - Fixes Azure Pipeline build failure --- .../all-listings-table.container.tsx | 23 ------------------- 1 file changed, 23 deletions(-) diff --git a/apps/ui-sharethrift/src/components/layouts/home/my-listings/components/all-listings-table.container.tsx b/apps/ui-sharethrift/src/components/layouts/home/my-listings/components/all-listings-table.container.tsx index b31f890be..371afabf0 100644 --- a/apps/ui-sharethrift/src/components/layouts/home/my-listings/components/all-listings-table.container.tsx +++ b/apps/ui-sharethrift/src/components/layouts/home/my-listings/components/all-listings-table.container.tsx @@ -15,29 +15,6 @@ export interface AllListingsTableContainerProps { onPageChange: (page: number) => void; } -/** - * Maps domain listing state to UI status - * Domain states: Published, Paused, Cancelled, Drafted, Expired, Blocked, Appeal Requested - * UI statuses: Active, Paused, Cancelled, Draft, Expired, Blocked, Cancelled - */ -const mapDomainStateToUIStatus = ( - state: string | null | undefined, -): string => { - if (!state) return 'Unknown'; - - const stateMap: Record = { - Published: 'Active', - Paused: 'Paused', - Cancelled: 'Cancelled', - Drafted: 'Draft', - Expired: 'Expired', - Blocked: 'Blocked', - 'Appeal Requested': 'Blocked', // Map appeal requested to blocked for UI - }; - - return stateMap[state] || state; -}; - export const AllListingsTableContainer: React.FC< AllListingsTableContainerProps > = ({ currentPage, onPageChange }) => { From 9b18f4f860f4f46d343d43e004823a66e9408f1a Mon Sep 17 00:00:00 2001 From: Arif Ahmed Date: Fri, 21 Nov 2025 09:14:52 -0500 Subject: [PATCH 6/8] refactor: standardize formatting in GraphQL fragments and resolvers --- .../all-listings-table.container.graphql | 108 +++++++++--------- .../src/contexts/listing/item/index.ts | 4 +- .../schema/types/listing/item-listing.graphql | 4 +- .../listing/item-listing.resolvers.test.ts | 45 ++++---- 4 files changed, 80 insertions(+), 81 deletions(-) diff --git a/apps/ui-sharethrift/src/components/layouts/home/my-listings/components/all-listings-table.container.graphql b/apps/ui-sharethrift/src/components/layouts/home/my-listings/components/all-listings-table.container.graphql index bdd76a0a9..f8aeb86f9 100644 --- a/apps/ui-sharethrift/src/components/layouts/home/my-listings/components/all-listings-table.container.graphql +++ b/apps/ui-sharethrift/src/components/layouts/home/my-listings/components/all-listings-table.container.graphql @@ -1,71 +1,71 @@ fragment HomeAllListingsTableContainerListingFields on ListingAll { - id - title - state - images - createdAt - sharingPeriodStart - sharingPeriodEnd + id + title + state + images + createdAt + sharingPeriodStart + sharingPeriodEnd } fragment HomeAllListingsTableContainerItemListingFields on ItemListing { - id - title - state - images - createdAt - sharingPeriodStart - sharingPeriodEnd + id + title + state + images + createdAt + sharingPeriodStart + sharingPeriodEnd } query HomeAllListingsTableContainerMyListingsAll( - $page: Int! - $pageSize: Int! - $searchText: String - $statusFilters: [String!] - $sorter: SorterInput + $page: Int! + $pageSize: Int! + $searchText: String + $statusFilters: [String!] + $sorter: SorterInput ) { - myListingsAll( - page: $page - pageSize: $pageSize - searchText: $searchText - statusFilters: $statusFilters - sorter: $sorter - ) { - items { - ...HomeAllListingsTableContainerListingFields - } - total - page - pageSize - } + myListingsAll( + page: $page + pageSize: $pageSize + searchText: $searchText + statusFilters: $statusFilters + sorter: $sorter + ) { + items { + ...HomeAllListingsTableContainerListingFields + } + total + page + pageSize + } } mutation HomeAllListingsTableContainerPauseItemListing($id: ObjectID!) { - pauseItemListing(id: $id) { - id - state - updatedAt - } + pauseItemListing(id: $id) { + id + state + updatedAt + } } mutation HomeAllListingsTableContainerCancelItemListing($id: ObjectID!) { - cancelItemListing(id: $id) { - status { - success - errorMessage - } - listing { - ...HomeAllListingsTableContainerItemListingFields - } - } + cancelItemListing(id: $id) { + status { + success + errorMessage + } + listing { + ...HomeAllListingsTableContainerItemListingFields + } + } } mutation HomeAllListingsTableContainerDeleteListing($id: ObjectID!) { - deleteItemListing(id: $id) { - status { - success - errorMessage - } - } -} \ No newline at end of file + deleteItemListing(id: $id) { + status { + success + errorMessage + } + } +} diff --git a/packages/sthrift/application-services/src/contexts/listing/item/index.ts b/packages/sthrift/application-services/src/contexts/listing/item/index.ts index 0e8c8d364..31f9d7e43 100644 --- a/packages/sthrift/application-services/src/contexts/listing/item/index.ts +++ b/packages/sthrift/application-services/src/contexts/listing/item/index.ts @@ -23,7 +23,9 @@ export interface ItemListingApplicationService { ) => Promise; queryBySharer: ( command: ItemListingQueryBySharerCommand, - ) => Promise; + ) => Promise< + Domain.Contexts.Listing.ItemListing.ItemListingEntityReference[] + >; queryAll: ( command: ItemListingQueryAllCommand, ) => Promise< diff --git a/packages/sthrift/graphql/src/schema/types/listing/item-listing.graphql b/packages/sthrift/graphql/src/schema/types/listing/item-listing.graphql index 904d34876..ef2bfde6c 100644 --- a/packages/sthrift/graphql/src/schema/types/listing/item-listing.graphql +++ b/packages/sthrift/graphql/src/schema/types/listing/item-listing.graphql @@ -70,8 +70,8 @@ input CreateItemListingInput { } type ItemListingMutationResult implements MutationResult { - status: MutationStatus! - listing: ItemListing + status: MutationStatus! + listing: ItemListing } extend type Mutation { diff --git a/packages/sthrift/graphql/src/schema/types/listing/item-listing.resolvers.test.ts b/packages/sthrift/graphql/src/schema/types/listing/item-listing.resolvers.test.ts index 1ed01628d..2ca40f1c4 100644 --- a/packages/sthrift/graphql/src/schema/types/listing/item-listing.resolvers.test.ts +++ b/packages/sthrift/graphql/src/schema/types/listing/item-listing.resolvers.test.ts @@ -901,28 +901,25 @@ test.for(feature, ({ Scenario }) => { }, ); - Scenario( - 'Error while pausing an item listing', - ({ Given, When, Then }) => { - Given('Listing.ItemListing.pause throws an error', () => { - context = makeMockGraphContext(); - vi.mocked( - context.applicationServices.Listing.ItemListing.pause, - ).mockRejectedValue(new Error('Pause failed')); - }); - When('the pauseItemListing mutation is executed', async () => { - try { - const resolver = itemListingResolvers.Mutation - ?.pauseItemListing as TestResolver<{ id: string }>; - await resolver({}, { id: 'listing-1' }, context, {} as never); - } catch (e) { - error = e as Error; - } - }); - Then('it should propagate the error message', () => { - expect(error).toBeDefined(); - expect(error?.message).toBe('Pause failed'); - }); - }, - ); + Scenario('Error while pausing an item listing', ({ Given, When, Then }) => { + Given('Listing.ItemListing.pause throws an error', () => { + context = makeMockGraphContext(); + vi.mocked( + context.applicationServices.Listing.ItemListing.pause, + ).mockRejectedValue(new Error('Pause failed')); + }); + When('the pauseItemListing mutation is executed', async () => { + try { + const resolver = itemListingResolvers.Mutation + ?.pauseItemListing as TestResolver<{ id: string }>; + await resolver({}, { id: 'listing-1' }, context, {} as never); + } catch (e) { + error = e as Error; + } + }); + Then('it should propagate the error message', () => { + expect(error).toBeDefined(); + expect(error?.message).toBe('Pause failed'); + }); + }); }); From 20db9dd65342af3bb78ead98d611239150ced28d Mon Sep 17 00:00:00 2001 From: Arif Ahmed Date: Fri, 21 Nov 2025 12:11:49 -0500 Subject: [PATCH 7/8] refactor: address Sourcery code review suggestions - Inline immediately returned variable in pauseItemListing resolver - Add ownership verification to pause listing functionality - Only the listing owner (sharer) can pause their listing - Prevents unauthorized users from pausing listings - Optimize paused listing filtering by pushing to database layer - Move filter from in-memory to MongoDB query using $nin operator - Improves performance by avoiding loading all listings into memory - Add excludeStates parameter to ItemListingQueryAllCommand Security: Implements authorization check for pause action Performance: Database-level filtering instead of application-level --- .../src/contexts/listing/item/pause.ts | 7 ++++++- .../src/contexts/listing/item/query-all.ts | 10 +++++++++- .../types/listing/item-listing.resolvers.ts | 9 +++++---- .../listing/item/item-listing.read-repository.ts | 15 ++++++++++++--- 4 files changed, 32 insertions(+), 9 deletions(-) diff --git a/packages/sthrift/application-services/src/contexts/listing/item/pause.ts b/packages/sthrift/application-services/src/contexts/listing/item/pause.ts index ce6b68258..a932a96e4 100644 --- a/packages/sthrift/application-services/src/contexts/listing/item/pause.ts +++ b/packages/sthrift/application-services/src/contexts/listing/item/pause.ts @@ -3,6 +3,7 @@ import type { DataSources } from '@sthrift/persistence'; export interface ItemListingPauseCommand { id: string; + userEmail: string; } export const pause = (dataSources: DataSources) => { @@ -19,6 +20,11 @@ export const pause = (dataSources: DataSources) => { throw new Error('Listing not found'); } + // Ownership check: only the sharer who owns the listing can pause it + if (listing.sharer?.account?.email !== command.userEmail) { + throw new Error('Only the listing owner can pause this listing'); + } + listing.pause(); itemListingToReturn = await repo.save(listing); }, @@ -29,4 +35,3 @@ export const pause = (dataSources: DataSources) => { return itemListingToReturn; }; }; - diff --git a/packages/sthrift/application-services/src/contexts/listing/item/query-all.ts b/packages/sthrift/application-services/src/contexts/listing/item/query-all.ts index a5daf9ddc..11c9fa8a6 100644 --- a/packages/sthrift/application-services/src/contexts/listing/item/query-all.ts +++ b/packages/sthrift/application-services/src/contexts/listing/item/query-all.ts @@ -3,6 +3,7 @@ import type { DataSources } from '@sthrift/persistence'; export interface ItemListingQueryAllCommand { fields?: string[]; + excludeStates?: string[]; } export const queryAll = (dataSources: DataSources) => { @@ -11,8 +12,15 @@ export const queryAll = (dataSources: DataSources) => { ): Promise< Domain.Contexts.Listing.ItemListing.ItemListingEntityReference[] > => { + const options: Parameters< + typeof dataSources.readonlyDataSource.Listing.ItemListing.ItemListingReadRepo.getAll + >[0] = { + ...(command.fields && { fields: command.fields }), + ...(command.excludeStates && { excludeStates: command.excludeStates }), + }; + return await dataSources.readonlyDataSource.Listing.ItemListing.ItemListingReadRepo.getAll( - { fields: command.fields }, + options, ); }; }; diff --git a/packages/sthrift/graphql/src/schema/types/listing/item-listing.resolvers.ts b/packages/sthrift/graphql/src/schema/types/listing/item-listing.resolvers.ts index e30435f7c..6a6260122 100644 --- a/packages/sthrift/graphql/src/schema/types/listing/item-listing.resolvers.ts +++ b/packages/sthrift/graphql/src/schema/types/listing/item-listing.resolvers.ts @@ -49,11 +49,11 @@ const itemListingResolvers: Resolvers = { ); }, itemListings: async (_parent, _args, context) => { - const allListings = - await context.applicationServices.Listing.ItemListing.queryAll({}); - // Filter out paused listings from search results for reservers + // Filter out paused listings from search results for reservers at the database level // Paused listings should not be visible to reservers - return allListings.filter((listing) => listing.state !== 'Paused'); + return await context.applicationServices.Listing.ItemListing.queryAll({ + excludeStates: ['Paused'], + }); }, itemListing: async (_parent, args, context) => { @@ -178,6 +178,7 @@ const itemListingResolvers: Resolvers = { return await context.applicationServices.Listing.ItemListing.pause({ id: args.id, + userEmail, }); }, }, diff --git a/packages/sthrift/persistence/src/datasources/readonly/listing/item/item-listing.read-repository.ts b/packages/sthrift/persistence/src/datasources/readonly/listing/item/item-listing.read-repository.ts index a65e9e018..a0b330ce5 100644 --- a/packages/sthrift/persistence/src/datasources/readonly/listing/item/item-listing.read-repository.ts +++ b/packages/sthrift/persistence/src/datasources/readonly/listing/item/item-listing.read-repository.ts @@ -12,7 +12,7 @@ const populateFields = ['sharer']; export interface ItemListingReadRepository { getAll: ( - options?: FindOptions, + options?: FindOptions & { excludeStates?: string[] }, ) => Promise< Domain.Contexts.Listing.ItemListing.ItemListingEntityReference[] >; @@ -60,9 +60,18 @@ export class ItemListingReadRepositoryImpl } async getAll( - options?: FindOptions, + options?: FindOptions & { excludeStates?: string[] }, ): Promise { - const result = await this.mongoDataSource.find({}, { + // Build filter query + const filter: Record = {}; + + // Add state exclusion filter if provided + if (options?.excludeStates && options.excludeStates.length > 0) { + // biome-ignore lint/complexity/useLiteralKeys: MongoDB query uses index signature + filter['state'] = { $nin: options.excludeStates }; + } + + const result = await this.mongoDataSource.find(filter, { ...options, populateFields: populateFields, }); From bd488a89b1b24e6caab31f1bc89d06fba8ee8be2 Mon Sep 17 00:00:00 2001 From: Arif Ahmed Date: Fri, 21 Nov 2025 12:46:39 -0500 Subject: [PATCH 8/8] test: update item listing resolver tests for new query and pause signatures - Update queryAll expectations to include excludeStates: ['Paused'] - Update pause expectations to include userEmail parameter - Fixes tests after implementing Sourcery code review suggestions --- .../types/listing/item-listing.resolvers.test.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/sthrift/graphql/src/schema/types/listing/item-listing.resolvers.test.ts b/packages/sthrift/graphql/src/schema/types/listing/item-listing.resolvers.test.ts index 2ca40f1c4..dd83fcaec 100644 --- a/packages/sthrift/graphql/src/schema/types/listing/item-listing.resolvers.test.ts +++ b/packages/sthrift/graphql/src/schema/types/listing/item-listing.resolvers.test.ts @@ -166,7 +166,7 @@ test.for(feature, ({ Scenario }) => { Then('it should call Listing.ItemListing.queryAll', () => { expect( context.applicationServices.Listing.ItemListing.queryAll, - ).toHaveBeenCalledWith({}); + ).toHaveBeenCalledWith({ excludeStates: ['Paused'] }); }); And('it should return a list of item listings', () => { expect(result).toBeDefined(); @@ -198,7 +198,7 @@ test.for(feature, ({ Scenario }) => { Then('it should call Listing.ItemListing.queryAll', () => { expect( context.applicationServices.Listing.ItemListing.queryAll, - ).toHaveBeenCalledWith({}); + ).toHaveBeenCalledWith({ excludeStates: ['Paused'] }); }); And('it should return all available listings', () => { expect(result).toBeDefined(); @@ -835,9 +835,9 @@ test.for(feature, ({ Scenario }) => { Then( 'it should call Listing.ItemListing.pause with the listing ID', () => { - expect( - context.applicationServices.Listing.ItemListing.pause, - ).toHaveBeenCalledWith({ id: 'listing-1' }); + expect( + context.applicationServices.Listing.ItemListing.pause, + ).toHaveBeenCalledWith({ id: 'listing-1', userEmail: 'test@example.com' }); }, ); And('it should return the paused listing with state "Paused"', () => {