@ngutil/data 0.0.91 → 0.0.93

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/package.json CHANGED
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "name": "@ngutil/data",
3
- "version": "0.0.91",
3
+ "version": "0.0.93",
4
4
  "peerDependencies": {
5
5
  "@angular/cdk": "19.2.11",
6
6
  "@angular/core": "19.2.8",
7
7
  "es-toolkit": "^1.35.0",
8
8
  "rxjs": "^7.8.1",
9
9
  "utility-types": "^3.11.0",
10
- "@ngutil/common": "0.0.91",
11
- "@ngutil/aria": "0.0.91"
10
+ "@ngutil/aria": "0.0.93",
11
+ "@ngutil/common": "0.0.93"
12
12
  },
13
13
  "publishConfig": {
14
14
  "access": "public",
@@ -1,6 +1,8 @@
1
1
  import type { Observable } from "rxjs";
2
2
  import type { Model, ModelMeta, ModelRefNorm } from "../model";
3
- import type { QueryResult, QueryWithSlice, Slice } from "../query";
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";
4
6
  import { DataSource } from "../source";
5
7
  import type { CollectionStore } from "../store";
6
8
  export declare abstract class DataProvider<T extends Model> {
@@ -33,6 +35,14 @@ export declare abstract class DataProvider<T extends Model> {
33
35
  * Froce Slice boundaries, useful in array, or obeservable providers
34
36
  */
35
37
  clampSlice(slice: Slice): Observable<Slice>;
38
+ filterNormalize(filter: any): FilterNormalized;
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;
36
46
  /**
37
47
  * @returns New data source instance
38
48
  */
package/query/filter.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { AsPrimitive, MaxRecursion } from "@ngutil/common";
2
2
  import { Model } from "../model";
3
3
  import { QueryProperty, QueryPropertySet } from "./query-property";
4
- export declare const enum FilterOp {
4
+ export declare enum FilterOp {
5
5
  Eq = "==",
6
6
  EqStrict = "===",
7
7
  EqInsesitive = "==*",
@@ -22,6 +22,7 @@ export declare const enum FilterOp {
22
22
  StartsWithInsesitive = "^*",
23
23
  EndsWith = "$",
24
24
  EndsWithInsesitive = "$*",
25
+ Similarity = "**",
25
26
  Regexp = "~",
26
27
  RegexpInsesitive = "~*",
27
28
  Or = "|",
@@ -36,7 +37,7 @@ export type Filter<T extends Model> = {
36
37
  [key: string]: any;
37
38
  };
38
39
  export type Operators<T, P extends number[], D extends number = MaxRecursion> = P["length"] extends D ? never : SimpleOperators<T>;
39
- type SimpleOperators<T> = EqStrict<T> | NeqStrict<T> | Eq<T> | Neq<T> | Gt<T> | Gte<T> | Lt<T> | Lte<T> | Contains<T> | StartsWith<T> | EndsWith<T> | Regexp<T> | T | undefined | null;
40
+ 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;
40
41
  type EqStrict<T> = Operator<T, T, FilterOp.EqStrict, never, null>;
41
42
  type NeqStrict<T> = Operator<T, T, FilterOp.NeqStrict, never, null>;
42
43
  type Eq<T> = Operator<T, T | AsPrimitive<T>, FilterOp.Eq, FilterOp.EqInsesitive, null>;
@@ -47,6 +48,7 @@ type Lt<T> = Operator<T, T | AsPrimitive<T>, FilterOp.Lt, FilterOp.LtInsesitive>
47
48
  type Lte<T> = Operator<T, T | AsPrimitive<T>, FilterOp.Lte, FilterOp.LteInsesitive>;
48
49
  type Contains<T> = Operator<T, string, FilterOp.Contains, FilterOp.ContainsInsesitive>;
49
50
  type StartsWith<T> = Operator<T, string, FilterOp.StartsWith, FilterOp.StartsWithInsesitive>;
51
+ type Similarity<T> = Operator<T, string, FilterOp.Similarity, never, null>;
50
52
  type EndsWith<T> = Operator<T, string, FilterOp.EndsWith, FilterOp.EndsWithInsesitive>;
51
53
  type Regexp<T> = Operator<T, string, FilterOp.Regexp, FilterOp.RegexpInsesitive, RegExp>;
52
54
  type Operator<T, R, OP extends string, OPI extends string = never, ET = never> = (T extends R ? {
@@ -92,7 +94,7 @@ export declare class FilterProperty<T extends Model> extends QueryProperty<Filte
92
94
  }
93
95
  export declare class FilterPropertySet<T extends Model> extends QueryPropertySet<Filter<T>> {
94
96
  protected newProperty(): FilterProperty<Model>;
95
- protected merge(...args: any[]): any;
97
+ protected merge(...args: any[]): NormEntry | undefined;
96
98
  }
97
99
  export declare function filterSimplify(filters: any): object | null;
98
100
  export {};
@@ -8,7 +8,7 @@ export declare function groupBy<T extends Model, F = Flatten<T>>(grouper: Groupe
8
8
  export declare function grouperMerge<T extends Model, F = Flatten<T>>(...groupers: Array<Grouper<T, F> | undefined | null>): Grouper<T, F> | undefined;
9
9
  export declare function grouperNormalize<T extends Model>(grouper: Grouper<T>): GrouperNormalized;
10
10
  export declare class GrouperProperty<T extends Model> extends QueryProperty<Grouper<T>, GrouperNormalized> {
11
- protected norm(a: any): typeof grouperNormalize;
11
+ protected norm(a: any): any;
12
12
  protected merge(a?: any, b?: any): any;
13
13
  }
14
14
  export declare class GrouperPropertySet<T extends Model> extends QueryPropertySet<Grouper<T>> {
@@ -1,6 +1,9 @@
1
1
  import { BehaviorSubject, Observable } from "rxjs";
2
+ import type { DataProvider } from "../provider";
2
3
  export declare abstract class QueryProperty<I, O> extends BehaviorSubject<O | undefined> {
3
4
  #private;
5
+ protected readonly provider: DataProvider<any>;
6
+ constructor(provider: DataProvider<any>);
4
7
  set(value?: I | O): void;
5
8
  update(value?: I | O): void;
6
9
  del(): void;
@@ -12,7 +15,8 @@ export declare abstract class QueryProperty<I, O> extends BehaviorSubject<O | un
12
15
  }
13
16
  export declare abstract class QueryPropertySet<O> extends Observable<O> {
14
17
  #private;
15
- constructor(...names: string[]);
18
+ protected readonly provider: DataProvider<any>;
19
+ constructor(provider: DataProvider<any>, ...names: string[]);
16
20
  protected abstract newProperty(): QueryProperty<any, any>;
17
21
  protected abstract merge(...args: any[]): any | undefined;
18
22
  }
package/query/query.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import { Observable } from "rxjs";
2
2
  import { type DeepReadonly } from "@ngutil/common";
3
3
  import { type Model } from "../model";
4
+ import type { DataProvider } from "../provider";
4
5
  import { type FilterNormalized, FilterProperty, FilterPropertySet } from "./filter";
5
6
  import { type GrouperNormalized, GrouperProperty, GrouperPropertySet } from "./grouper";
6
7
  import { type QueryPropertySetOf } from "./query-property";
@@ -27,4 +28,4 @@ export interface QuerySubject<T extends Model, N extends string[]> extends Obser
27
28
  readonly slimer: QueryPropertySetOf<SlimerPropertySet<T>, SlimerProperty<T>, N>;
28
29
  readonly grouper: QueryPropertySetOf<GrouperPropertySet<T>, GrouperProperty<T>, N>;
29
30
  }
30
- export declare function querySubject<T extends Model, N extends string[]>(...names: N): QuerySubject<T, N>;
31
+ export declare function querySubject<T extends Model, N extends string[]>(provider: DataProvider<T>, ...names: N): QuerySubject<T, N>;
@@ -42,7 +42,7 @@ export declare class DataSourceProxy<T extends Model> extends CdkDataSource<T |
42
42
  #private;
43
43
  set value(value: DataSourceProxyInput<T>);
44
44
  readonly value$: Observable<DataSource<T>>;
45
- readonly query$: Observable<import("../query").QuerySubject<Model, ["normal", "forced"]>>;
45
+ readonly query$: Observable<import("../query").QuerySubject<T, ["normal", "forced"]>>;
46
46
  readonly items$: Observable<import("@ngutil/data").PartialCollection<T>>;
47
47
  readonly isBusy$: Observable<boolean>;
48
48
  readonly isEmpty$: Observable<boolean>;
@@ -9,14 +9,14 @@ export declare class DataSource<T extends Model> extends CdkDataSource<T | undef
9
9
  #private;
10
10
  readonly provider: DataProvider<T>;
11
11
  readonly store: CollectionStore<T>;
12
- readonly query$: import("../query").QuerySubject<Model, ["normal", "forced"]>;
12
+ readonly query$: import("../query").QuerySubject<T, ["normal", "forced"]>;
13
13
  readonly isBusy$: BehaviorSubject<boolean>;
14
14
  readonly total$: BehaviorSubject<number | undefined>;
15
15
  readonly slice$: Observable<Slice>;
16
16
  readonly reset$: Observable<void>;
17
17
  readonly items$: Observable<PartialCollection<T>>;
18
18
  readonly isEmpty$: Observable<boolean>;
19
- constructor(provider: DataProvider<T>, store?: CollectionStore<T>, query$?: import("../query").QuerySubject<Model, ["normal", "forced"]>);
19
+ constructor(provider: DataProvider<T>, store?: CollectionStore<T>, query$?: import("../query").QuerySubject<T, ["normal", "forced"]>);
20
20
  setSlice(slice: Slice): this;
21
21
  setFilter(filter: Partial<Record<"normal" | "forced", Filter<T>>>): this;
22
22
  updateFilter(filter: Partial<Record<"normal" | "forced", Filter<T>>>): this;