src/types/schema.ts had drifted from the official schema contract: a `clientOnly` field had been added to `FilterEnum` to support client-side log filtering. Restored it to match upstream exactly and moved the deviation-only type into a new intersection type in src/lib/schemaDeviationTypes.ts instead. Audited the codebase for every place the UI does something the official schema doesn't support and tagged each with `// SCHEMA-DEVIATION: <id>`, documented in the new SCHEMA_DEVIATIONS.md registry (what, why, and the ideal server-side fix): - log-client-filters: Level/Event filters on Log Entries, applied client-side because x:Log/query rejects them as JMAP filters. - account-quota-usage-column: synthetic quotaUsage column on the Accounts list. - mailbox-client-hierarchy-sort: full-fetch + client-side sort to reconstruct mailbox parent/child hierarchy. - webapp-enabled-column-fallback: synthetic "Enabled" column label for x:Application when the schema list doesn't define one. Other viewName/objectName special cases (x:OtpAuth, x:Expression, x:Rate, x:Action, x:Trace, CustomComponent/*) were checked against upstream and are pre-existing architecture, not fork deviations.
26 lines
968 B
TypeScript
26 lines
968 B
TypeScript
/*
|
|
* SPDX-FileCopyrightText: 2020 Stalwart Labs LLC <hello@stalw.art>
|
|
*
|
|
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-SEL
|
|
*/
|
|
|
|
import type { FilterEnum } from '@/types/schema';
|
|
|
|
/**
|
|
* Type augmentations for tracked schema deviations (see SCHEMA_DEVIATIONS.md).
|
|
*
|
|
* `src/types/schema.ts` mirrors the server's schema contract and must stay
|
|
* aligned with the official webui/server types — it is never edited to
|
|
* accommodate a deviation. When a deviation needs to carry extra data on an
|
|
* otherwise-official schema shape, the augmented type lives here instead,
|
|
* as an intersection with the official type, and is imported only by the
|
|
* deviation's own code.
|
|
*/
|
|
|
|
// SCHEMA-DEVIATION: log-client-filters (see SCHEMA_DEVIATIONS.md)
|
|
export type ClientOnlyFilterEnum = FilterEnum & { clientOnly?: boolean };
|
|
|
|
export function isClientOnlyFilterEnum(f: FilterEnum): f is ClientOnlyFilterEnum {
|
|
return (f as ClientOnlyFilterEnum).clientOnly === true;
|
|
}
|