Skip to content

投影、排序与分页

查询构造器返回可序列化普通对象,不执行 HTTP。新 filter 与旧 condition 有不同请求类型和 list 默认值,迁移时优先显式指定 limit。

构造器 / 模型默认值与优先级
pagination({ index?, size? }?)index 1、size 10,本工具不校验整数或范围。
projection({ include?, exclude? }?)两者默认省略;DEFAULT_PROJECTION 为 {};defaultProjection() 返回共享对象而非副本。
asc(field)、desc(field){ field, direction: ASC/DESC };不校验字段。
singleQuery(options?)没有 filter 时 condition 为 all();projection/sort 保持 undefined。
listQuery(options?)旧 condition 默认 limit 10,新 filter 默认 0,显式 0 会保留。
pagedQuery(options?)pagination 默认 DEFAULT_PAGINATION,即 {index:1,size:10}
pagedList({ total?, list? }?)list 默认 [],total 默认 list.length,返回 {total,list}

filter 已定义时优先于 condition,输出只保留其中一个字段。filter 为 null 会抛错,被选中的 condition 为 null 也抛错;这不是完整嵌套表达式校验。分页/list limit 工具不约束服务端限制;limit 0 的端点语义必须由服务端支持。filter 默认只是线上值 0,并非客户端保证读取全部行。

Queryable/SingleQuery/ListQuery/PagedQuery 是旧 condition 家族;FilterQueryable 和 Filter 前缀类型要求 filter;*QueryRequest 联合类型接受任一。ProjectionCapable、SortCapable 是可选属性组合;PagedList 只含 total/list,与请求页码独立。共享 DEFAULT_* 和 EMPTY_PAGED_LIST 在 JavaScript 中可变,应按只读默认值使用。没有网络资源需要清理。需要校验游标大小时见 cursorQuery

完整示例

ts
import {
  listQuery,
  pagedQuery,
  filter,
  projection,
  desc,
  pagedList,
} from '@ahoo-wang/fetcher-wow';
const page = pagedQuery({
  filter: filter.matchAll(),
  pagination: { index: 2, size: 20 },
  projection: projection({ include: ['state.name'] }),
  sort: [desc('state.name')],
});
console.assert(listQuery().limit === 10);
console.assert(listQuery({ filter: filter.matchAll() }).limit === 0);
console.assert(pagedList({ list: ['a'] }).total === 1);
console.log(page);

公开签名与类型

以下签名按当前根入口可达声明核对。? 表示可省略;泛型/接口只约束编译期,继承项与关联类型可从 符号索引 定位。运行时默认值和失败行为以本页上文为准。

pagination

ts
export function pagination(options?: Partial<Pagination>): Pagination;

实现默认值: index = DEFAULT_PAGINATION.index; size = DEFAULT_PAGINATION.size; options = DEFAULT_PAGINATION.

packages/wow/src/query/pagination.ts:46

Pagination

ts
export interface Pagination {
  index: number;
  size: number;
}

packages/wow/src/query/pagination.ts:20

DEFAULT_PAGINATION

ts
declare const DEFAULT_PAGINATION: Pagination;

packages/wow/src/query/pagination.ts:29

defaultProjection

ts
export function defaultProjection<
  FIELDS extends string = string,
>(): Projection<FIELDS>;

packages/wow/src/query/projection.ts:28

projection

ts
export function projection<FIELDS extends string = string>(
  options?: Projection<FIELDS>,
): Projection<FIELDS>;

实现默认值: options = defaultProjection().

packages/wow/src/query/projection.ts:46

Projection

ts
export interface Projection<FIELDS extends string = string> {
  include?: FIELDS[];
  exclude?: FIELDS[];
}

packages/wow/src/query/projection.ts:17

DEFAULT_PROJECTION

ts
declare const DEFAULT_PROJECTION: Projection<string>;

packages/wow/src/query/projection.ts:26

ProjectionCapable

ts
export interface ProjectionCapable<FIELDS extends string = string> {
  projection?: Projection<FIELDS>;
}

packages/wow/src/query/projection.ts:58

singleQuery

ts
export function singleQuery<FIELDS extends string = string>(
  options: FilterQueryOptions<FilterSingleQuery<FIELDS>>,
): FilterSingleQuery<FIELDS>;

packages/wow/src/query/queryable.ts:91

ts
export function singleQuery<FIELDS extends string = string>(
  options?: Partial<SingleQuery<FIELDS>>,
): SingleQuery<FIELDS>;

packages/wow/src/query/queryable.ts:95

listQuery

ts
export function listQuery<FIELDS extends string = string>(
  options: FilterQueryOptions<FilterListQuery<FIELDS>>,
): FilterListQuery<FIELDS>;

packages/wow/src/query/queryable.ts:149

ts
export function listQuery<FIELDS extends string = string>(
  options?: Partial<ListQuery<FIELDS>>,
): ListQuery<FIELDS>;

packages/wow/src/query/queryable.ts:153

pagedQuery

ts
export function pagedQuery<FIELDS extends string = string>(
  options: FilterQueryOptions<FilterPagedQuery<FIELDS>>,
): FilterPagedQuery<FIELDS>;

packages/wow/src/query/queryable.ts:208

ts
export function pagedQuery<FIELDS extends string = string>(
  options?: Partial<PagedQuery<FIELDS>>,
): PagedQuery<FIELDS>;

packages/wow/src/query/queryable.ts:212

pagedList

ts
export function pagedList<T>(options?: Partial<PagedList<T>>): PagedList<T>;

实现默认值: list = []; options = EMPTY_PAGED_LIST.

packages/wow/src/query/queryable.ts:257

Queryable

ts
export interface Queryable<FIELDS extends string = string>
  extends
    ConditionCapable<FIELDS>,
    ProjectionCapable<FIELDS>,
    SortCapable<FIELDS> {}

packages/wow/src/query/queryable.ts:24

FilterQueryable

ts
export interface FilterQueryable<FIELDS extends string = string>
  extends
    FilterCapable<FIELDS>,
    ProjectionCapable<FIELDS>,
    SortCapable<FIELDS> {}

packages/wow/src/query/queryable.ts:31

SingleQuery

ts
export interface SingleQuery<
  FIELDS extends string = string,
> extends Queryable<FIELDS> {}

packages/wow/src/query/queryable.ts:42

FilterSingleQuery

ts
export interface FilterSingleQuery<
  FIELDS extends string = string,
> extends FilterQueryable<FIELDS> {}

packages/wow/src/query/queryable.ts:47

SingleQueryRequest

ts
export type SingleQueryRequest<FIELDS extends string = string> =
  SingleQuery<FIELDS> | FilterSingleQuery<FIELDS>;

packages/wow/src/query/queryable.ts:51

ListQuery

ts
export interface ListQuery<
  FIELDS extends string = string,
> extends Queryable<FIELDS> {
  limit?: number;
}

packages/wow/src/query/queryable.ts:119

FilterListQuery

ts
export interface FilterListQuery<
  FIELDS extends string = string,
> extends FilterQueryable<FIELDS> {
  limit?: number;
}

packages/wow/src/query/queryable.ts:125

ListQueryRequest

ts
export type ListQueryRequest<FIELDS extends string = string> =
  ListQuery<FIELDS> | FilterListQuery<FIELDS>;

packages/wow/src/query/queryable.ts:132

PagedQuery

ts
export interface PagedQuery<
  FIELDS extends string = string,
> extends Queryable<FIELDS> {
  pagination?: Pagination;
}

packages/wow/src/query/queryable.ts:178

FilterPagedQuery

ts
export interface FilterPagedQuery<
  FIELDS extends string = string,
> extends FilterQueryable<FIELDS> {
  pagination?: Pagination;
}

packages/wow/src/query/queryable.ts:184

PagedQueryRequest

ts
export type PagedQueryRequest<FIELDS extends string = string> =
  PagedQuery<FIELDS> | FilterPagedQuery<FIELDS>;

packages/wow/src/query/queryable.ts:190

PagedList

ts
export interface PagedList<T> {
  total: number;
  list: T[];
}

packages/wow/src/query/queryable.ts:236

EMPTY_PAGED_LIST

ts
declare const EMPTY_PAGED_LIST: PagedList<any>;

packages/wow/src/query/queryable.ts:241

asc

ts
export function asc<FIELDS extends string = string>(
  field: FIELDS,
): FieldSort<FIELDS>;

packages/wow/src/query/sort.ts:36

desc

ts
export function desc<FIELDS extends string = string>(
  field: FIELDS,
): FieldSort<FIELDS>;

packages/wow/src/query/sort.ts:50

SortDirection

ts
export enum SortDirection {
  ASC = 'ASC',
  DESC = 'DESC',
}

packages/wow/src/query/sort.ts:18

FieldSort

ts
export interface FieldSort<FIELDS extends string = string> {
  field: FIELDS;
  direction: SortDirection;
}

packages/wow/src/query/sort.ts:26

SortCapable

ts
export interface SortCapable<FIELDS extends string = string> {
  sort?: FieldSort<FIELDS>[];
}

packages/wow/src/query/sort.ts:62

相关专题

客户端配置与元数据 · 命令与等待结果 · 快照查询 · 过滤表达式与旧条件 · 游标查询 · 聚合构造器 · 事件与历史状态 · 身份与资源归属

基于 Apache License 2.0 发布。