Skip to content

Query Contracts

Core query support in @cratis/arc is built on typed query classes and generated proxies.

The base query interface holds cross-cutting query concerns:

interface IQuery extends ICanBeConfigured {
setHttpMethod(method: QueryHttpMethod): void;
get sorting(): Sorting;
set sorting(value: Sorting);
get paging(): Paging;
set paging(value: Paging);
}

setHttpMethod overrides the global Globals.queryHttpMethod for one query instance. QueryHttpMethod is Get (the default), Query (RFC QUERY with a JSON body), or Auto (try QUERY, fall back to GET for the rest of the session). See using the HTTP QUERY method before sending arguments that must stay out of URLs.

IQueryFor adds route, typed parameters, default value, and execution:

interface IQueryFor<TDataType, TParameters = object>
extends IQuery, IHaveParameters {
readonly route: string;
readonly requiredRequestParameters: string[];
readonly defaultValue: TDataType;
readonly roles: string[];
get parameters(): TParameters | undefined;
set parameters(value: TParameters);
perform(args?: TParameters): Promise<QueryResult<TDataType>>;
}

Query contracts include:

  • Typed parameters and responses
  • Required route/request parameter metadata
  • Sorting and paging metadata
  • Required roles for UI decisions
  • Default values for predictable initialization
  • Execution through perform()