投影、排序与分页
查询构造器返回可序列化普通对象,不执行 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。
完整示例
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);2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
公开签名与类型
以下签名按当前根入口可达声明核对。? 表示可省略;泛型/接口只约束编译期,继承项与关联类型可从 符号索引 定位。运行时默认值和失败行为以本页上文为准。
pagination
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
export interface Pagination {
index: number;
size: number;
}2
3
4
packages/wow/src/query/pagination.ts:20
DEFAULT_PAGINATION
declare const DEFAULT_PAGINATION: Pagination;packages/wow/src/query/pagination.ts:29
defaultProjection
export function defaultProjection<
FIELDS extends string = string,
>(): Projection<FIELDS>;2
3
packages/wow/src/query/projection.ts:28
projection
export function projection<FIELDS extends string = string>(
options?: Projection<FIELDS>,
): Projection<FIELDS>;2
3
实现默认值: options = defaultProjection().
packages/wow/src/query/projection.ts:46
Projection
export interface Projection<FIELDS extends string = string> {
include?: FIELDS[];
exclude?: FIELDS[];
}2
3
4
packages/wow/src/query/projection.ts:17
DEFAULT_PROJECTION
declare const DEFAULT_PROJECTION: Projection<string>;packages/wow/src/query/projection.ts:26
ProjectionCapable
export interface ProjectionCapable<FIELDS extends string = string> {
projection?: Projection<FIELDS>;
}2
3
packages/wow/src/query/projection.ts:58
singleQuery
export function singleQuery<FIELDS extends string = string>(
options: FilterQueryOptions<FilterSingleQuery<FIELDS>>,
): FilterSingleQuery<FIELDS>;2
3
packages/wow/src/query/queryable.ts:91
export function singleQuery<FIELDS extends string = string>(
options?: Partial<SingleQuery<FIELDS>>,
): SingleQuery<FIELDS>;2
3
packages/wow/src/query/queryable.ts:95
listQuery
export function listQuery<FIELDS extends string = string>(
options: FilterQueryOptions<FilterListQuery<FIELDS>>,
): FilterListQuery<FIELDS>;2
3
packages/wow/src/query/queryable.ts:149
export function listQuery<FIELDS extends string = string>(
options?: Partial<ListQuery<FIELDS>>,
): ListQuery<FIELDS>;2
3
packages/wow/src/query/queryable.ts:153
pagedQuery
export function pagedQuery<FIELDS extends string = string>(
options: FilterQueryOptions<FilterPagedQuery<FIELDS>>,
): FilterPagedQuery<FIELDS>;2
3
packages/wow/src/query/queryable.ts:208
export function pagedQuery<FIELDS extends string = string>(
options?: Partial<PagedQuery<FIELDS>>,
): PagedQuery<FIELDS>;2
3
packages/wow/src/query/queryable.ts:212
pagedList
export function pagedList<T>(options?: Partial<PagedList<T>>): PagedList<T>;实现默认值: list = []; options = EMPTY_PAGED_LIST.
packages/wow/src/query/queryable.ts:257
Queryable
export interface Queryable<FIELDS extends string = string>
extends
ConditionCapable<FIELDS>,
ProjectionCapable<FIELDS>,
SortCapable<FIELDS> {}2
3
4
5
packages/wow/src/query/queryable.ts:24
FilterQueryable
export interface FilterQueryable<FIELDS extends string = string>
extends
FilterCapable<FIELDS>,
ProjectionCapable<FIELDS>,
SortCapable<FIELDS> {}2
3
4
5
packages/wow/src/query/queryable.ts:31
SingleQuery
export interface SingleQuery<
FIELDS extends string = string,
> extends Queryable<FIELDS> {}2
3
packages/wow/src/query/queryable.ts:42
FilterSingleQuery
export interface FilterSingleQuery<
FIELDS extends string = string,
> extends FilterQueryable<FIELDS> {}2
3
packages/wow/src/query/queryable.ts:47
SingleQueryRequest
export type SingleQueryRequest<FIELDS extends string = string> =
SingleQuery<FIELDS> | FilterSingleQuery<FIELDS>;2
packages/wow/src/query/queryable.ts:51
ListQuery
export interface ListQuery<
FIELDS extends string = string,
> extends Queryable<FIELDS> {
limit?: number;
}2
3
4
5
packages/wow/src/query/queryable.ts:119
FilterListQuery
export interface FilterListQuery<
FIELDS extends string = string,
> extends FilterQueryable<FIELDS> {
limit?: number;
}2
3
4
5
packages/wow/src/query/queryable.ts:125
ListQueryRequest
export type ListQueryRequest<FIELDS extends string = string> =
ListQuery<FIELDS> | FilterListQuery<FIELDS>;2
packages/wow/src/query/queryable.ts:132
PagedQuery
export interface PagedQuery<
FIELDS extends string = string,
> extends Queryable<FIELDS> {
pagination?: Pagination;
}2
3
4
5
packages/wow/src/query/queryable.ts:178
FilterPagedQuery
export interface FilterPagedQuery<
FIELDS extends string = string,
> extends FilterQueryable<FIELDS> {
pagination?: Pagination;
}2
3
4
5
packages/wow/src/query/queryable.ts:184
PagedQueryRequest
export type PagedQueryRequest<FIELDS extends string = string> =
PagedQuery<FIELDS> | FilterPagedQuery<FIELDS>;2
packages/wow/src/query/queryable.ts:190
PagedList
export interface PagedList<T> {
total: number;
list: T[];
}2
3
4
packages/wow/src/query/queryable.ts:236
EMPTY_PAGED_LIST
declare const EMPTY_PAGED_LIST: PagedList<any>;packages/wow/src/query/queryable.ts:241
asc
export function asc<FIELDS extends string = string>(
field: FIELDS,
): FieldSort<FIELDS>;2
3
packages/wow/src/query/sort.ts:36
desc
export function desc<FIELDS extends string = string>(
field: FIELDS,
): FieldSort<FIELDS>;2
3
packages/wow/src/query/sort.ts:50
SortDirection
export enum SortDirection {
ASC = 'ASC',
DESC = 'DESC',
}2
3
4
packages/wow/src/query/sort.ts:18
FieldSort
export interface FieldSort<FIELDS extends string = string> {
field: FIELDS;
direction: SortDirection;
}2
3
4
packages/wow/src/query/sort.ts:26
SortCapable
export interface SortCapable<FIELDS extends string = string> {
sort?: FieldSort<FIELDS>[];
}2
3
packages/wow/src/query/sort.ts:62
相关专题
客户端配置与元数据 · 命令与等待结果 · 快照查询 · 过滤表达式与旧条件 · 游标查询 · 聚合构造器 · 事件与历史状态 · 身份与资源归属
