@ngutil/data 0.0.18 → 0.0.19

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.
Files changed (41) hide show
  1. package/esm2022/provider/local.mjs +1 -1
  2. package/esm2022/provider/provider.mjs +1 -1
  3. package/esm2022/query/common.mjs +33 -0
  4. package/esm2022/query/executor.mjs +1 -1
  5. package/esm2022/query/filter.mjs +82 -109
  6. package/esm2022/query/grouper.mjs +19 -1
  7. package/esm2022/query/index.mjs +4 -3
  8. package/esm2022/query/query-property.mjs +28 -61
  9. package/esm2022/query/query.mjs +19 -6
  10. package/esm2022/query/slimer.mjs +18 -1
  11. package/esm2022/query/sorter.mjs +67 -36
  12. package/esm2022/source/proxy.directive.mjs +11 -15
  13. package/esm2022/source/source.mjs +23 -24
  14. package/fesm2022/ngutil-data.mjs +309 -294
  15. package/fesm2022/ngutil-data.mjs.map +1 -1
  16. package/package.json +8 -8
  17. package/provider/local.d.ts +5 -5
  18. package/provider/provider.d.ts +4 -4
  19. package/query/common.d.ts +2 -0
  20. package/query/executor.d.ts +2 -2
  21. package/query/filter.d.ts +32 -0
  22. package/query/grouper.d.ts +11 -0
  23. package/query/index.d.ts +3 -3
  24. package/query/query-property.d.ts +14 -19
  25. package/query/query.d.ts +14 -12
  26. package/query/slimer.d.ts +12 -2
  27. package/query/sorter.d.ts +16 -3
  28. package/source/proxy.directive.d.ts +1 -1
  29. package/source/source.d.ts +7 -14
  30. package/esm2022/source/properties/abstract.mjs +0 -33
  31. package/esm2022/source/properties/filter.mjs +0 -16
  32. package/esm2022/source/properties/grouper.mjs +0 -16
  33. package/esm2022/source/properties/index.mjs +0 -5
  34. package/esm2022/source/properties/slimer.mjs +0 -16
  35. package/esm2022/source/properties/sorter.mjs +0 -43
  36. package/source/properties/abstract.d.ts +0 -17
  37. package/source/properties/filter.d.ts +0 -11
  38. package/source/properties/grouper.d.ts +0 -11
  39. package/source/properties/index.d.ts +0 -4
  40. package/source/properties/slimer.d.ts +0 -11
  41. package/source/properties/sorter.d.ts +0 -20
@@ -1,6 +1,6 @@
1
1
  import { Observable } from "rxjs";
2
2
  import { Model, ModelMeta, ModelMetaInput, ModelRefNorm } from "../model";
3
- import { Query, QueryExecutor, QueryResult, Slice } from "../query";
3
+ import { QueryExecutor, QueryResult, QueryWithSlice, Slice } from "../query";
4
4
  import { DataProvider } from "./provider";
5
5
  export declare abstract class LocalProvider<T extends Model> extends DataProvider<T> {
6
6
  #private;
@@ -8,9 +8,9 @@ export declare abstract class LocalProvider<T extends Model> extends DataProvide
8
8
  readonly meta: ModelMeta<T>;
9
9
  abstract readonly items$: Observable<readonly T[]>;
10
10
  constructor(meta: ModelMetaInput<T>);
11
- executor(request: Query<T>): QueryExecutor<T>;
12
- queryList(request: Query<T>): Observable<QueryResult<T>>;
13
- queryItem(ref: ModelRefNorm, request: Query<T>): Observable<T | undefined>;
14
- queryPosition(ref: ModelRefNorm, request: Query<T>): Observable<number | undefined>;
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
15
  clampSlice(slice: Slice): Observable<Slice>;
16
16
  }
@@ -1,6 +1,6 @@
1
1
  import type { Observable } from "rxjs";
2
2
  import type { Model, ModelMeta, ModelRefNorm } from "../model";
3
- import type { Query, QueryResult, Slice } from "../query";
3
+ import type { QueryResult, QueryWithSlice, Slice } from "../query";
4
4
  import { DataSource } from "../source";
5
5
  import type { CollectionStore } from "../store";
6
6
  export declare abstract class DataProvider<T extends Model> {
@@ -15,15 +15,15 @@ export declare abstract class DataProvider<T extends Model> {
15
15
  /**
16
16
  * Query items by the given request
17
17
  */
18
- abstract queryList(request: Query<T>): Observable<QueryResult<T>>;
18
+ abstract queryList(request: QueryWithSlice<T>): Observable<QueryResult<T>>;
19
19
  /**
20
20
  * Query exactly one item by the given request
21
21
  */
22
- abstract queryItem(ref: ModelRefNorm, request: Query<T>): Observable<T | undefined>;
22
+ abstract queryItem(ref: ModelRefNorm, request: QueryWithSlice<T>): Observable<T | undefined>;
23
23
  /**
24
24
  * Query item position in the list that matching by the given request
25
25
  */
26
- abstract queryPosition(ref: ModelRefNorm, request: Query<T>): Observable<number | undefined>;
26
+ abstract queryPosition(ref: ModelRefNorm, request: QueryWithSlice<T>): Observable<number | undefined>;
27
27
  /**
28
28
  * Froce Slice boundaries, useful in array, or obeservable providers
29
29
  */
@@ -0,0 +1,2 @@
1
+ export declare function readonlyProp(o: unknown, n: string | symbol, v: unknown): void;
2
+ export declare function normalize(obj: any, normalizer: (v: any) => any): any;
@@ -1,6 +1,6 @@
1
1
  import { Primitive } from "utility-types";
2
2
  import { Model } from "../model";
3
- import { Query, QueryResult } from "./query";
3
+ import { QueryResult, QueryWithSlice } from "./query";
4
4
  declare const INPUT: unique symbol;
5
5
  interface PartialExecutor {
6
6
  [INPUT]: any;
@@ -14,7 +14,7 @@ export interface QueryExecutors<T extends Model> {
14
14
  export interface QueryExecutor<T extends Model> extends QueryExecutors<T> {
15
15
  (items: readonly T[]): QueryResult<T>;
16
16
  }
17
- export declare function queryExecutor<T extends Model>(query: Query<T>, previous?: QueryExecutor<T>): QueryExecutor<T>;
17
+ export declare function queryExecutor<T extends Model>(query: QueryWithSlice<T>, previous?: QueryExecutor<T>): QueryExecutor<T>;
18
18
  interface FilterExecutor<T extends Model> extends PartialExecutor {
19
19
  (item: T): boolean;
20
20
  }
package/query/filter.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import { AsPrimitive, MaxRecursion } from "@ngutil/common";
2
2
  import { Model } from "../model";
3
+ import { QueryProperty, QueryPropertySet } from "./query-property";
3
4
  export declare const enum FilterOp {
4
5
  Eq = "==",
5
6
  EqStrict = "===",
@@ -61,5 +62,36 @@ export type FilterFn<T = any> = (item: T) => boolean;
61
62
  * ```
62
63
  */
63
64
  export declare function filterBy<T extends Model>(filters: Filter<T>): FilterFn<T>;
65
+ type NormPath = {
66
+ path: string;
67
+ op: Exclude<FilterOp, FilterOp.Or | FilterOp.And>;
68
+ value: any;
69
+ };
70
+ type NormOr = {
71
+ op: FilterOp.Or;
72
+ value: Array<NormEntry>;
73
+ };
74
+ type NormAnd = {
75
+ op: FilterOp.And;
76
+ value: Array<NormEntry>;
77
+ };
78
+ type NormEntry = NormPath | NormOr | NormAnd;
79
+ export type FilterNormalized = NormEntry;
80
+ /**
81
+ * @example
82
+ * ```ts
83
+ * filterNormalize({id: {">": 0, "<": 10}})
84
+ * {op: "&", value: [{path: "id", op: ">", value: 0}, {path: "id", op: "<", value: 10}]}
85
+ * ```
86
+ */
87
+ export declare function filterNormalize<T extends Model>(filters: Filter<T>): FilterNormalized;
64
88
  export declare function filterMerge(...filters: any[]): any | undefined;
89
+ export declare class FilterProperty<T extends Model> extends QueryProperty<Filter<T>, FilterNormalized> {
90
+ protected merge(a?: FilterNormalized | undefined, b?: FilterNormalized | undefined): FilterNormalized | undefined;
91
+ protected norm(a: FilterNormalized | Filter<T>): FilterNormalized | undefined;
92
+ }
93
+ export declare class FilterPropertySet<T extends Model> extends QueryPropertySet<Filter<T>> {
94
+ protected newProperty(): FilterProperty<Model>;
95
+ protected merge(...args: any[]): any;
96
+ }
65
97
  export {};
@@ -1,6 +1,17 @@
1
1
  import { Flatten, Primitive } from "@ngutil/common";
2
2
  import { Model } from "../model";
3
+ import { QueryProperty, QueryPropertySet } from "./query-property";
3
4
  export type GrouperFn<T = any> = (item: any) => Primitive;
4
5
  export type Grouper<T extends Model, F = Flatten<T>> = any;
6
+ export type GrouperNormalized = any;
5
7
  export declare function groupBy<T extends Model, F = Flatten<T>>(grouper: Grouper<T, F>): GrouperFn<T>;
6
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): typeof grouperNormalize;
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 CHANGED
@@ -1,8 +1,8 @@
1
- export { Filter, filterBy, filterMerge, FilterOp } from "./filter";
1
+ export { Filter, FilterNormalized, filterBy, filterMerge, filterNormalize, FilterOp } from "./filter";
2
2
  export { Grouper, groupBy, grouperMerge } from "./grouper";
3
- export { Sorter, sortBy, sorterMerge, SortDir, SortDirection, SortDirExtra, sorterFind } from "./sorter";
3
+ export { Sorter, SorterNormalized, sortBy, sorterMerge, sorterNormalize, SortDir, SortDirection, SortDirExtra } from "./sorter";
4
4
  export { Slimer, slimBy, slimerMerge } from "./slimer";
5
5
  export { Slice, sliceMerge, sliceApply, sliceInsert, sliceToPages, sliceClamp, sliceEq } from "./slice";
6
6
  export { pathGetterCompile } from "./path";
7
- export { Query, QueryResult } from "./query";
7
+ export { Query, QueryWithSlice, QueryResult, querySubject, QuerySubject } from "./query";
8
8
  export { queryExecutor, QueryExecutor } from "./executor";
@@ -1,26 +1,21 @@
1
1
  import { BehaviorSubject, Observable } from "rxjs";
2
- declare const PROXIED: unique symbol;
3
- export interface IQueryProperty<T> extends Observable<T | undefined> {
4
- set(value?: T): void;
5
- del(): void;
6
- update(value?: T): void;
7
- }
8
- export interface IQueryCombinedProperty<T> extends Observable<T> {
9
- readonly normal: IQueryProperty<T>;
10
- readonly forced: IQueryProperty<T>;
11
- }
12
- export interface IProxied {
13
- [PROXIED]: any;
14
- }
15
- export declare function isProxied(v: any): boolean;
16
- export declare abstract class QueryProperty<T> extends BehaviorSubject<T | undefined> implements IQueryProperty<T> {
2
+ export declare abstract class QueryProperty<I, O> extends BehaviorSubject<O | undefined> {
17
3
  #private;
18
- set(value?: T): void;
4
+ set(value?: I | O): void;
5
+ update(value?: I | O): void;
19
6
  del(): void;
20
- update(value?: T): void;
21
7
  /**
22
8
  * Merge values and emit when changed (dont change original values)
23
9
  */
24
- protected abstract merge(a?: T, b?: T): T | undefined;
10
+ protected abstract merge(a?: O, b?: O): O | undefined;
11
+ protected abstract norm(a: I | O): O | undefined;
12
+ }
13
+ export declare abstract class QueryPropertySet<O> extends Observable<O> {
14
+ #private;
15
+ constructor(...names: string[]);
16
+ protected abstract newProperty(): QueryProperty<any, any>;
17
+ protected abstract merge(...args: any[]): any | undefined;
25
18
  }
26
- export {};
19
+ export type QueryPropertySetOf<T, P, N extends string[]> = T & {
20
+ [K in N[number]]: P;
21
+ };
package/query/query.d.ts CHANGED
@@ -1,28 +1,30 @@
1
1
  import { Observable } from "rxjs";
2
2
  import { type DeepReadonly } from "@ngutil/common";
3
3
  import { type Model } from "../model";
4
- import { type Filter } from "./filter";
5
- import { type Grouper } from "./grouper";
6
- import type { IQueryCombinedProperty } from "./query-property";
4
+ import { type Filter, FilterProperty, FilterPropertySet } from "./filter";
5
+ import { type Grouper, GrouperProperty, GrouperPropertySet } from "./grouper";
6
+ import { type QueryPropertySetOf } from "./query-property";
7
7
  import { type Slice } from "./slice";
8
- import { type Slimer } from "./slimer";
9
- import { type Sorter } from "./sorter";
8
+ import { type Slimer, SlimerProperty, SlimerPropertySet } from "./slimer";
9
+ import { type Sorter, SorterProperty, SorterPropertySet } from "./sorter";
10
10
  export interface Query<T extends Model> {
11
11
  filter?: DeepReadonly<Filter<T>>;
12
12
  sorter?: DeepReadonly<Sorter<T>>;
13
13
  slimer?: DeepReadonly<Slimer<T>>;
14
14
  grouper?: DeepReadonly<Grouper<T>>;
15
- slice?: DeepReadonly<Slice>;
15
+ }
16
+ export interface QueryWithSlice<T extends Model> extends Query<T> {
17
+ slice: DeepReadonly<Slice>;
16
18
  }
17
19
  export interface QueryResult<T extends Model> {
18
20
  items: readonly T[];
19
21
  total?: number;
20
22
  groups?: any[];
21
23
  }
22
- export interface IQuerySubject<T extends Model> extends Observable<Query<T>> {
23
- readonly filter: IQueryCombinedProperty<Filter<T>>;
24
- readonly sorter: IQueryCombinedProperty<Sorter<T>>;
25
- readonly slimer: IQueryCombinedProperty<Slimer<T>>;
26
- readonly grouper: IQueryCombinedProperty<Grouper<T>>;
27
- readonly slice: IQueryCombinedProperty<Slice>;
24
+ export interface QuerySubject<T extends Model, N extends string[]> extends Observable<Query<T>> {
25
+ readonly filter: QueryPropertySetOf<FilterPropertySet<T>, FilterProperty<T>, N>;
26
+ readonly sorter: QueryPropertySetOf<SorterPropertySet, SorterProperty<T>, N>;
27
+ readonly slimer: QueryPropertySetOf<SlimerPropertySet<T>, SlimerProperty<T>, N>;
28
+ readonly grouper: QueryPropertySetOf<GrouperPropertySet<T>, GrouperProperty<T>, N>;
28
29
  }
30
+ export declare function querySubject<T extends Model, N extends string[]>(...names: N): QuerySubject<T, N>;
package/query/slimer.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import { Model } from "../model";
2
+ import { QueryProperty, QueryPropertySet } from "./query-property";
2
3
  /**
3
4
  * @exmaple
4
5
  * ```ts
@@ -12,7 +13,16 @@ import { Model } from "../model";
12
13
  * ```
13
14
  */
14
15
  export type Slimer<T extends Model> = any;
16
+ export type SlimerNormalized = any;
15
17
  export type SlimerFn<T> = (item: T) => T;
16
18
  export declare function slimBy<T extends Model>(slimer: Slimer<T>): void;
17
- export declare function slimerNormalize<T extends Model>(slimer: Slimer<T>): void;
18
- export declare function slimerMerge<T extends Model>(...slimers: 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 CHANGED
@@ -1,4 +1,6 @@
1
+ import { Observable } from "rxjs";
1
2
  import { Model } from "../model";
3
+ import { QueryProperty, QueryPropertySet } from "./query-property";
2
4
  export type SorterFn<T = any> = (a: T, b: T) => number;
3
5
  export declare const enum SortDirection {
4
6
  Asc = "asc",
@@ -10,12 +12,13 @@ export type SortDirExtra = {
10
12
  emptyFirst: boolean;
11
13
  };
12
14
  export type Sorter<T extends Model> = Array<{
13
- [key: string]: SortDir | SortDirExtra | undefined;
15
+ [key: string]: SortDir | SortDirExtra | NormalizedEntry | undefined;
14
16
  }>;
15
17
  type NormalizedEntry = {
16
18
  path: string;
17
19
  isAsc: boolean;
18
20
  emptyFirst: boolean;
21
+ remove?: boolean;
19
22
  };
20
23
  export type SorterNormalized = Array<NormalizedEntry>;
21
24
  /**
@@ -36,6 +39,16 @@ export declare function sortBy<T extends Model>(sorters: Sorter<T>): SorterFn<T>
36
39
  */
37
40
  export declare function sorterNormalize<T extends Model>(sorters: Sorter<T>): SorterNormalized;
38
41
  export declare function compare(a: any, b: any, emptyFirst: boolean): number;
39
- export declare function sorterMerge<T extends Model>(...sorters: Array<Sorter<T> | undefined | null>): Sorter<T> | undefined;
40
- export declare function sorterFind<T extends Model>(sorters: Sorter<T>, name: string): SortDir | SortDirExtra | undefined;
42
+ export declare function sorterMerge(...sorters: (SorterNormalized | undefined | null)[]): SorterNormalized | undefined;
43
+ export declare class SorterProperty<T extends Model> extends QueryProperty<Sorter<T>, SorterNormalized> {
44
+ protected norm(a: Sorter<T>): SorterNormalized | undefined;
45
+ protected merge(a?: SorterNormalized, b?: SorterNormalized): SorterNormalized | undefined;
46
+ }
47
+ export declare class SorterPropertySet extends QueryPropertySet<SorterNormalized> {
48
+ of(name: string): Observable<NormalizedEntry | undefined>;
49
+ isAsc(name: string): Observable<boolean | undefined>;
50
+ isDesc(name: string): Observable<boolean | undefined>;
51
+ protected newProperty(): SorterProperty<Model>;
52
+ protected merge(...args: any[]): SorterNormalized | undefined;
53
+ }
41
54
  export {};
@@ -40,8 +40,8 @@ export type DataSourceInput<T extends Model> = any;
40
40
  export declare class DataSourceProxy<T extends Model = Model> extends CdkDataSource<T | undefined> implements OnDestroy, ConnectProtocol {
41
41
  #private;
42
42
  set value(value: DataSourceInput<T>);
43
- get value(): DataSource<T>;
44
43
  readonly value$: Observable<DataSource<T>>;
44
+ readonly query$: Observable<import("../query").QuerySubject<Model, ["normal", "forced"]>>;
45
45
  readonly items$: Observable<import("@ngutil/data").PartialCollection<T>>;
46
46
  readonly busy$: Observable<boolean>;
47
47
  readonly isBusy: import("@angular/core").Signal<boolean>;
@@ -1,35 +1,28 @@
1
1
  import { DataSource as CdkDataSource, CollectionViewer } from "@angular/cdk/collections";
2
2
  import { BehaviorSubject, Observable } from "rxjs";
3
- import { ConnectProtocol, DeepReadonly } from "@ngutil/common";
3
+ import { ConnectProtocol } from "@ngutil/common";
4
4
  import type { Model, ModelRef } from "../model";
5
5
  import type { DataProvider } from "../provider/provider";
6
- import type { Filter, Query, Slice, Sorter } from "../query";
6
+ import type { Slice } from "../query";
7
7
  import { type CollectionStore, type PartialCollection } from "../store";
8
- import { FilterCombined, GrouperCombined, SlimerCombined, SorterCombined } from "./properties";
9
- type DSQuery<T extends Model> = Query<T> & {
10
- slice: DeepReadonly<Slice>;
11
- };
12
8
  export declare class DataSource<T extends Model> extends CdkDataSource<T | undefined> implements ConnectProtocol {
13
9
  #private;
14
10
  readonly provider: DataProvider<T>;
11
+ readonly store: CollectionStore<T>;
12
+ readonly query$: import("../query").QuerySubject<Model, ["normal", "forced"]>;
15
13
  readonly busy$: BehaviorSubject<boolean>;
16
14
  readonly total$: BehaviorSubject<number | undefined>;
17
- readonly filter: FilterCombined<Filter<T>>;
18
- readonly sorter: SorterCombined<Sorter<T>>;
19
- readonly slimer: SlimerCombined<any>;
20
- readonly grouper: GrouperCombined<any>;
21
15
  readonly slice$: Observable<Slice>;
22
- readonly query$: Observable<DSQuery<T>>;
23
16
  readonly items$: Observable<PartialCollection<T>>;
24
- readonly store: CollectionStore<T>;
25
- constructor(provider: DataProvider<T>, store?: CollectionStore<T>);
17
+ constructor(provider: DataProvider<T>, store?: CollectionStore<T>, query$?: import("../query").QuerySubject<Model, ["normal", "forced"]>);
26
18
  setSlice(slice: Slice): this;
27
19
  all(): this;
28
20
  realod(): void;
29
21
  getItem(ref: ModelRef): Observable<T | undefined>;
22
+ watchItem(ref: ModelRef): Observable<T | undefined>;
30
23
  getItemPosition(ref: ModelRef): Observable<number | undefined>;
24
+ watchItemPosition(ref: ModelRef): Observable<number | undefined>;
31
25
  realodItem(ref: ModelRef, insertPosition?: number): Observable<T | undefined>;
32
26
  connect(collectionViewer: CollectionViewer): Observable<readonly (T | undefined)[]>;
33
27
  disconnect(collectionViewer: CollectionViewer): void;
34
28
  }
35
- export {};
@@ -1,33 +0,0 @@
1
- import { BehaviorSubject, combineLatest, map, shareReplay } from "rxjs";
2
- import { isEqual } from "lodash";
3
- import { deepClone, deepFreeze } from "@ngutil/common";
4
- export class Property extends BehaviorSubject {
5
- // readonly #signal: Signal<DeepReadonly<T> | undefined> = toSignal(this, { requireSync: true })
6
- set(value, clone = true) {
7
- if (!isEqual(this.value, value)) {
8
- if (value != null) {
9
- this.next(deepFreeze(clone ? deepClone(value) : value));
10
- }
11
- else {
12
- this.next(undefined);
13
- }
14
- }
15
- }
16
- get() {
17
- return this.value;
18
- }
19
- del() {
20
- this.set(undefined);
21
- }
22
- }
23
- export class PropertyCombined {
24
- }
25
- export function mergedProperty(merger, ...props) {
26
- if (props.length > 1) {
27
- return combineLatest(props).pipe(map(values => deepFreeze(merger(...values))), shareReplay(1));
28
- }
29
- else {
30
- return props[0];
31
- }
32
- }
33
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYXRhL3NyYy9zb3VyY2UvcHJvcGVydGllcy9hYnN0cmFjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxHQUFHLEVBQWMsV0FBVyxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBRW5GLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxRQUFRLENBQUE7QUFFaEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQWdCLE1BQU0sZ0JBQWdCLENBQUE7QUFFcEUsTUFBTSxPQUFnQixRQUFZLFNBQVEsZUFBNEM7SUFDbEYsZ0dBQWdHO0lBRWhHLEdBQUcsQ0FBQyxLQUFvQixFQUFFLFFBQWlCLElBQUk7UUFDM0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDOUIsSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQVEsQ0FBQyxDQUFBO1lBQ3hFLENBQUM7aUJBQU0sQ0FBQztnQkFDSixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFBO1lBQ3hCLENBQUM7UUFDTCxDQUFDO0lBQ0wsQ0FBQztJQUVELEdBQUc7UUFDQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUE7SUFDckIsQ0FBQztJQUVELEdBQUc7UUFDQyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFBO0lBQ3ZCLENBQUM7Q0FNSjtBQUVELE1BQU0sT0FBZ0IsZ0JBQWdCO0NBSXJDO0FBRUQsTUFBTSxVQUFVLGNBQWMsQ0FBQyxNQUFnQyxFQUFFLEdBQUcsS0FBd0I7SUFDeEYsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ25CLE9BQU8sYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FDNUIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFDNUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUNqQixDQUFBO0lBQ0wsQ0FBQztTQUFNLENBQUM7UUFDSixPQUFPLEtBQUssQ0FBQyxDQUFDLENBQVEsQ0FBQTtJQUMxQixDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgbWFwLCBPYnNlcnZhYmxlLCBzaGFyZVJlcGxheSB9IGZyb20gXCJyeGpzXCJcblxuaW1wb3J0IHsgaXNFcXVhbCB9IGZyb20gXCJsb2Rhc2hcIlxuXG5pbXBvcnQgeyBkZWVwQ2xvbmUsIGRlZXBGcmVlemUsIERlZXBSZWFkb25seSB9IGZyb20gXCJAbmd1dGlsL2NvbW1vblwiXG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBQcm9wZXJ0eTxUPiBleHRlbmRzIEJlaGF2aW9yU3ViamVjdDxEZWVwUmVhZG9ubHk8VD4gfCB1bmRlZmluZWQ+IHtcbiAgICAvLyByZWFkb25seSAjc2lnbmFsOiBTaWduYWw8RGVlcFJlYWRvbmx5PFQ+IHwgdW5kZWZpbmVkPiA9IHRvU2lnbmFsKHRoaXMsIHsgcmVxdWlyZVN5bmM6IHRydWUgfSlcblxuICAgIHNldCh2YWx1ZTogVCB8IHVuZGVmaW5lZCwgY2xvbmU6IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgICAgIGlmICghaXNFcXVhbCh0aGlzLnZhbHVlLCB2YWx1ZSkpIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5uZXh0KGRlZXBGcmVlemU8VD4oY2xvbmUgPyBkZWVwQ2xvbmU8VD4odmFsdWUpIDogdmFsdWUpIGFzIGFueSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5uZXh0KHVuZGVmaW5lZClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVcbiAgICB9XG5cbiAgICBkZWwoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2V0KHVuZGVmaW5lZClcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNZXJnZSB2YWx1ZXMgYW5kIGVtaXQgd2hlbiBjaGFuZ2VkIChkb250IGNoYW5nZSBvcmlnaW5hbCB2YWx1ZXMpXG4gICAgICovXG4gICAgYWJzdHJhY3QgdXBkYXRlKG90aGVyOiBUKTogdm9pZFxufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUHJvcGVydHlDb21iaW5lZDxUPiB7XG4gICAgYWJzdHJhY3QgcmVhZG9ubHkgbm9ybWFsOiBQcm9wZXJ0eTxUPlxuICAgIGFic3RyYWN0IHJlYWRvbmx5IGZvcmNlZDogUHJvcGVydHk8VD5cbiAgICBhYnN0cmFjdCByZWFkb25seSBtZXJnZWQkOiBPYnNlcnZhYmxlPERlZXBSZWFkb25seTxUPiB8IHVuZGVmaW5lZD5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlZFByb3BlcnR5KG1lcmdlcjogKC4uLml0ZW1zOiBhbnlbXSkgPT4gYW55LCAuLi5wcm9wczogT2JzZXJ2YWJsZTxhbnk+W10pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGlmIChwcm9wcy5sZW5ndGggPiAxKSB7XG4gICAgICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KHByb3BzKS5waXBlKFxuICAgICAgICAgICAgbWFwKHZhbHVlcyA9PiBkZWVwRnJlZXplKG1lcmdlciguLi52YWx1ZXMpKSksXG4gICAgICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHByb3BzWzBdIGFzIGFueVxuICAgIH1cbn1cbiJdfQ==
@@ -1,16 +0,0 @@
1
- import { filterMerge } from "../../query";
2
- import { mergedProperty, Property, PropertyCombined } from "./abstract";
3
- export class FilterProperty extends Property {
4
- update(other) {
5
- this.set(filterMerge(this.value, other), false);
6
- }
7
- }
8
- export class FilterCombined extends PropertyCombined {
9
- constructor() {
10
- super(...arguments);
11
- this.normal = new FilterProperty(undefined);
12
- this.forced = new FilterProperty(undefined);
13
- this.merged$ = mergedProperty(filterMerge, this.normal, this.forced);
14
- }
15
- }
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGF0YS9zcmMvc291cmNlL3Byb3BlcnRpZXMvZmlsdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDekMsT0FBTyxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFFdkUsTUFBTSxPQUFPLGNBQWtCLFNBQVEsUUFBVztJQUNyQyxNQUFNLENBQUMsS0FBUTtRQUNwQixJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBRSxJQUF1QixDQUFDLEtBQUssRUFBRSxLQUFLLENBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQTtJQUM5RSxDQUFDO0NBQ0o7QUFFRCxNQUFNLE9BQU8sY0FBa0IsU0FBUSxnQkFBbUI7SUFBMUQ7O1FBQ2EsV0FBTSxHQUFHLElBQUksY0FBYyxDQUFJLFNBQVMsQ0FBQyxDQUFBO1FBQ3pDLFdBQU0sR0FBRyxJQUFJLGNBQWMsQ0FBSSxTQUFTLENBQUMsQ0FBQTtRQUN6QyxZQUFPLEdBQTRDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDckgsQ0FBQztDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gXCJyeGpzXCJcblxuaW1wb3J0IHsgRGVlcFJlYWRvbmx5IH0gZnJvbSBcIkBuZ3V0aWwvY29tbW9uXCJcblxuaW1wb3J0IHsgZmlsdGVyTWVyZ2UgfSBmcm9tIFwiLi4vLi4vcXVlcnlcIlxuaW1wb3J0IHsgbWVyZ2VkUHJvcGVydHksIFByb3BlcnR5LCBQcm9wZXJ0eUNvbWJpbmVkIH0gZnJvbSBcIi4vYWJzdHJhY3RcIlxuXG5leHBvcnQgY2xhc3MgRmlsdGVyUHJvcGVydHk8VD4gZXh0ZW5kcyBQcm9wZXJ0eTxUPiB7XG4gICAgb3ZlcnJpZGUgdXBkYXRlKG90aGVyOiBUKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2V0KGZpbHRlck1lcmdlKCh0aGlzIGFzIHsgdmFsdWU6IGFueSB9KS52YWx1ZSwgb3RoZXIpIGFzIGFueSwgZmFsc2UpXG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRmlsdGVyQ29tYmluZWQ8VD4gZXh0ZW5kcyBQcm9wZXJ0eUNvbWJpbmVkPFQ+IHtcbiAgICBvdmVycmlkZSBub3JtYWwgPSBuZXcgRmlsdGVyUHJvcGVydHk8VD4odW5kZWZpbmVkKVxuICAgIG92ZXJyaWRlIGZvcmNlZCA9IG5ldyBGaWx0ZXJQcm9wZXJ0eTxUPih1bmRlZmluZWQpXG4gICAgb3ZlcnJpZGUgbWVyZ2VkJDogT2JzZXJ2YWJsZTxEZWVwUmVhZG9ubHk8VD4gfCB1bmRlZmluZWQ+ID0gbWVyZ2VkUHJvcGVydHkoZmlsdGVyTWVyZ2UsIHRoaXMubm9ybWFsLCB0aGlzLmZvcmNlZClcbn1cbiJdfQ==
@@ -1,16 +0,0 @@
1
- import { grouperMerge } from "../../query";
2
- import { mergedProperty, Property, PropertyCombined } from "./abstract";
3
- export class GrouperProperty extends Property {
4
- update(other) {
5
- this.set(grouperMerge(this.value, other), false);
6
- }
7
- }
8
- export class GrouperCombined extends PropertyCombined {
9
- constructor() {
10
- super(...arguments);
11
- this.normal = new GrouperProperty(undefined);
12
- this.forced = new GrouperProperty(undefined);
13
- this.merged$ = mergedProperty(grouperMerge, this.normal, this.forced);
14
- }
15
- }
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2RhdGEvc3JjL3NvdXJjZS9wcm9wZXJ0aWVzL2dyb3VwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUMxQyxPQUFPLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUV2RSxNQUFNLE9BQU8sZUFBbUIsU0FBUSxRQUFXO0lBQ3RDLE1BQU0sQ0FBQyxLQUFRO1FBQ3BCLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFFLElBQXVCLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBUSxFQUFFLEtBQUssQ0FBQyxDQUFBO0lBQy9FLENBQUM7Q0FDSjtBQUVELE1BQU0sT0FBTyxlQUFtQixTQUFRLGdCQUFtQjtJQUEzRDs7UUFDYSxXQUFNLEdBQUcsSUFBSSxlQUFlLENBQUksU0FBUyxDQUFDLENBQUE7UUFDMUMsV0FBTSxHQUFHLElBQUksZUFBZSxDQUFJLFNBQVMsQ0FBQyxDQUFBO1FBQzFDLFlBQU8sR0FBNEMsY0FBYyxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUN0SCxDQUFDO0NBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSBcInJ4anNcIlxuXG5pbXBvcnQgeyBEZWVwUmVhZG9ubHkgfSBmcm9tIFwiQG5ndXRpbC9jb21tb25cIlxuXG5pbXBvcnQgeyBncm91cGVyTWVyZ2UgfSBmcm9tIFwiLi4vLi4vcXVlcnlcIlxuaW1wb3J0IHsgbWVyZ2VkUHJvcGVydHksIFByb3BlcnR5LCBQcm9wZXJ0eUNvbWJpbmVkIH0gZnJvbSBcIi4vYWJzdHJhY3RcIlxuXG5leHBvcnQgY2xhc3MgR3JvdXBlclByb3BlcnR5PFQ+IGV4dGVuZHMgUHJvcGVydHk8VD4ge1xuICAgIG92ZXJyaWRlIHVwZGF0ZShvdGhlcjogVCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNldChncm91cGVyTWVyZ2UoKHRoaXMgYXMgeyB2YWx1ZTogYW55IH0pLnZhbHVlLCBvdGhlcikgYXMgYW55LCBmYWxzZSlcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHcm91cGVyQ29tYmluZWQ8VD4gZXh0ZW5kcyBQcm9wZXJ0eUNvbWJpbmVkPFQ+IHtcbiAgICBvdmVycmlkZSBub3JtYWwgPSBuZXcgR3JvdXBlclByb3BlcnR5PFQ+KHVuZGVmaW5lZClcbiAgICBvdmVycmlkZSBmb3JjZWQgPSBuZXcgR3JvdXBlclByb3BlcnR5PFQ+KHVuZGVmaW5lZClcbiAgICBvdmVycmlkZSBtZXJnZWQkOiBPYnNlcnZhYmxlPERlZXBSZWFkb25seTxUPiB8IHVuZGVmaW5lZD4gPSBtZXJnZWRQcm9wZXJ0eShncm91cGVyTWVyZ2UsIHRoaXMubm9ybWFsLCB0aGlzLmZvcmNlZClcbn1cbiJdfQ==
@@ -1,5 +0,0 @@
1
- export { FilterProperty, FilterCombined } from "./filter";
2
- export { SorterProperty, SorterCombined } from "./sorter";
3
- export { SlimerProperty, SlimerCombined } from "./slimer";
4
- export { GrouperProperty, GrouperCombined } from "./grouper";
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYXRhL3NyYy9zb3VyY2UvcHJvcGVydGllcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQUN6RCxPQUFPLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQUN6RCxPQUFPLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxNQUFNLFdBQVcsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IEZpbHRlclByb3BlcnR5LCBGaWx0ZXJDb21iaW5lZCB9IGZyb20gXCIuL2ZpbHRlclwiXG5leHBvcnQgeyBTb3J0ZXJQcm9wZXJ0eSwgU29ydGVyQ29tYmluZWQgfSBmcm9tIFwiLi9zb3J0ZXJcIlxuZXhwb3J0IHsgU2xpbWVyUHJvcGVydHksIFNsaW1lckNvbWJpbmVkIH0gZnJvbSBcIi4vc2xpbWVyXCJcbmV4cG9ydCB7IEdyb3VwZXJQcm9wZXJ0eSwgR3JvdXBlckNvbWJpbmVkIH0gZnJvbSBcIi4vZ3JvdXBlclwiXG4iXX0=
@@ -1,16 +0,0 @@
1
- import { slimerMerge } from "../../query";
2
- import { mergedProperty, Property, PropertyCombined } from "./abstract";
3
- export class SlimerProperty extends Property {
4
- update(other) {
5
- this.set(slimerMerge(this.value, other), false);
6
- }
7
- }
8
- export class SlimerCombined extends PropertyCombined {
9
- constructor() {
10
- super(...arguments);
11
- this.normal = new SlimerProperty(undefined);
12
- this.forced = new SlimerProperty(undefined);
13
- this.merged$ = mergedProperty(slimerMerge, this.normal, this.forced);
14
- }
15
- }
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpbWVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGF0YS9zcmMvc291cmNlL3Byb3BlcnRpZXMvc2xpbWVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDekMsT0FBTyxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFFdkUsTUFBTSxPQUFPLGNBQWtCLFNBQVEsUUFBVztJQUNyQyxNQUFNLENBQUMsS0FBUTtRQUNwQixJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBRSxJQUF1QixDQUFDLEtBQUssRUFBRSxLQUFLLENBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQTtJQUM5RSxDQUFDO0NBQ0o7QUFFRCxNQUFNLE9BQU8sY0FBa0IsU0FBUSxnQkFBbUI7SUFBMUQ7O1FBQ2EsV0FBTSxHQUFHLElBQUksY0FBYyxDQUFJLFNBQVMsQ0FBQyxDQUFBO1FBQ3pDLFdBQU0sR0FBRyxJQUFJLGNBQWMsQ0FBSSxTQUFTLENBQUMsQ0FBQTtRQUN6QyxZQUFPLEdBQTRDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDckgsQ0FBQztDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gXCJyeGpzXCJcblxuaW1wb3J0IHsgRGVlcFJlYWRvbmx5IH0gZnJvbSBcIkBuZ3V0aWwvY29tbW9uXCJcblxuaW1wb3J0IHsgc2xpbWVyTWVyZ2UgfSBmcm9tIFwiLi4vLi4vcXVlcnlcIlxuaW1wb3J0IHsgbWVyZ2VkUHJvcGVydHksIFByb3BlcnR5LCBQcm9wZXJ0eUNvbWJpbmVkIH0gZnJvbSBcIi4vYWJzdHJhY3RcIlxuXG5leHBvcnQgY2xhc3MgU2xpbWVyUHJvcGVydHk8VD4gZXh0ZW5kcyBQcm9wZXJ0eTxUPiB7XG4gICAgb3ZlcnJpZGUgdXBkYXRlKG90aGVyOiBUKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2V0KHNsaW1lck1lcmdlKCh0aGlzIGFzIHsgdmFsdWU6IGFueSB9KS52YWx1ZSwgb3RoZXIpIGFzIGFueSwgZmFsc2UpXG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2xpbWVyQ29tYmluZWQ8VD4gZXh0ZW5kcyBQcm9wZXJ0eUNvbWJpbmVkPFQ+IHtcbiAgICBvdmVycmlkZSBub3JtYWwgPSBuZXcgU2xpbWVyUHJvcGVydHk8VD4odW5kZWZpbmVkKVxuICAgIG92ZXJyaWRlIGZvcmNlZCA9IG5ldyBTbGltZXJQcm9wZXJ0eTxUPih1bmRlZmluZWQpXG4gICAgb3ZlcnJpZGUgbWVyZ2VkJDogT2JzZXJ2YWJsZTxEZWVwUmVhZG9ubHk8VD4gfCB1bmRlZmluZWQ+ID0gbWVyZ2VkUHJvcGVydHkoc2xpbWVyTWVyZ2UsIHRoaXMubm9ybWFsLCB0aGlzLmZvcmNlZClcbn1cbiJdfQ==
@@ -1,43 +0,0 @@
1
- import { map } from "rxjs";
2
- import { sorterFind, sorterMerge } from "../../query";
3
- import { mergedProperty, Property, PropertyCombined } from "./abstract";
4
- export class SorterProperty extends Property {
5
- update(other) {
6
- this.set(sorterMerge(this.value, other), false);
7
- }
8
- }
9
- export class SorterCombined extends PropertyCombined {
10
- constructor() {
11
- super(...arguments);
12
- this.normal = new SorterProperty(undefined);
13
- this.forced = new SorterProperty(undefined);
14
- // TODO: normalized sorter
15
- this.merged$ = mergedProperty(sorterMerge, this.normal, this.forced);
16
- }
17
- of(name) {
18
- return this.merged$.pipe(map((sorters) => (sorters == null ? undefined : sorterFind(sorters, name))));
19
- }
20
- directionOf(name) {
21
- return this.of(name).pipe(map(value => {
22
- if (value == null) {
23
- return undefined;
24
- }
25
- else if (typeof value === "string") {
26
- return value;
27
- }
28
- else {
29
- return value.dir;
30
- }
31
- }));
32
- }
33
- isSet(name) {
34
- return this.directionOf(name).pipe(map(v => v != null));
35
- }
36
- isAsc(name) {
37
- return this.directionOf(name).pipe(map(v => v === "asc" /* SortDirection.Asc */));
38
- }
39
- isDesc(name) {
40
- return this.directionOf(name).pipe(map(v => v === "desc" /* SortDirection.Desc */));
41
- }
42
- }
43
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ydGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGF0YS9zcmMvc291cmNlL3Byb3BlcnRpZXMvc29ydGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxHQUFHLEVBQWMsTUFBTSxNQUFNLENBQUE7QUFLdEMsT0FBTyxFQUFpQixVQUFVLEVBQUUsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBQ3BFLE9BQU8sRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sWUFBWSxDQUFBO0FBRXZFLE1BQU0sT0FBTyxjQUFrQixTQUFRLFFBQVc7SUFDckMsTUFBTSxDQUFDLEtBQVE7UUFDcEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUUsSUFBdUIsQ0FBQyxLQUFLLEVBQUUsS0FBWSxDQUFRLEVBQUUsS0FBSyxDQUFDLENBQUE7SUFDckYsQ0FBQztDQUNKO0FBSUQsTUFBTSxPQUFPLGNBQWdDLFNBQVEsZ0JBQW1CO0lBQXhFOztRQUNhLFdBQU0sR0FBRyxJQUFJLGNBQWMsQ0FBSSxTQUFTLENBQUMsQ0FBQTtRQUN6QyxXQUFNLEdBQUcsSUFBSSxjQUFjLENBQUksU0FBUyxDQUFDLENBQUE7UUFDbEQsMEJBQTBCO1FBQ2pCLFlBQU8sR0FBNEMsY0FBYyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQStCckgsQ0FBQztJQTdCRyxFQUFFLENBQUMsSUFBWTtRQUNYLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUM5RyxDQUFDO0lBRUQsV0FBVyxDQUFDLElBQVk7UUFDcEIsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FDckIsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ1IsSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQ2hCLE9BQU8sU0FBUyxDQUFBO1lBQ3BCLENBQUM7aUJBQU0sSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDbkMsT0FBTyxLQUFLLENBQUE7WUFDaEIsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQTtZQUNwQixDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQ0wsQ0FBQTtJQUNMLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUE7SUFDM0QsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLGtDQUFzQixDQUFDLENBQUMsQ0FBQTtJQUN6RSxDQUFDO0lBRUQsTUFBTSxDQUFDLElBQVk7UUFDZixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsb0NBQXVCLENBQUMsQ0FBQyxDQUFBO0lBQzFFLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG1hcCwgT2JzZXJ2YWJsZSB9IGZyb20gXCJyeGpzXCJcblxuaW1wb3J0IHsgRGVlcFJlYWRvbmx5IH0gZnJvbSBcIkBuZ3V0aWwvY29tbW9uXCJcblxuaW1wb3J0IHsgTW9kZWwgfSBmcm9tIFwiLi4vLi4vbW9kZWxcIlxuaW1wb3J0IHsgU29ydERpcmVjdGlvbiwgc29ydGVyRmluZCwgc29ydGVyTWVyZ2UgfSBmcm9tIFwiLi4vLi4vcXVlcnlcIlxuaW1wb3J0IHsgbWVyZ2VkUHJvcGVydHksIFByb3BlcnR5LCBQcm9wZXJ0eUNvbWJpbmVkIH0gZnJvbSBcIi4vYWJzdHJhY3RcIlxuXG5leHBvcnQgY2xhc3MgU29ydGVyUHJvcGVydHk8VD4gZXh0ZW5kcyBQcm9wZXJ0eTxUPiB7XG4gICAgb3ZlcnJpZGUgdXBkYXRlKG90aGVyOiBUKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2V0KHNvcnRlck1lcmdlKCh0aGlzIGFzIHsgdmFsdWU6IGFueSB9KS52YWx1ZSwgb3RoZXIgYXMgYW55KSBhcyBhbnksIGZhbHNlKVxuICAgIH1cbn1cblxudHlwZSBPZlR5cGVzPFQgZXh0ZW5kcyBNb2RlbD4gPSBSZXR1cm5UeXBlPHR5cGVvZiBzb3J0ZXJGaW5kPFQ+PlxuXG5leHBvcnQgY2xhc3MgU29ydGVyQ29tYmluZWQ8VCBleHRlbmRzIE1vZGVsPiBleHRlbmRzIFByb3BlcnR5Q29tYmluZWQ8VD4ge1xuICAgIG92ZXJyaWRlIG5vcm1hbCA9IG5ldyBTb3J0ZXJQcm9wZXJ0eTxUPih1bmRlZmluZWQpXG4gICAgb3ZlcnJpZGUgZm9yY2VkID0gbmV3IFNvcnRlclByb3BlcnR5PFQ+KHVuZGVmaW5lZClcbiAgICAvLyBUT0RPOiBub3JtYWxpemVkIHNvcnRlclxuICAgIG92ZXJyaWRlIG1lcmdlZCQ6IE9ic2VydmFibGU8RGVlcFJlYWRvbmx5PFQ+IHwgdW5kZWZpbmVkPiA9IG1lcmdlZFByb3BlcnR5KHNvcnRlck1lcmdlLCB0aGlzLm5vcm1hbCwgdGhpcy5mb3JjZWQpXG5cbiAgICBvZihuYW1lOiBzdHJpbmcpOiBPYnNlcnZhYmxlPE9mVHlwZXM8VD4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWVyZ2VkJC5waXBlKG1hcCgoc29ydGVyczogYW55KSA9PiAoc29ydGVycyA9PSBudWxsID8gdW5kZWZpbmVkIDogc29ydGVyRmluZChzb3J0ZXJzLCBuYW1lKSkpKVxuICAgIH1cblxuICAgIGRpcmVjdGlvbk9mKG5hbWU6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5vZihuYW1lKS5waXBlKFxuICAgICAgICAgICAgbWFwKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmRpclxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICB9XG5cbiAgICBpc1NldChuYW1lOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlyZWN0aW9uT2YobmFtZSkucGlwZShtYXAodiA9PiB2ICE9IG51bGwpKVxuICAgIH1cblxuICAgIGlzQXNjKG5hbWU6IHN0cmluZyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5kaXJlY3Rpb25PZihuYW1lKS5waXBlKG1hcCh2ID0+IHYgPT09IFNvcnREaXJlY3Rpb24uQXNjKSlcbiAgICB9XG5cbiAgICBpc0Rlc2MobmFtZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmRpcmVjdGlvbk9mKG5hbWUpLnBpcGUobWFwKHYgPT4gdiA9PT0gU29ydERpcmVjdGlvbi5EZXNjKSlcbiAgICB9XG59XG4iXX0=
@@ -1,17 +0,0 @@
1
- import { BehaviorSubject, Observable } from "rxjs";
2
- import { DeepReadonly } from "@ngutil/common";
3
- export declare abstract class Property<T> extends BehaviorSubject<DeepReadonly<T> | undefined> {
4
- set(value: T | undefined, clone?: boolean): void;
5
- get(): DeepReadonly<T> | undefined;
6
- del(): void;
7
- /**
8
- * Merge values and emit when changed (dont change original values)
9
- */
10
- abstract update(other: T): void;
11
- }
12
- export declare abstract class PropertyCombined<T> {
13
- abstract readonly normal: Property<T>;
14
- abstract readonly forced: Property<T>;
15
- abstract readonly merged$: Observable<DeepReadonly<T> | undefined>;
16
- }
17
- export declare function mergedProperty(merger: (...items: any[]) => any, ...props: Observable<any>[]): Observable<any>;
@@ -1,11 +0,0 @@
1
- import { Observable } from "rxjs";
2
- import { DeepReadonly } from "@ngutil/common";
3
- import { Property, PropertyCombined } from "./abstract";
4
- export declare class FilterProperty<T> extends Property<T> {
5
- update(other: T): void;
6
- }
7
- export declare class FilterCombined<T> extends PropertyCombined<T> {
8
- normal: FilterProperty<T>;
9
- forced: FilterProperty<T>;
10
- merged$: Observable<DeepReadonly<T> | undefined>;
11
- }
@@ -1,11 +0,0 @@
1
- import { Observable } from "rxjs";
2
- import { DeepReadonly } from "@ngutil/common";
3
- import { Property, PropertyCombined } from "./abstract";
4
- export declare class GrouperProperty<T> extends Property<T> {
5
- update(other: T): void;
6
- }
7
- export declare class GrouperCombined<T> extends PropertyCombined<T> {
8
- normal: GrouperProperty<T>;
9
- forced: GrouperProperty<T>;
10
- merged$: Observable<DeepReadonly<T> | undefined>;
11
- }
@@ -1,4 +0,0 @@
1
- export { FilterProperty, FilterCombined } from "./filter";
2
- export { SorterProperty, SorterCombined } from "./sorter";
3
- export { SlimerProperty, SlimerCombined } from "./slimer";
4
- export { GrouperProperty, GrouperCombined } from "./grouper";
@@ -1,11 +0,0 @@
1
- import { Observable } from "rxjs";
2
- import { DeepReadonly } from "@ngutil/common";
3
- import { Property, PropertyCombined } from "./abstract";
4
- export declare class SlimerProperty<T> extends Property<T> {
5
- update(other: T): void;
6
- }
7
- export declare class SlimerCombined<T> extends PropertyCombined<T> {
8
- normal: SlimerProperty<T>;
9
- forced: SlimerProperty<T>;
10
- merged$: Observable<DeepReadonly<T> | undefined>;
11
- }
@@ -1,20 +0,0 @@
1
- import { Observable } from "rxjs";
2
- import { DeepReadonly } from "@ngutil/common";
3
- import { Model } from "../../model";
4
- import { sorterFind } from "../../query";
5
- import { Property, PropertyCombined } from "./abstract";
6
- export declare class SorterProperty<T> extends Property<T> {
7
- update(other: T): void;
8
- }
9
- type OfTypes<T extends Model> = ReturnType<typeof sorterFind<T>>;
10
- export declare class SorterCombined<T extends Model> extends PropertyCombined<T> {
11
- normal: SorterProperty<T>;
12
- forced: SorterProperty<T>;
13
- merged$: Observable<DeepReadonly<T> | undefined>;
14
- of(name: string): Observable<OfTypes<T>>;
15
- directionOf(name: string): Observable<import("../../query").SortDir | undefined>;
16
- isSet(name: string): Observable<boolean>;
17
- isAsc(name: string): Observable<boolean>;
18
- isDesc(name: string): Observable<boolean>;
19
- }
20
- export {};