@ngutil/data 0.0.102 → 0.0.105
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/ngutil-data.mjs +36 -34
- package/fesm2022/ngutil-data.mjs.map +1 -1
- package/index.d.ts +586 -9
- package/package.json +5 -5
- package/model/index.d.ts +0 -1
- package/model/meta.d.ts +0 -51
- package/provider/array.d.ts +0 -7
- package/provider/index.d.ts +0 -4
- package/provider/local.d.ts +0 -16
- package/provider/observable.d.ts +0 -7
- package/provider/provider.d.ts +0 -50
- package/query/common.d.ts +0 -2
- package/query/executor.d.ts +0 -30
- package/query/filter.d.ts +0 -118
- package/query/grouper.d.ts +0 -17
- package/query/index.d.ts +0 -8
- package/query/path.d.ts +0 -2
- package/query/query-property.d.ts +0 -25
- package/query/query.d.ts +0 -31
- package/query/slice.d.ts +0 -32
- package/query/slimer.d.ts +0 -28
- package/query/sorter.d.ts +0 -55
- package/source/index.d.ts +0 -2
- package/source/proxy.directive.d.ts +0 -92
- package/source/source.d.ts +0 -32
- package/store/collection-store.d.ts +0 -49
- package/store/index.d.ts +0 -2
- package/store/memory-store.d.ts +0 -16
package/provider/index.d.ts
DELETED
package/provider/local.d.ts
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { Observable } from "rxjs";
|
|
2
|
-
import { Model, ModelMeta, ModelMetaInput, ModelRefNorm } from "../model";
|
|
3
|
-
import { QueryExecutor, QueryResult, QueryWithSlice, Slice } from "../query";
|
|
4
|
-
import { DataProvider } from "./provider";
|
|
5
|
-
export declare abstract class LocalProvider<T extends Model> extends DataProvider<T> {
|
|
6
|
-
#private;
|
|
7
|
-
readonly isAsync = false;
|
|
8
|
-
readonly meta: ModelMeta<T>;
|
|
9
|
-
abstract readonly items$: Observable<readonly T[]>;
|
|
10
|
-
constructor(meta: ModelMetaInput<T>);
|
|
11
|
-
executor(request: QueryWithSlice<T>): QueryExecutor<T>;
|
|
12
|
-
queryList(request: QueryWithSlice<T>): Observable<QueryResult<T>>;
|
|
13
|
-
queryItem(ref: ModelRefNorm, request?: QueryWithSlice<T>): Observable<T | undefined>;
|
|
14
|
-
queryPosition(ref: ModelRefNorm, request: QueryWithSlice<T>): Observable<number | undefined>;
|
|
15
|
-
clampSlice(slice: Slice): Observable<Slice>;
|
|
16
|
-
}
|
package/provider/observable.d.ts
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { type Observable } from "rxjs";
|
|
2
|
-
import type { Model, ModelMetaInput } from "../model";
|
|
3
|
-
import { LocalProvider } from "./local";
|
|
4
|
-
export declare class ObservableProvider<T extends Model> extends LocalProvider<T> {
|
|
5
|
-
readonly items$: Observable<readonly T[]>;
|
|
6
|
-
constructor(meta: ModelMetaInput<T>, src: Observable<readonly T[]>);
|
|
7
|
-
}
|
package/provider/provider.d.ts
DELETED
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import type { Observable } from "rxjs";
|
|
2
|
-
import type { Model, ModelMeta, ModelRefNorm } from "../model";
|
|
3
|
-
import { type FilterNormalized, type QueryResult, type QueryWithSlice, type Slice, type SorterNormalized } from "../query";
|
|
4
|
-
import { type GrouperNormalized } from "../query/grouper";
|
|
5
|
-
import { type SlimerNormalized } from "../query/slimer";
|
|
6
|
-
import { DataSource } from "../source";
|
|
7
|
-
import type { CollectionStore } from "../store";
|
|
8
|
-
export declare abstract class DataProvider<T extends Model> {
|
|
9
|
-
/**
|
|
10
|
-
* `true` when the provider is making async requests
|
|
11
|
-
*/
|
|
12
|
-
abstract readonly isAsync: boolean;
|
|
13
|
-
/**
|
|
14
|
-
* Metadata of model
|
|
15
|
-
*/
|
|
16
|
-
abstract readonly meta: ModelMeta<T>;
|
|
17
|
-
/**
|
|
18
|
-
* Emit event when data is changed
|
|
19
|
-
*/
|
|
20
|
-
get changed$(): Observable<any>;
|
|
21
|
-
protected _changed: Observable<any>;
|
|
22
|
-
/**
|
|
23
|
-
* Query items by the given request
|
|
24
|
-
*/
|
|
25
|
-
abstract queryList(request: QueryWithSlice<T>): Observable<QueryResult<T>>;
|
|
26
|
-
/**
|
|
27
|
-
* Query exactly one item by the given request
|
|
28
|
-
*/
|
|
29
|
-
abstract queryItem(ref: ModelRefNorm, request?: QueryWithSlice<T>): Observable<T | undefined>;
|
|
30
|
-
/**
|
|
31
|
-
* Query item position in the list that matching by the given request
|
|
32
|
-
*/
|
|
33
|
-
abstract queryPosition(ref: ModelRefNorm, request: QueryWithSlice<T>): Observable<number | undefined>;
|
|
34
|
-
/**
|
|
35
|
-
* Froce Slice boundaries, useful in array, or obeservable providers
|
|
36
|
-
*/
|
|
37
|
-
clampSlice(slice: Slice): Observable<Slice>;
|
|
38
|
-
filterNormalize(filter: any): FilterNormalized | undefined;
|
|
39
|
-
filterMerge(...filters: any[]): FilterNormalized | undefined;
|
|
40
|
-
sorterNormalize(sorter: any): SorterNormalized;
|
|
41
|
-
sorterMerge(...sorters: any[]): SorterNormalized | undefined;
|
|
42
|
-
grouperNormalize(grouper: any): GrouperNormalized;
|
|
43
|
-
grouperMerge(...groupers: any[]): GrouperNormalized | undefined;
|
|
44
|
-
slimerNormalize(slimer: any): SlimerNormalized;
|
|
45
|
-
slimerMerge(...slimers: any[]): SlimerNormalized | undefined;
|
|
46
|
-
/**
|
|
47
|
-
* @returns New data source instance
|
|
48
|
-
*/
|
|
49
|
-
toDataSource(store?: CollectionStore<T>): DataSource<T>;
|
|
50
|
-
}
|
package/query/common.d.ts
DELETED
package/query/executor.d.ts
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { Primitive } from "utility-types";
|
|
2
|
-
import { Model } from "../model";
|
|
3
|
-
import { QueryResult, QueryWithSlice } from "./query";
|
|
4
|
-
declare const INPUT: unique symbol;
|
|
5
|
-
interface PartialExecutor {
|
|
6
|
-
[INPUT]: any;
|
|
7
|
-
}
|
|
8
|
-
export interface QueryExecutors<T extends Model> {
|
|
9
|
-
readonly filterFn?: FilterExecutor<T>;
|
|
10
|
-
readonly sorterFn?: SorterExecutor<T>;
|
|
11
|
-
readonly grouperFn?: GrouperExecutor<T>;
|
|
12
|
-
readonly slicerFn?: SliceExecutor<T>;
|
|
13
|
-
}
|
|
14
|
-
export interface QueryExecutor<T extends Model> extends QueryExecutors<T> {
|
|
15
|
-
(items: readonly T[]): QueryResult<T>;
|
|
16
|
-
}
|
|
17
|
-
export declare function queryExecutor<T extends Model>(query: QueryWithSlice<T>, previous?: QueryExecutor<T>): QueryExecutor<T>;
|
|
18
|
-
interface FilterExecutor<T extends Model> extends PartialExecutor {
|
|
19
|
-
(item: T): boolean;
|
|
20
|
-
}
|
|
21
|
-
interface SorterExecutor<T extends Model> extends PartialExecutor {
|
|
22
|
-
(a: T, b: T): number;
|
|
23
|
-
}
|
|
24
|
-
interface GrouperExecutor<T extends Model> extends PartialExecutor {
|
|
25
|
-
(item: T): Primitive;
|
|
26
|
-
}
|
|
27
|
-
interface SliceExecutor<T extends Model> extends PartialExecutor {
|
|
28
|
-
(items: readonly T[]): T[];
|
|
29
|
-
}
|
|
30
|
-
export {};
|
package/query/filter.d.ts
DELETED
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
import { AsPrimitive, MaxRecursion } from "@ngutil/common";
|
|
2
|
-
import { Model } from "../model";
|
|
3
|
-
import { QueryProperty, QueryPropertySet } from "./query-property";
|
|
4
|
-
export declare enum FilterOp {
|
|
5
|
-
Eq = "==",
|
|
6
|
-
EqStrict = "===",
|
|
7
|
-
EqInsesitive = "==*",
|
|
8
|
-
Neq = "!=",
|
|
9
|
-
NeqStrict = "!==",
|
|
10
|
-
NeqInsesitive = "!=*",
|
|
11
|
-
Gt = ">",
|
|
12
|
-
GtInsesitive = ">*",
|
|
13
|
-
Gte = ">=",
|
|
14
|
-
GteInsesitive = ">=*",
|
|
15
|
-
Lt = "<",
|
|
16
|
-
LtInsesitive = "<*",
|
|
17
|
-
Lte = "<=",
|
|
18
|
-
LteInsesitive = "<=*",
|
|
19
|
-
Contains = "%",
|
|
20
|
-
ContainsInsesitive = "%*",
|
|
21
|
-
StartsWith = "^",
|
|
22
|
-
StartsWithInsesitive = "^*",
|
|
23
|
-
EndsWith = "$",
|
|
24
|
-
EndsWithInsesitive = "$*",
|
|
25
|
-
Similarity = "**",
|
|
26
|
-
Regexp = "~",
|
|
27
|
-
RegexpInsesitive = "~*",
|
|
28
|
-
Or = "|",
|
|
29
|
-
And = "&",
|
|
30
|
-
Not = "!"
|
|
31
|
-
}
|
|
32
|
-
export declare const OPERATORS: Array<string>;
|
|
33
|
-
export type FilterCustom<T = any> = {
|
|
34
|
-
custom: string;
|
|
35
|
-
matcher?: FilterCustomMatcher<T>;
|
|
36
|
-
};
|
|
37
|
-
export type FilterCustomMatcher<T = any> = (item: T | null | undefined, value: any) => boolean;
|
|
38
|
-
export type FilterOpMap = Record<string, FilterOp | FilterCustom>;
|
|
39
|
-
export declare function asOperators(value: any): Array<{
|
|
40
|
-
op: FilterOp;
|
|
41
|
-
value: any;
|
|
42
|
-
}>;
|
|
43
|
-
export type Filter<T extends Model> = {
|
|
44
|
-
[key: string]: any;
|
|
45
|
-
};
|
|
46
|
-
export type Operators<T, P extends number[], D extends number = MaxRecursion> = P["length"] extends D ? never : SimpleOperators<T>;
|
|
47
|
-
type SimpleOperators<T> = EqStrict<T> | NeqStrict<T> | Eq<T> | Neq<T> | Gt<T> | Gte<T> | Lt<T> | Lte<T> | Contains<T> | StartsWith<T> | Similarity<T> | EndsWith<T> | Regexp<T> | T | undefined | null;
|
|
48
|
-
type EqStrict<T> = Operator<T, T, FilterOp.EqStrict, never, null>;
|
|
49
|
-
type NeqStrict<T> = Operator<T, T, FilterOp.NeqStrict, never, null>;
|
|
50
|
-
type Eq<T> = Operator<T, T | AsPrimitive<T>, FilterOp.Eq, FilterOp.EqInsesitive, null>;
|
|
51
|
-
type Neq<T> = Operator<T, T | AsPrimitive<T>, FilterOp.Neq, FilterOp.NeqInsesitive, null>;
|
|
52
|
-
type Gt<T> = Operator<T, T | AsPrimitive<T>, FilterOp.Gt, FilterOp.GtInsesitive>;
|
|
53
|
-
type Gte<T> = Operator<T, T | AsPrimitive<T>, FilterOp.Gte, FilterOp.GteInsesitive>;
|
|
54
|
-
type Lt<T> = Operator<T, T | AsPrimitive<T>, FilterOp.Lt, FilterOp.LtInsesitive>;
|
|
55
|
-
type Lte<T> = Operator<T, T | AsPrimitive<T>, FilterOp.Lte, FilterOp.LteInsesitive>;
|
|
56
|
-
type Contains<T> = Operator<T, string, FilterOp.Contains, FilterOp.ContainsInsesitive>;
|
|
57
|
-
type StartsWith<T> = Operator<T, string, FilterOp.StartsWith, FilterOp.StartsWithInsesitive>;
|
|
58
|
-
type Similarity<T> = Operator<T, string, FilterOp.Similarity, never, null>;
|
|
59
|
-
type EndsWith<T> = Operator<T, string, FilterOp.EndsWith, FilterOp.EndsWithInsesitive>;
|
|
60
|
-
type Regexp<T> = Operator<T, string, FilterOp.Regexp, FilterOp.RegexpInsesitive, RegExp>;
|
|
61
|
-
type Operator<T, R, OP extends string, OPI extends string = never, ET = never> = (T extends R ? {
|
|
62
|
-
[k in OP]: T | ET | R;
|
|
63
|
-
} : never) | (T extends string ? (OPI extends never ? never : {
|
|
64
|
-
[k in OPI]: string;
|
|
65
|
-
}) : never);
|
|
66
|
-
export type FilterFn<T = any> = (item: T) => boolean;
|
|
67
|
-
/**
|
|
68
|
-
* @example
|
|
69
|
-
* ```ts
|
|
70
|
-
* items.filter(filterBy({id: 42}))
|
|
71
|
-
* ```
|
|
72
|
-
*/
|
|
73
|
-
export declare function filterBy<T extends Model>(filters: Filter<T>, opmap?: FilterOpMap): FilterFn<T>;
|
|
74
|
-
type NormPath = {
|
|
75
|
-
path: string;
|
|
76
|
-
op: Exclude<FilterOp, FilterOp.Or | FilterOp.And | FilterOp.Not>;
|
|
77
|
-
value: any;
|
|
78
|
-
};
|
|
79
|
-
type NormOr = {
|
|
80
|
-
op: FilterOp.Or;
|
|
81
|
-
value: Array<NormEntry>;
|
|
82
|
-
};
|
|
83
|
-
type NormAnd = {
|
|
84
|
-
op: FilterOp.And;
|
|
85
|
-
value: Array<NormEntry>;
|
|
86
|
-
};
|
|
87
|
-
type NormNot = {
|
|
88
|
-
op: FilterOp.Not;
|
|
89
|
-
value: Array<NormEntry>;
|
|
90
|
-
};
|
|
91
|
-
type NormCustom = {
|
|
92
|
-
path: string;
|
|
93
|
-
op: FilterCustom;
|
|
94
|
-
value: any;
|
|
95
|
-
};
|
|
96
|
-
type NormEmpty = Record<string, never>;
|
|
97
|
-
type NormEntry = NormPath | NormOr | NormAnd | NormNot | NormCustom | NormEmpty;
|
|
98
|
-
export type FilterNormalized = NormEntry;
|
|
99
|
-
/**
|
|
100
|
-
* @example
|
|
101
|
-
* ```ts
|
|
102
|
-
* filterNormalize({id: {">": 0, "<": 10}})
|
|
103
|
-
* {op: "&", value: [{path: "id", op: ">", value: 0}, {path: "id", op: "<", value: 10}]}
|
|
104
|
-
* ```
|
|
105
|
-
*/
|
|
106
|
-
export declare function filterNormalize<T extends Model>(filters: Filter<T> | null | undefined, opmap?: FilterOpMap): FilterNormalized | undefined;
|
|
107
|
-
export declare function filterIsNormnalized(filters: any): filters is FilterNormalized;
|
|
108
|
-
export declare function filterMerge(...filters: Array<FilterNormalized | null | undefined>): any | undefined;
|
|
109
|
-
export declare class FilterProperty<T extends Model> extends QueryProperty<Filter<T>, FilterNormalized> {
|
|
110
|
-
protected merge(a?: FilterNormalized | undefined, b?: FilterNormalized | undefined): FilterNormalized | undefined;
|
|
111
|
-
protected norm(a: FilterNormalized | Filter<T>): FilterNormalized | undefined;
|
|
112
|
-
}
|
|
113
|
-
export declare class FilterPropertySet<T extends Model> extends QueryPropertySet<Filter<T>> {
|
|
114
|
-
protected newProperty(): FilterProperty<Model>;
|
|
115
|
-
protected merge(...args: any[]): NormEntry | undefined;
|
|
116
|
-
}
|
|
117
|
-
export declare function filterSimplify(filters: any): object | null;
|
|
118
|
-
export {};
|
package/query/grouper.d.ts
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { Flatten, Primitive } from "@ngutil/common";
|
|
2
|
-
import { Model } from "../model";
|
|
3
|
-
import { QueryProperty, QueryPropertySet } from "./query-property";
|
|
4
|
-
export type GrouperFn<T = any> = (item: any) => Primitive;
|
|
5
|
-
export type Grouper<T extends Model, F = Flatten<T>> = any;
|
|
6
|
-
export type GrouperNormalized = any;
|
|
7
|
-
export declare function groupBy<T extends Model, F = Flatten<T>>(grouper: Grouper<T, F>): GrouperFn<T>;
|
|
8
|
-
export declare function grouperMerge<T extends Model, F = Flatten<T>>(...groupers: Array<Grouper<T, F> | undefined | null>): Grouper<T, F> | undefined;
|
|
9
|
-
export declare function grouperNormalize<T extends Model>(grouper: Grouper<T>): GrouperNormalized;
|
|
10
|
-
export declare class GrouperProperty<T extends Model> extends QueryProperty<Grouper<T>, GrouperNormalized> {
|
|
11
|
-
protected norm(a: any): any;
|
|
12
|
-
protected merge(a?: any, b?: any): any;
|
|
13
|
-
}
|
|
14
|
-
export declare class GrouperPropertySet<T extends Model> extends QueryPropertySet<Grouper<T>> {
|
|
15
|
-
protected newProperty(): GrouperProperty<Model>;
|
|
16
|
-
protected merge(...args: any[]): any;
|
|
17
|
-
}
|
package/query/index.d.ts
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
export { Filter, FilterNormalized, filterBy, filterMerge, filterNormalize, filterIsNormnalized, FilterOp, FilterOpMap, FilterCustom, FilterCustomMatcher, filterSimplify } from "./filter";
|
|
2
|
-
export { Grouper, groupBy, grouperMerge } from "./grouper";
|
|
3
|
-
export { Sorter, SorterNormalized, sortBy, sorterMerge, sorterNormalize, SortDir, SortDirection, SortDirExtra } from "./sorter";
|
|
4
|
-
export { Slimer, slimBy, slimerMerge } from "./slimer";
|
|
5
|
-
export { Slice, sliceMerge, sliceApply, sliceInsert, sliceToPages, sliceClamp, sliceEq } from "./slice";
|
|
6
|
-
export { pathGetterCompile } from "./path";
|
|
7
|
-
export { Query, QueryWithSlice, QueryResult, querySubject, QuerySubject } from "./query";
|
|
8
|
-
export { queryExecutor, QueryExecutor } from "./executor";
|
package/query/path.d.ts
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { BehaviorSubject, Observable } from "rxjs";
|
|
2
|
-
import type { DataProvider } from "../provider";
|
|
3
|
-
export declare abstract class QueryProperty<I, O> extends BehaviorSubject<O | undefined> {
|
|
4
|
-
#private;
|
|
5
|
-
protected readonly provider: DataProvider<any>;
|
|
6
|
-
constructor(provider: DataProvider<any>);
|
|
7
|
-
set(value?: I | O): void;
|
|
8
|
-
update(value?: I | O): void;
|
|
9
|
-
del(): void;
|
|
10
|
-
/**
|
|
11
|
-
* Merge values and emit when changed (dont change original values)
|
|
12
|
-
*/
|
|
13
|
-
protected abstract merge(a?: O, b?: O): O | undefined;
|
|
14
|
-
protected abstract norm(a: I | O): O | undefined;
|
|
15
|
-
}
|
|
16
|
-
export declare abstract class QueryPropertySet<O> extends Observable<O> {
|
|
17
|
-
#private;
|
|
18
|
-
protected readonly provider: DataProvider<any>;
|
|
19
|
-
constructor(provider: DataProvider<any>, ...names: string[]);
|
|
20
|
-
protected abstract newProperty(): QueryProperty<any, any>;
|
|
21
|
-
protected abstract merge(...args: any[]): any | undefined;
|
|
22
|
-
}
|
|
23
|
-
export type QueryPropertySetOf<T, P, N extends string[]> = T & {
|
|
24
|
-
[K in N[number]]: P;
|
|
25
|
-
};
|
package/query/query.d.ts
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { Observable } from "rxjs";
|
|
2
|
-
import { type DeepReadonly } from "@ngutil/common";
|
|
3
|
-
import { type Model } from "../model";
|
|
4
|
-
import type { DataProvider } from "../provider";
|
|
5
|
-
import { type FilterNormalized, FilterProperty, FilterPropertySet } from "./filter";
|
|
6
|
-
import { type GrouperNormalized, GrouperProperty, GrouperPropertySet } from "./grouper";
|
|
7
|
-
import { type QueryPropertySetOf } from "./query-property";
|
|
8
|
-
import { type Slice } from "./slice";
|
|
9
|
-
import { type SlimerNormalized, SlimerProperty, SlimerPropertySet } from "./slimer";
|
|
10
|
-
import { type SorterNormalized, SorterProperty, SorterPropertySet } from "./sorter";
|
|
11
|
-
export interface Query {
|
|
12
|
-
filter?: DeepReadonly<FilterNormalized>;
|
|
13
|
-
sorter?: DeepReadonly<SorterNormalized>;
|
|
14
|
-
slimer?: DeepReadonly<SlimerNormalized>;
|
|
15
|
-
grouper?: DeepReadonly<GrouperNormalized>;
|
|
16
|
-
}
|
|
17
|
-
export interface QueryWithSlice<T extends Model> extends Query {
|
|
18
|
-
slice: DeepReadonly<Slice>;
|
|
19
|
-
}
|
|
20
|
-
export interface QueryResult<T extends Model> {
|
|
21
|
-
items: readonly T[];
|
|
22
|
-
total?: number;
|
|
23
|
-
groups?: any[];
|
|
24
|
-
}
|
|
25
|
-
export interface QuerySubject<T extends Model, N extends string[]> extends Observable<Query> {
|
|
26
|
-
readonly filter: QueryPropertySetOf<FilterPropertySet<T>, FilterProperty<T>, N>;
|
|
27
|
-
readonly sorter: QueryPropertySetOf<SorterPropertySet, SorterProperty<T>, N>;
|
|
28
|
-
readonly slimer: QueryPropertySetOf<SlimerPropertySet<T>, SlimerProperty<T>, N>;
|
|
29
|
-
readonly grouper: QueryPropertySetOf<GrouperPropertySet<T>, GrouperProperty<T>, N>;
|
|
30
|
-
}
|
|
31
|
-
export declare function querySubject<T extends Model, N extends string[]>(provider: DataProvider<T>, ...names: N): QuerySubject<T, N>;
|
package/query/slice.d.ts
DELETED
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import { ListRange } from "@angular/cdk/collections";
|
|
2
|
-
/**
|
|
3
|
-
* @example
|
|
4
|
-
* ```ts
|
|
5
|
-
* {start: 0, end: 0} // empty range
|
|
6
|
-
* {start: 0, end: 1} // range with one item.eg sliceApply([1, 2, 3], {start:0, end:1}) -> [1]
|
|
7
|
-
* ```
|
|
8
|
-
*/
|
|
9
|
-
export interface Slice extends ListRange {
|
|
10
|
-
/**
|
|
11
|
-
* Start of slice, exact index of item in list
|
|
12
|
-
*/
|
|
13
|
-
readonly start: number;
|
|
14
|
-
/**
|
|
15
|
-
* End of slice, not include end index of item in list
|
|
16
|
-
*/
|
|
17
|
-
readonly end: number;
|
|
18
|
-
readonly pageSize?: number;
|
|
19
|
-
}
|
|
20
|
-
export declare function sliceMerge(...slices: Slice[]): Slice | undefined;
|
|
21
|
-
/**
|
|
22
|
-
* Apply slice to array, and force the result length to equal with Slice length,
|
|
23
|
-
* so fill array with undefined if not enought elements
|
|
24
|
-
*/
|
|
25
|
-
export declare function sliceApply(slice: Slice, array: readonly any[]): any[];
|
|
26
|
-
/**
|
|
27
|
-
* @returns Page numbers, eg.: `[10, 11, 12, 13, ...]`
|
|
28
|
-
*/
|
|
29
|
-
export declare function sliceToPages(slice: Slice): number[];
|
|
30
|
-
export declare function sliceInsert(slice: Slice, array: readonly any[], newItems: readonly any[]): any[];
|
|
31
|
-
export declare function sliceClamp(slice: Slice, constraint: Slice): Slice;
|
|
32
|
-
export declare function sliceEq(a: Slice, b: Slice): boolean;
|
package/query/slimer.d.ts
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { Model } from "../model";
|
|
2
|
-
import { QueryProperty, QueryPropertySet } from "./query-property";
|
|
3
|
-
/**
|
|
4
|
-
* @exmaple
|
|
5
|
-
* ```ts
|
|
6
|
-
* [
|
|
7
|
-
* "field_name",
|
|
8
|
-
* {"child_name": ["child_field_name"]},
|
|
9
|
-
* {"children": ["children_field_name", {"$type": Article, slimer: ["id", "title"]}]},
|
|
10
|
-
* {"$type": Employee, slimer: ["name"]}.
|
|
11
|
-
* {"$filter": Filter<T, F>}
|
|
12
|
-
* ]
|
|
13
|
-
* ```
|
|
14
|
-
*/
|
|
15
|
-
export type Slimer<T extends Model> = any;
|
|
16
|
-
export type SlimerNormalized = any;
|
|
17
|
-
export type SlimerFn<T> = (item: T) => T;
|
|
18
|
-
export declare function slimBy<T extends Model>(slimer: Slimer<T>): void;
|
|
19
|
-
export declare function slimerNormalize<T extends Model>(slimer: Slimer<T>): SlimerNormalized;
|
|
20
|
-
export declare function slimerMerge<T extends Model>(...slimers: Slimer<T>): any;
|
|
21
|
-
export declare class SlimerProperty<T extends Model> extends QueryProperty<Slimer<T>, SlimerNormalized> {
|
|
22
|
-
protected norm(a: any): any;
|
|
23
|
-
protected merge(a?: any, b?: any): any;
|
|
24
|
-
}
|
|
25
|
-
export declare class SlimerPropertySet<T extends Model> extends QueryPropertySet<Slimer<T>> {
|
|
26
|
-
protected newProperty(): SlimerProperty<Model>;
|
|
27
|
-
protected merge(...args: any[]): any;
|
|
28
|
-
}
|
package/query/sorter.d.ts
DELETED
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import { Observable } from "rxjs";
|
|
2
|
-
import { Model } from "../model";
|
|
3
|
-
import { QueryProperty, QueryPropertySet } from "./query-property";
|
|
4
|
-
export type SorterFn<T = any> = (a: T, b: T) => number;
|
|
5
|
-
export declare const enum SortDirection {
|
|
6
|
-
Asc = "asc",
|
|
7
|
-
Desc = "desc"
|
|
8
|
-
}
|
|
9
|
-
export type SortDir = SortDirection.Asc | SortDirection.Desc | "asc" | "desc";
|
|
10
|
-
export type SortDirExtra = {
|
|
11
|
-
dir: SortDir;
|
|
12
|
-
emptyFirst: boolean;
|
|
13
|
-
};
|
|
14
|
-
export type Sorter<T extends Model> = Array<{
|
|
15
|
-
[key: string]: SortDir | SortDirExtra | NormalizedEntry | undefined;
|
|
16
|
-
}>;
|
|
17
|
-
type NormalizedEntry = {
|
|
18
|
-
path: string;
|
|
19
|
-
isAsc: boolean;
|
|
20
|
-
emptyFirst: boolean;
|
|
21
|
-
remove?: boolean;
|
|
22
|
-
};
|
|
23
|
-
export type SorterNormalized = Array<NormalizedEntry>;
|
|
24
|
-
/**
|
|
25
|
-
* @example
|
|
26
|
-
*```ts
|
|
27
|
-
* items.toSorted(sortBy([{"author.name": "asc"}]))
|
|
28
|
-
* ```
|
|
29
|
-
*/
|
|
30
|
-
export declare function sortBy<T extends Model>(sorters: Sorter<T> | SorterNormalized): SorterFn<T>;
|
|
31
|
-
/**
|
|
32
|
-
* Normalize sorter definition
|
|
33
|
-
*
|
|
34
|
-
* @example
|
|
35
|
-
* ```ts
|
|
36
|
-
* normalizeSorter([{id: "asc"}]) -> [{path: "id", isAsc: true, emptyFirst: true}]
|
|
37
|
-
* normalizeSorter([{id: {dir: "desc", emptyFirst: false}}]) -> [{path: "id", isAsc: false, emptyFirst: false}]
|
|
38
|
-
* ```
|
|
39
|
-
*/
|
|
40
|
-
export declare function sorterNormalize<T extends Model>(sorters: Sorter<T> | SorterNormalized): SorterNormalized;
|
|
41
|
-
export declare function sorterIsNormalized(sorter: any): sorter is SorterNormalized;
|
|
42
|
-
export declare function compare(a: any, b: any, emptyFirst: boolean): number;
|
|
43
|
-
export declare function sorterMerge(...sorters: (SorterNormalized | undefined | null)[]): SorterNormalized | undefined;
|
|
44
|
-
export declare class SorterProperty<T extends Model> extends QueryProperty<Sorter<T>, SorterNormalized> {
|
|
45
|
-
protected norm(a: Sorter<T>): SorterNormalized | undefined;
|
|
46
|
-
protected merge(a?: SorterNormalized, b?: SorterNormalized): SorterNormalized | undefined;
|
|
47
|
-
}
|
|
48
|
-
export declare class SorterPropertySet extends QueryPropertySet<SorterNormalized> {
|
|
49
|
-
of(name: string): Observable<NormalizedEntry | undefined>;
|
|
50
|
-
isAsc(name: string): Observable<boolean | undefined>;
|
|
51
|
-
isDesc(name: string): Observable<boolean | undefined>;
|
|
52
|
-
protected newProperty(): SorterProperty<Model>;
|
|
53
|
-
protected merge(...args: any[]): SorterNormalized | undefined;
|
|
54
|
-
}
|
|
55
|
-
export {};
|
package/source/index.d.ts
DELETED
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
import { DataSource as CdkDataSource, CollectionViewer } from "@angular/cdk/collections";
|
|
2
|
-
import { OnDestroy } from "@angular/core";
|
|
3
|
-
import { Observable } from "rxjs";
|
|
4
|
-
import { ConnectProtocol } from "@ngutil/common";
|
|
5
|
-
import { Model } from "../model";
|
|
6
|
-
import { DataProvider } from "../provider/provider";
|
|
7
|
-
import { Filter, Grouper, Slimer, Sorter } from "../query";
|
|
8
|
-
import { DataSource } from "./source";
|
|
9
|
-
import * as i0 from "@angular/core";
|
|
10
|
-
export type DataSourceProxyInput<T extends Model> = DataSourceProxy<T> | DataSource<T> | DataProvider<T>;
|
|
11
|
-
/**
|
|
12
|
-
* @example
|
|
13
|
-
* ```html
|
|
14
|
-
* <table [nuDataSource]="..." [filter]="{isActive: true}" [sorter]="[{name: 'asc'}]"></table>
|
|
15
|
-
* ```
|
|
16
|
-
*
|
|
17
|
-
* ```ts
|
|
18
|
-
* @Component({
|
|
19
|
-
* template: `<table [nuDataSource]="users$"></table>`
|
|
20
|
-
* })
|
|
21
|
-
* class UserTable {
|
|
22
|
-
* readonly userService = inject(UserService)
|
|
23
|
-
* readonly users$ = UserService.all()
|
|
24
|
-
* }
|
|
25
|
-
* ```
|
|
26
|
-
*
|
|
27
|
-
* ```ts
|
|
28
|
-
* @Component({
|
|
29
|
-
* selector: "table.my-table",
|
|
30
|
-
* template: `
|
|
31
|
-
* <cdk-virtual-scroll-viewport itemSize="50" class="example-viewport">
|
|
32
|
-
* <div *cdkVirtualFor="let item of dataSource" class="example-item">{{item}}</div>
|
|
33
|
-
* </cdk-virtual-scroll-viewport>
|
|
34
|
-
* `
|
|
35
|
-
* })
|
|
36
|
-
* class TableComponent {
|
|
37
|
-
* readonly dataSource = inject(DataSourceProxy)
|
|
38
|
-
* }
|
|
39
|
-
* ```
|
|
40
|
-
*/
|
|
41
|
-
export declare class DataSourceProxy<T extends Model> extends CdkDataSource<T | undefined> implements OnDestroy, ConnectProtocol {
|
|
42
|
-
#private;
|
|
43
|
-
set value(value: DataSourceProxyInput<T>);
|
|
44
|
-
readonly value$: Observable<DataSource<T>>;
|
|
45
|
-
readonly query$: Observable<import("../query").QuerySubject<T, ["normal", "forced"]>>;
|
|
46
|
-
readonly items$: Observable<import("@ngutil/data").PartialCollection<T>>;
|
|
47
|
-
readonly isBusy$: Observable<boolean>;
|
|
48
|
-
readonly isEmpty$: Observable<boolean>;
|
|
49
|
-
connect(collectionViewer: CollectionViewer): Observable<readonly (T | undefined)[]>;
|
|
50
|
-
disconnect(collectionViewer: CollectionViewer): void;
|
|
51
|
-
ngOnDestroy(): void;
|
|
52
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<DataSourceProxy<any>, never>;
|
|
53
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<DataSourceProxy<any>, "[nuDataSource]", ["nuDataSource"], { "value": { "alias": "nuDataSource"; "required": true; }; }, {}, never, never, true, never>;
|
|
54
|
-
}
|
|
55
|
-
export declare class DataSourceProxyFilter<T extends Model, F extends Filter<T>> {
|
|
56
|
-
#private;
|
|
57
|
-
readonly filter: import("@angular/core").InputSignal<F>;
|
|
58
|
-
readonly filter$: Observable<F>;
|
|
59
|
-
constructor();
|
|
60
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<DataSourceProxyFilter<any, any>, never>;
|
|
61
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<DataSourceProxyFilter<any, any>, "[nuDataSource][filter]", never, { "filter": { "alias": "filter"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
62
|
-
}
|
|
63
|
-
export declare class DataSourceProxySorter<T extends Model, S extends Sorter<T>> {
|
|
64
|
-
#private;
|
|
65
|
-
readonly sorter: import("@angular/core").InputSignal<S>;
|
|
66
|
-
readonly sorter$: Observable<S>;
|
|
67
|
-
constructor();
|
|
68
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<DataSourceProxySorter<any, any>, never>;
|
|
69
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<DataSourceProxySorter<any, any>, "[nuDataSource][sorter]", never, { "sorter": { "alias": "sorter"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
70
|
-
}
|
|
71
|
-
export declare class DataSourceProxySlimer<T extends Model, S extends Slimer<T>> {
|
|
72
|
-
#private;
|
|
73
|
-
readonly slimer: import("@angular/core").InputSignal<S>;
|
|
74
|
-
readonly slimer$: Observable<S>;
|
|
75
|
-
constructor();
|
|
76
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<DataSourceProxySlimer<any, any>, never>;
|
|
77
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<DataSourceProxySlimer<any, any>, "[nuDataSource][slimer]", never, { "slimer": { "alias": "slimer"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
78
|
-
}
|
|
79
|
-
export declare class DataSourceProxyGrouper<T extends Model, G extends Grouper<T>> {
|
|
80
|
-
#private;
|
|
81
|
-
readonly grouper: import("@angular/core").InputSignal<G>;
|
|
82
|
-
readonly grouper$: Observable<G>;
|
|
83
|
-
constructor();
|
|
84
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<DataSourceProxyGrouper<any, any>, never>;
|
|
85
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<DataSourceProxyGrouper<any, any>, "[nuDataSource][grouper]", never, { "grouper": { "alias": "grouper"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
86
|
-
}
|
|
87
|
-
export declare class DataSourceProxyBusy {
|
|
88
|
-
#private;
|
|
89
|
-
constructor();
|
|
90
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<DataSourceProxyBusy, never>;
|
|
91
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<DataSourceProxyBusy, "[nuDataSource][nuBusy]", never, {}, {}, never, never, true, never>;
|
|
92
|
-
}
|
package/source/source.d.ts
DELETED
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import { DataSource as CdkDataSource, CollectionViewer } from "@angular/cdk/collections";
|
|
2
|
-
import { BehaviorSubject, Observable } from "rxjs";
|
|
3
|
-
import { ConnectProtocol } from "@ngutil/common";
|
|
4
|
-
import type { Model, ModelRef } from "../model";
|
|
5
|
-
import type { DataProvider } from "../provider/provider";
|
|
6
|
-
import type { Filter, Slice } from "../query";
|
|
7
|
-
import { type CollectionStore, type PartialCollection } from "../store";
|
|
8
|
-
export declare class DataSource<T extends Model> extends CdkDataSource<T | undefined> implements ConnectProtocol {
|
|
9
|
-
#private;
|
|
10
|
-
readonly provider: DataProvider<T>;
|
|
11
|
-
readonly store: CollectionStore<T>;
|
|
12
|
-
readonly query$: import("../query").QuerySubject<T, ["normal", "forced"]>;
|
|
13
|
-
readonly isBusy$: BehaviorSubject<boolean>;
|
|
14
|
-
readonly total$: BehaviorSubject<number | undefined>;
|
|
15
|
-
readonly slice$: Observable<Slice>;
|
|
16
|
-
readonly reset$: Observable<void>;
|
|
17
|
-
readonly items$: Observable<PartialCollection<T>>;
|
|
18
|
-
readonly isEmpty$: Observable<boolean>;
|
|
19
|
-
constructor(provider: DataProvider<T>, store?: CollectionStore<T>, query$?: import("../query").QuerySubject<T, ["normal", "forced"]>);
|
|
20
|
-
setSlice(slice: Slice): this;
|
|
21
|
-
setFilter(filter: Partial<Record<"normal" | "forced", Filter<T>>>): this;
|
|
22
|
-
updateFilter(filter: Partial<Record<"normal" | "forced", Filter<T>>>): this;
|
|
23
|
-
all(): this;
|
|
24
|
-
reload(): void;
|
|
25
|
-
getItem(ref: ModelRef): Observable<T | undefined>;
|
|
26
|
-
watchItem(ref: ModelRef): Observable<T | undefined>;
|
|
27
|
-
getItemPosition(ref: ModelRef): Observable<number | undefined>;
|
|
28
|
-
watchItemPosition(ref: ModelRef): Observable<number | undefined>;
|
|
29
|
-
realodItem(ref: ModelRef, insertPosition?: number): Observable<T | undefined>;
|
|
30
|
-
connect(collectionViewer: CollectionViewer): Observable<PartialCollection<T>>;
|
|
31
|
-
disconnect(collectionViewer: CollectionViewer): void;
|
|
32
|
-
}
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import { Observable } from "rxjs";
|
|
2
|
-
import { DeepReadonly } from "@ngutil/common";
|
|
3
|
-
import { Model, ModelRefNorm } from "../model";
|
|
4
|
-
import { Slice } from "../query";
|
|
5
|
-
export type PartialCollection<T> = readonly (T | undefined)[];
|
|
6
|
-
export declare abstract class CollectionStore<T extends Model> {
|
|
7
|
-
/**
|
|
8
|
-
* Update the given slice, and return all items observable
|
|
9
|
-
*/
|
|
10
|
-
abstract insertSlice(slice: DeepReadonly<Slice>, items: readonly T[]): Observable<PartialCollection<T>>;
|
|
11
|
-
/**
|
|
12
|
-
* @returns `true` when the given slice is available in the cache
|
|
13
|
-
*/
|
|
14
|
-
abstract hasSlice(slice: DeepReadonly<Slice>): Observable<boolean>;
|
|
15
|
-
/**
|
|
16
|
-
* @returns items by the given slice
|
|
17
|
-
*/
|
|
18
|
-
abstract getSlice(slice: DeepReadonly<Slice>): Observable<PartialCollection<T>>;
|
|
19
|
-
/**
|
|
20
|
-
* Get item from collection
|
|
21
|
-
*/
|
|
22
|
-
abstract get(ref: ModelRefNorm): Observable<T | undefined>;
|
|
23
|
-
/**
|
|
24
|
-
* Get index of item in collection, -1 if not found
|
|
25
|
-
*/
|
|
26
|
-
abstract indexOf(ref: ModelRefNorm): Observable<number>;
|
|
27
|
-
/**
|
|
28
|
-
* Update item in collection
|
|
29
|
-
*
|
|
30
|
-
* @returns the updated index, or -1 if not found
|
|
31
|
-
*/
|
|
32
|
-
abstract update(ref: ModelRefNorm, item: T): Observable<number>;
|
|
33
|
-
/**
|
|
34
|
-
* Update item if exists in collection, or insert at the given position
|
|
35
|
-
*
|
|
36
|
-
* @param position If positon is negative, insert at the end of collection
|
|
37
|
-
* @returns the updated index or index of where to insert
|
|
38
|
-
*/
|
|
39
|
-
abstract updateOrInsert(ref: ModelRefNorm, item: T, position?: number): Observable<number>;
|
|
40
|
-
/**
|
|
41
|
-
* Remove item from collection
|
|
42
|
-
* @returns the index of deleted item, -1 if not found
|
|
43
|
-
*/
|
|
44
|
-
abstract del(ref: ModelRefNorm): Observable<number>;
|
|
45
|
-
/**
|
|
46
|
-
* Removes all items from collection
|
|
47
|
-
*/
|
|
48
|
-
abstract clear(): Observable<void>;
|
|
49
|
-
}
|
package/store/index.d.ts
DELETED
package/store/memory-store.d.ts
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { Observable } from "rxjs";
|
|
2
|
-
import { Model, ModelRefNorm } from "../model";
|
|
3
|
-
import { Slice } from "../query";
|
|
4
|
-
import { CollectionStore, PartialCollection } from "./collection-store";
|
|
5
|
-
export declare class MemoryStore<T extends Model> extends CollectionStore<T> {
|
|
6
|
-
#private;
|
|
7
|
-
insertSlice(slice: Slice, items: readonly T[]): Observable<PartialCollection<T>>;
|
|
8
|
-
hasSlice(slice: Slice): Observable<boolean>;
|
|
9
|
-
getSlice(slice: Slice): Observable<PartialCollection<T>>;
|
|
10
|
-
get(ref: ModelRefNorm): Observable<T | undefined>;
|
|
11
|
-
indexOf(ref: ModelRefNorm): Observable<number>;
|
|
12
|
-
update(ref: ModelRefNorm, item: T): Observable<number>;
|
|
13
|
-
updateOrInsert(ref: ModelRefNorm, item: T, position?: number): Observable<number>;
|
|
14
|
-
del(ref: ModelRefNorm): Observable<number>;
|
|
15
|
-
clear(): Observable<void>;
|
|
16
|
-
}
|