Skip to content

Commit c6cac25

Browse files
authored
Merge pull request #12180 from apollographql/release-3.13
Release 3.13
2 parents 66dc5b9 + b30b06c commit c6cac25

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

59 files changed

+4248
-471
lines changed

.api-reports/api-report-core.api.md

Lines changed: 42 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1726,8 +1726,8 @@ export class ObservableQuery<TData = any, TVariables extends OperationVariables
17261726
silentSetOptions(newOptions: Partial<WatchQueryOptions<TVariables, TData>>): void;
17271727
startPolling(pollInterval: number): void;
17281728
stopPolling(): void;
1729-
subscribeToMore<TSubscriptionData = TData, TSubscriptionVariables extends OperationVariables = TVariables>(options: SubscribeToMoreOptions<TData, TSubscriptionVariables, TSubscriptionData>): () => void;
1730-
updateQuery<TVars extends OperationVariables = TVariables>(mapFn: (previousQueryResult: Unmasked<TData>, options: Pick<WatchQueryOptions<TVars, TData>, "variables">) => Unmasked<TData>): void;
1729+
subscribeToMore<TSubscriptionData = TData, TSubscriptionVariables extends OperationVariables = TVariables>(options: SubscribeToMoreOptions<TData, TSubscriptionVariables, TSubscriptionData, TVariables>): () => void;
1730+
updateQuery(mapFn: UpdateQueryMapFn<TData, TVariables>): void;
17311731
get variables(): TVariables | undefined;
17321732
}
17331733

@@ -2317,12 +2317,33 @@ class Stump extends Layer {
23172317
}
23182318

23192319
// @public (undocumented)
2320-
export type SubscribeToMoreOptions<TData = any, TSubscriptionVariables = OperationVariables, TSubscriptionData = TData> = {
2320+
export interface SubscribeToMoreFunction<TData, TVariables extends OperationVariables = OperationVariables> {
2321+
// (undocumented)
2322+
<TSubscriptionData = TData, TSubscriptionVariables extends OperationVariables = TVariables>(options: SubscribeToMoreOptions<TData, TSubscriptionVariables, TSubscriptionData, TVariables>): () => void;
2323+
}
2324+
2325+
// @public (undocumented)
2326+
export interface SubscribeToMoreOptions<TData = any, TSubscriptionVariables extends OperationVariables = OperationVariables, TSubscriptionData = TData, TVariables extends OperationVariables = TSubscriptionVariables> {
2327+
// (undocumented)
2328+
context?: DefaultContext;
2329+
// (undocumented)
23212330
document: DocumentNode | TypedDocumentNode<TSubscriptionData, TSubscriptionVariables>;
2322-
variables?: TSubscriptionVariables;
2323-
updateQuery?: UpdateQueryFn<TData, TSubscriptionVariables, TSubscriptionData>;
2331+
// (undocumented)
23242332
onError?: (error: Error) => void;
2325-
context?: DefaultContext;
2333+
// (undocumented)
2334+
updateQuery?: SubscribeToMoreUpdateQueryFn<TData, TVariables, TSubscriptionData>;
2335+
// (undocumented)
2336+
variables?: TSubscriptionVariables;
2337+
}
2338+
2339+
// @public (undocumented)
2340+
export type SubscribeToMoreUpdateQueryFn<TData = any, TVariables extends OperationVariables = OperationVariables, TSubscriptionData = TData> = {
2341+
(
2342+
unsafePreviousData: Unmasked<TData>, options: UpdateQueryOptions<TData, TVariables> & {
2343+
subscriptionData: {
2344+
data: Unmasked<TSubscriptionData>;
2345+
};
2346+
}): Unmasked<TData> | void;
23262347
};
23272348

23282349
// @public (undocumented)
@@ -2421,18 +2442,22 @@ type UnwrapFragmentRefs<TData> = true extends IsAny<TData> ? TData : TData exten
24212442
type UpdateQueries<TData> = MutationOptions<TData, any, any>["updateQueries"];
24222443

24232444
// @public (undocumented)
2424-
type UpdateQueryFn<TData = any, TSubscriptionVariables = OperationVariables, TSubscriptionData = TData> = (previousQueryResult: Unmasked<TData>, options: {
2425-
subscriptionData: {
2426-
data: Unmasked<TSubscriptionData>;
2427-
};
2428-
variables?: TSubscriptionVariables;
2429-
}) => Unmasked<TData>;
2445+
export interface UpdateQueryMapFn<TData = any, TVariables = OperationVariables> {
2446+
// (undocumented)
2447+
(
2448+
unsafePreviousData: Unmasked<TData>, options: UpdateQueryOptions<TData, TVariables>): Unmasked<TData> | void;
2449+
}
24302450

24312451
// @public (undocumented)
2432-
export interface UpdateQueryOptions<TVariables> {
2433-
// (undocumented)
2452+
export type UpdateQueryOptions<TData, TVariables> = {
24342453
variables?: TVariables;
2435-
}
2454+
} & ({
2455+
complete: true;
2456+
previousData: Unmasked<TData>;
2457+
} | {
2458+
complete: false;
2459+
previousData: DeepPartial<Unmasked<TData>> | undefined;
2460+
});
24362461

24372462
// @public (undocumented)
24382463
export interface UriFunction {
@@ -2508,11 +2533,10 @@ interface WriteContext extends ReadMergeModifyContext {
25082533
// src/cache/inmemory/policies.ts:162:3 - (ae-forgotten-export) The symbol "KeySpecifier" needs to be exported by the entry point index.d.ts
25092534
// src/cache/inmemory/policies.ts:162:3 - (ae-forgotten-export) The symbol "KeyArgsFunction" needs to be exported by the entry point index.d.ts
25102535
// src/cache/inmemory/types.ts:139:3 - (ae-forgotten-export) The symbol "KeyFieldsFunction" needs to be exported by the entry point index.d.ts
2511-
// src/core/ObservableQuery.ts:120:5 - (ae-forgotten-export) The symbol "QueryManager" needs to be exported by the entry point index.d.ts
2512-
// src/core/ObservableQuery.ts:121:5 - (ae-forgotten-export) The symbol "QueryInfo" needs to be exported by the entry point index.d.ts
2536+
// src/core/ObservableQuery.ts:118:5 - (ae-forgotten-export) The symbol "QueryManager" needs to be exported by the entry point index.d.ts
2537+
// src/core/ObservableQuery.ts:119:5 - (ae-forgotten-export) The symbol "QueryInfo" needs to be exported by the entry point index.d.ts
25132538
// src/core/QueryManager.ts:159:5 - (ae-forgotten-export) The symbol "MutationStoreValue" needs to be exported by the entry point index.d.ts
25142539
// src/core/QueryManager.ts:414:7 - (ae-forgotten-export) The symbol "UpdateQueries" needs to be exported by the entry point index.d.ts
2515-
// src/core/watchQueryOptions.ts:277:2 - (ae-forgotten-export) The symbol "UpdateQueryFn" needs to be exported by the entry point index.d.ts
25162540
// src/link/http/selectHttpOptionsAndBody.ts:128:32 - (ae-forgotten-export) The symbol "HttpQueryOptions" needs to be exported by the entry point index.d.ts
25172541

25182542
// (No @packageDocumentation comment for this package)

.api-reports/api-report-react.api.md

Lines changed: 99 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -373,6 +373,7 @@ type BackgroundQueryHookOptionsNoInfer<TData, TVariables extends OperationVariab
373373
// @public (undocumented)
374374
export interface BaseMutationOptions<TData = any, TVariables = OperationVariables, TContext = Context, TCache extends ApolloCache<any> = ApolloCache<any>> extends MutationSharedOptions<TData, TVariables, TContext, TCache> {
375375
client?: ApolloClient<object>;
376+
// @deprecated
376377
ignoreResults?: boolean;
377378
notifyOnNetworkStatusChange?: boolean;
378379
onCompleted?: (data: MaybeMasked<TData>, clientOptions?: BaseMutationOptions) => void;
@@ -885,6 +886,11 @@ TData
885886
};
886887
} : never : never;
887888

889+
// Warning: (ae-forgotten-export) The symbol "FragmentType" needs to be exported by the entry point index.d.ts
890+
//
891+
// @public (undocumented)
892+
type From<TData> = StoreObject | Reference | FragmentType<NoInfer_2<TData>> | string | null;
893+
888894
// @internal
889895
const getApolloCacheMemoryInternals: (() => {
890896
cache: {
@@ -1042,7 +1048,9 @@ export interface LazyQueryHookExecOptions<TData = any, TVariables extends Operat
10421048
export interface LazyQueryHookOptions<TData = any, TVariables extends OperationVariables = OperationVariables> extends BaseQueryOptions<TVariables, TData> {
10431049
// @internal (undocumented)
10441050
defaultOptions?: Partial<WatchQueryOptions<TVariables, TData>>;
1051+
// @deprecated
10451052
onCompleted?: (data: MaybeMasked<TData>) => void;
1053+
// @deprecated
10461054
onError?: (error: ApolloError) => void;
10471055
}
10481056

@@ -1428,8 +1436,9 @@ class ObservableQuery<TData = any, TVariables extends OperationVariables = Opera
14281436
startPolling(pollInterval: number): void;
14291437
stopPolling(): void;
14301438
// Warning: (ae-forgotten-export) The symbol "SubscribeToMoreOptions" needs to be exported by the entry point index.d.ts
1431-
subscribeToMore<TSubscriptionData = TData, TSubscriptionVariables extends OperationVariables = TVariables>(options: SubscribeToMoreOptions<TData, TSubscriptionVariables, TSubscriptionData>): () => void;
1432-
updateQuery<TVars extends OperationVariables = TVariables>(mapFn: (previousQueryResult: Unmasked<TData>, options: Pick<WatchQueryOptions<TVars, TData>, "variables">) => Unmasked<TData>): void;
1439+
subscribeToMore<TSubscriptionData = TData, TSubscriptionVariables extends OperationVariables = TVariables>(options: SubscribeToMoreOptions<TData, TSubscriptionVariables, TSubscriptionData, TVariables>): () => void;
1440+
// Warning: (ae-forgotten-export) The symbol "UpdateQueryMapFn" needs to be exported by the entry point index.d.ts
1441+
updateQuery(mapFn: UpdateQueryMapFn<TData, TVariables>): void;
14331442
get variables(): TVariables | undefined;
14341443
}
14351444

@@ -1446,8 +1455,9 @@ export interface ObservableQueryFields<TData, TVariables extends OperationVariab
14461455
reobserve: (newOptions?: Partial<WatchQueryOptions<TVariables, TData>>, newNetworkStatus?: NetworkStatus) => Promise<ApolloQueryResult<MaybeMasked<TData>>>;
14471456
startPolling: (pollInterval: number) => void;
14481457
stopPolling: () => void;
1449-
subscribeToMore: <TSubscriptionData = TData, TSubscriptionVariables extends OperationVariables = TVariables>(options: SubscribeToMoreOptions<TData, TSubscriptionVariables, TSubscriptionData>) => () => void;
1450-
updateQuery: <TVars extends OperationVariables = TVariables>(mapFn: (previousQueryResult: Unmasked<TData>, options: Pick<WatchQueryOptions<TVars, TData>, "variables">) => Unmasked<TData>) => void;
1458+
// Warning: (ae-forgotten-export) The symbol "SubscribeToMoreFunction" needs to be exported by the entry point index.d.ts
1459+
subscribeToMore: SubscribeToMoreFunction<TData, TVariables>;
1460+
updateQuery: (mapFn: UpdateQueryMapFn<TData, TVariables>) => void;
14511461
variables: TVariables | undefined;
14521462
}
14531463

@@ -1537,8 +1547,6 @@ export interface PreloadQueryFunction {
15371547
<TData = unknown, TVariables extends OperationVariables = OperationVariables>(query: DocumentNode | TypedDocumentNode<TData, TVariables>, ...[options]: PreloadQueryOptionsArg<NoInfer_2<TVariables>>): PreloadedQueryRef<TData, TVariables>;
15381548
}
15391549

1540-
// Warning: (ae-forgotten-export) The symbol "VariablesOption" needs to be exported by the entry point index.d.ts
1541-
//
15421550
// @public (undocumented)
15431551
export type PreloadQueryOptions<TVariables extends OperationVariables = OperationVariables> = {
15441552
canonizeResults?: boolean;
@@ -1588,7 +1596,9 @@ export interface QueryDataOptions<TData = any, TVariables extends OperationVaria
15881596
export interface QueryFunctionOptions<TData = any, TVariables extends OperationVariables = OperationVariables> extends BaseQueryOptions<TVariables, TData> {
15891597
// @internal (undocumented)
15901598
defaultOptions?: Partial<WatchQueryOptions<TVariables, TData>>;
1599+
// @deprecated
15911600
onCompleted?: (data: MaybeMasked<TData>) => void;
1601+
// @deprecated
15921602
onError?: (error: ApolloError) => void;
15931603
skip?: boolean;
15941604
}
@@ -2087,15 +2097,35 @@ Item
20872097
type StoreValue = number | string | string[] | Reference | Reference[] | null | undefined | void | Object;
20882098

20892099
// @public (undocumented)
2090-
type SubscribeToMoreFunction<TData, TVariables extends OperationVariables> = ObservableQueryFields<TData, TVariables>["subscribeToMore"];
2100+
interface SubscribeToMoreFunction<TData, TVariables extends OperationVariables = OperationVariables> {
2101+
// (undocumented)
2102+
<TSubscriptionData = TData, TSubscriptionVariables extends OperationVariables = TVariables>(options: SubscribeToMoreOptions<TData, TSubscriptionVariables, TSubscriptionData, TVariables>): () => void;
2103+
}
20912104

20922105
// @public (undocumented)
2093-
type SubscribeToMoreOptions<TData = any, TSubscriptionVariables = OperationVariables, TSubscriptionData = TData> = {
2106+
interface SubscribeToMoreOptions<TData = any, TSubscriptionVariables extends OperationVariables = OperationVariables, TSubscriptionData = TData, TVariables extends OperationVariables = TSubscriptionVariables> {
2107+
// (undocumented)
2108+
context?: Context;
2109+
// (undocumented)
20942110
document: DocumentNode | TypedDocumentNode<TSubscriptionData, TSubscriptionVariables>;
2095-
variables?: TSubscriptionVariables;
2096-
updateQuery?: UpdateQueryFn<TData, TSubscriptionVariables, TSubscriptionData>;
2111+
// (undocumented)
20972112
onError?: (error: Error) => void;
2098-
context?: Context;
2113+
// Warning: (ae-forgotten-export) The symbol "SubscribeToMoreUpdateQueryFn" needs to be exported by the entry point index.d.ts
2114+
//
2115+
// (undocumented)
2116+
updateQuery?: SubscribeToMoreUpdateQueryFn<TData, TVariables, TSubscriptionData>;
2117+
// (undocumented)
2118+
variables?: TSubscriptionVariables;
2119+
}
2120+
2121+
// @public (undocumented)
2122+
type SubscribeToMoreUpdateQueryFn<TData = any, TVariables extends OperationVariables = OperationVariables, TSubscriptionData = TData> = {
2123+
(
2124+
unsafePreviousData: Unmasked<TData>, options: UpdateQueryOptions<TData, TVariables> & {
2125+
subscriptionData: {
2126+
data: Unmasked<TSubscriptionData>;
2127+
};
2128+
}): Unmasked<TData> | void;
20992129
};
21002130

21012131
// @public (undocumented)
@@ -2217,12 +2247,22 @@ type UnwrapFragmentRefs<TData> = true extends IsAny<TData> ? TData : TData exten
22172247
type UpdateQueries<TData> = MutationOptions<TData, any, any>["updateQueries"];
22182248

22192249
// @public (undocumented)
2220-
type UpdateQueryFn<TData = any, TSubscriptionVariables = OperationVariables, TSubscriptionData = TData> = (previousQueryResult: Unmasked<TData>, options: {
2221-
subscriptionData: {
2222-
data: Unmasked<TSubscriptionData>;
2223-
};
2224-
variables?: TSubscriptionVariables;
2225-
}) => Unmasked<TData>;
2250+
interface UpdateQueryMapFn<TData = any, TVariables = OperationVariables> {
2251+
// (undocumented)
2252+
(
2253+
unsafePreviousData: Unmasked<TData>, options: UpdateQueryOptions<TData, TVariables>): Unmasked<TData> | void;
2254+
}
2255+
2256+
// @public (undocumented)
2257+
type UpdateQueryOptions<TData, TVariables> = {
2258+
variables?: TVariables;
2259+
} & ({
2260+
complete: true;
2261+
previousData: Unmasked<TData>;
2262+
} | {
2263+
complete: false;
2264+
previousData: DeepPartial<Unmasked<TData>> | undefined;
2265+
});
22262266

22272267
// @public (undocumented)
22282268
interface UriFunction {
@@ -2316,8 +2356,6 @@ export function useFragment<TData = any, TVars = OperationVariables>(options: Us
23162356
// @public (undocumented)
23172357
export interface UseFragmentOptions<TData, TVars> extends Omit<Cache_2.DiffOptions<NoInfer_2<TData>, NoInfer_2<TVars>>, "id" | "query" | "optimistic" | "previousResult" | "returnPartialData">, Omit<Cache_2.ReadFragmentOptions<TData, TVars>, "id" | "variables" | "returnPartialData"> {
23182358
client?: ApolloClient<any>;
2319-
// Warning: (ae-forgotten-export) The symbol "FragmentType" needs to be exported by the entry point index.d.ts
2320-
//
23212359
// (undocumented)
23222360
from: StoreObject | Reference | FragmentType<NoInfer_2<TData>> | string | null;
23232361
// (undocumented)
@@ -2412,6 +2450,40 @@ export function useSubscription<TData = any, TVariables extends OperationVariabl
24122450
variables?: TVariables | undefined;
24132451
};
24142452

2453+
// Warning: (ae-forgotten-export) The symbol "UseSuspenseFragmentOptions" needs to be exported by the entry point index.d.ts
2454+
//
2455+
// @public (undocumented)
2456+
export function useSuspenseFragment<TData, TVariables extends OperationVariables = OperationVariables>(options: UseSuspenseFragmentOptions<TData, TVariables> & {
2457+
from: NonNullable<From<TData>>;
2458+
}): UseSuspenseFragmentResult<TData>;
2459+
2460+
// @public (undocumented)
2461+
export function useSuspenseFragment<TData, TVariables extends OperationVariables = OperationVariables>(options: UseSuspenseFragmentOptions<TData, TVariables> & {
2462+
from: null;
2463+
}): UseSuspenseFragmentResult<null>;
2464+
2465+
// @public (undocumented)
2466+
export function useSuspenseFragment<TData, TVariables extends OperationVariables = OperationVariables>(options: UseSuspenseFragmentOptions<TData, TVariables> & {
2467+
from: From<TData>;
2468+
}): UseSuspenseFragmentResult<TData | null>;
2469+
2470+
// @public (undocumented)
2471+
export function useSuspenseFragment<TData, TVariables extends OperationVariables = OperationVariables>(options: UseSuspenseFragmentOptions<TData, TVariables>): UseSuspenseFragmentResult<TData>;
2472+
2473+
// @public (undocumented)
2474+
type UseSuspenseFragmentOptions<TData, TVariables extends OperationVariables> = {
2475+
fragment: DocumentNode | TypedDocumentNode<TData, TVariables>;
2476+
fragmentName?: string;
2477+
from: From<TData>;
2478+
optimistic?: boolean;
2479+
client?: ApolloClient<any>;
2480+
} & VariablesOption<NoInfer_2<TVariables>>;
2481+
2482+
// @public (undocumented)
2483+
export type UseSuspenseFragmentResult<TData> = {
2484+
data: MaybeMasked<TData>;
2485+
};
2486+
24152487
// @public (undocumented)
24162488
export function useSuspenseQuery<TData, TVariables extends OperationVariables, TOptions extends Omit<SuspenseQueryHookOptions<TData>, "variables">>(query: DocumentNode | TypedDocumentNode<TData, TVariables>, options?: SuspenseQueryHookOptions<NoInfer_2<TData>, NoInfer_2<TVariables>> & TOptions): UseSuspenseQueryResult<TOptions["errorPolicy"] extends "ignore" | "all" ? TOptions["returnPartialData"] extends true ? DeepPartial<TData> | undefined : TData | undefined : TOptions["returnPartialData"] extends true ? TOptions["skip"] extends boolean ? DeepPartial<TData> | undefined : DeepPartial<TData> : TOptions["skip"] extends boolean ? TData | undefined : TData, TVariables>;
24172489

@@ -2472,11 +2544,11 @@ export interface UseSuspenseQueryResult<TData = unknown, TVariables extends Oper
24722544
}
24732545

24742546
// @public (undocumented)
2475-
type VariablesOption<TVariables extends OperationVariables> = [
2547+
export type VariablesOption<TVariables extends OperationVariables> = [
24762548
TVariables
24772549
] extends [never] ? {
24782550
variables?: Record<string, never>;
2479-
} : {} extends OnlyRequiredProperties<TVariables> ? {
2551+
} : Record<string, never> extends OnlyRequiredProperties<TVariables> ? {
24802552
variables?: TVariables;
24812553
} : {
24822554
variables: TVariables;
@@ -2519,17 +2591,17 @@ interface WatchQueryOptions<TVariables extends OperationVariables = OperationVar
25192591
// src/cache/core/types/common.ts:104:3 - (ae-forgotten-export) The symbol "ToReferenceFunction" needs to be exported by the entry point index.d.ts
25202592
// src/cache/core/types/common.ts:105:3 - (ae-forgotten-export) The symbol "StorageType" needs to be exported by the entry point index.d.ts
25212593
// src/core/LocalState.ts:46:5 - (ae-forgotten-export) The symbol "FragmentMap" needs to be exported by the entry point index.d.ts
2522-
// src/core/ObservableQuery.ts:120:5 - (ae-forgotten-export) The symbol "QueryManager" needs to be exported by the entry point index.d.ts
2523-
// src/core/ObservableQuery.ts:121:5 - (ae-forgotten-export) The symbol "QueryInfo" needs to be exported by the entry point index.d.ts
2594+
// src/core/ObservableQuery.ts:118:5 - (ae-forgotten-export) The symbol "QueryManager" needs to be exported by the entry point index.d.ts
2595+
// src/core/ObservableQuery.ts:119:5 - (ae-forgotten-export) The symbol "QueryInfo" needs to be exported by the entry point index.d.ts
25242596
// src/core/QueryManager.ts:159:5 - (ae-forgotten-export) The symbol "MutationStoreValue" needs to be exported by the entry point index.d.ts
25252597
// src/core/QueryManager.ts:414:7 - (ae-forgotten-export) The symbol "UpdateQueries" needs to be exported by the entry point index.d.ts
25262598
// src/core/types.ts:175:3 - (ae-forgotten-export) The symbol "MutationQueryReducer" needs to be exported by the entry point index.d.ts
25272599
// src/core/types.ts:204:5 - (ae-forgotten-export) The symbol "Resolver" needs to be exported by the entry point index.d.ts
2528-
// src/core/watchQueryOptions.ts:277:2 - (ae-forgotten-export) The symbol "UpdateQueryFn" needs to be exported by the entry point index.d.ts
2529-
// src/react/hooks/useBackgroundQuery.ts:38:3 - (ae-forgotten-export) The symbol "SubscribeToMoreFunction" needs to be exported by the entry point index.d.ts
2530-
// src/react/hooks/useBackgroundQuery.ts:54:3 - (ae-forgotten-export) The symbol "FetchMoreFunction" needs to be exported by the entry point index.d.ts
2531-
// src/react/hooks/useBackgroundQuery.ts:78:4 - (ae-forgotten-export) The symbol "RefetchFunction" needs to be exported by the entry point index.d.ts
2600+
// src/core/watchQueryOptions.ts:357:2 - (ae-forgotten-export) The symbol "UpdateQueryOptions" needs to be exported by the entry point index.d.ts
2601+
// src/react/hooks/useBackgroundQuery.ts:51:3 - (ae-forgotten-export) The symbol "FetchMoreFunction" needs to be exported by the entry point index.d.ts
2602+
// src/react/hooks/useBackgroundQuery.ts:75:4 - (ae-forgotten-export) The symbol "RefetchFunction" needs to be exported by the entry point index.d.ts
25322603
// src/react/hooks/useLoadableQuery.ts:120:9 - (ae-forgotten-export) The symbol "ResetFunction" needs to be exported by the entry point index.d.ts
2604+
// src/react/hooks/useSuspenseFragment.ts:70:5 - (ae-forgotten-export) The symbol "From" needs to be exported by the entry point index.d.ts
25332605

25342606
// (No @packageDocumentation comment for this package)
25352607

0 commit comments

Comments
 (0)