@wxn0brp/vql-client 0.2.6 → 0.2.8

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 (2) hide show
  1. package/dist/vql.d.ts +60 -51
  2. package/package.json +1 -1
package/dist/vql.d.ts CHANGED
@@ -1,72 +1,78 @@
1
- export interface Data {
2
- [key: string]: any;
3
- }
4
- export interface VContext {
5
- [key: string]: any;
6
- }
7
1
  export type KeysMatching<T, V, C = V> = {
8
2
  [K in keyof T]-?: T[K] extends C ? K : never;
9
3
  }[keyof T];
10
- export type PartialOfType<T, V, C = V> = Partial<Record<KeysMatching<T, V, C>, V>>;
11
- export type PartialPickMatching<T, V, C = V> = Partial<Pick<T, KeysMatching<T, V, C>>>;
4
+ export type NestedValue<T, V, C = V> = {
5
+ [K in keyof T as T[K] extends C ? K : T[K] extends object ? K : never]?: T[K] extends C ? V : T[K] extends object ? NestedValue<T[K], V, C> : never;
6
+ };
7
+ export type DeepPartial<T> = {
8
+ [K in keyof T]?: T[K] extends object ? DeepPartial<T[K]> : T[K];
9
+ };
10
+ export type JSPrimitiveType = "string" | "number" | "boolean" | "bigint" | "symbol" | "undefined" | "function" | "object";
12
11
  export type LogicalOperators<T = any> = {
13
12
  $and?: Array<SearchOptions<T>>;
14
13
  $or?: Array<SearchOptions<T>>;
15
14
  $not?: SearchOptions<T>;
16
15
  };
17
16
  export type ComparisonOperators<T = any> = {
18
- $gt?: PartialOfType<T, number>;
19
- $lt?: PartialOfType<T, number>;
20
- $gte?: PartialOfType<T, number>;
21
- $lte?: PartialOfType<T, number>;
22
- $between?: PartialOfType<T, [
17
+ $gt?: NestedValue<T, number, number>;
18
+ $lt?: NestedValue<T, number, number>;
19
+ $gte?: NestedValue<T, number, number>;
20
+ $lte?: NestedValue<T, number, number>;
21
+ $between?: NestedValue<T, [
23
22
  number,
24
23
  number
25
24
  ], number>;
26
- $in?: Partial<Record<keyof T, T[keyof T][]>>;
27
- $nin?: Partial<Record<keyof T, T[keyof T][]>>;
28
- $idGt?: PartialOfType<T, string | number>;
29
- $idLt?: PartialOfType<T, string | number>;
30
- $idGte?: PartialOfType<T, string | number>;
31
- $idLte?: PartialOfType<T, string | number>;
25
+ $in?: DeepPartial<T> & {
26
+ [K in keyof T]?: T[K] extends any[] ? T[K] : T[K][];
27
+ };
28
+ $nin?: DeepPartial<T> & {
29
+ [K in keyof T]?: T[K] extends any[] ? T[K] : T[K][];
30
+ };
31
+ $idGt?: NestedValue<T, string | number, string | number>;
32
+ $idLt?: NestedValue<T, string | number, string | number>;
33
+ $idGte?: NestedValue<T, string | number, string | number>;
34
+ $idLte?: NestedValue<T, string | number, string | number>;
32
35
  };
33
36
  export type TypeAndExistenceOperators<T = any> = {
34
- $exists?: PartialOfType<T, boolean, any>;
35
- $type?: PartialOfType<T, string>;
37
+ $exists?: NestedValue<T, boolean, any>;
38
+ $type?: NestedValue<T, JSPrimitiveType, any>;
36
39
  };
37
40
  export type ArrayOperators<T = any> = {
38
- $arrinc?: PartialPickMatching<T, any[]>;
39
- $arrincall?: PartialPickMatching<T, any[]>;
40
- $size?: PartialOfType<T, number>;
41
+ $arrinc?: DeepPartial<T>;
42
+ $arrincall?: DeepPartial<T>;
43
+ $size?: NestedValue<T, number>;
41
44
  };
42
45
  export type StringOperators<T = any> = {
43
- $regex?: PartialOfType<T, RegExp | string, string>;
44
- $startsWith?: PartialOfType<T, string>;
45
- $endsWith?: PartialOfType<T, string>;
46
+ $regex?: NestedValue<T, RegExp | string, string>;
47
+ $startsWith?: NestedValue<T, string, string>;
48
+ $endsWith?: NestedValue<T, string, string>;
46
49
  };
47
50
  export type OtherOperators<T = any> = {
48
- $subset?: Partial<Record<keyof T, T[keyof T]>>;
51
+ $subset?: DeepPartial<T>;
49
52
  };
50
53
  export type PredefinedSearchOperators<T = any> = LogicalOperators<T> & ComparisonOperators<T> & TypeAndExistenceOperators<T> & ArrayOperators<T> & StringOperators<T> & OtherOperators<T>;
51
- export type SearchOptions<T = any> = PredefinedSearchOperators<T> & Arg<T>;
54
+ export type SearchOptions<T = any> = PredefinedSearchOperators<T> & DeepPartial<T> & Record<string, any>;
55
+ export interface VContext {
56
+ [key: string]: any;
57
+ }
52
58
  export type ArrayUpdater<T = any> = {
53
- $push?: PartialOfType<T, any>;
54
- $pushset?: PartialOfType<T, any>;
55
- $pull?: PartialOfType<T, any>;
56
- $pullall?: PartialOfType<T, any>;
59
+ $push?: NestedValue<T, any>;
60
+ $pushset?: NestedValue<T, any>;
61
+ $pull?: NestedValue<T, any>;
62
+ $pullall?: NestedValue<T, any>;
57
63
  };
58
64
  export type ObjectUpdater<T = any> = {
59
- $merge?: PartialOfType<T, any>;
60
- $deepMerge?: PartialOfType<T, any>;
65
+ $merge?: NestedValue<T, any>;
66
+ $deepMerge?: NestedValue<T, any>;
61
67
  };
62
68
  export type ValueUpdater<T = any> = {
63
- $inc?: PartialOfType<T, number>;
64
- $dec?: PartialOfType<T, number>;
65
- $unset?: PartialOfType<T, any>;
66
- $rename?: PartialOfType<T, any>;
67
- $set?: PartialOfType<T, any>;
69
+ $inc?: NestedValue<T, number>;
70
+ $dec?: NestedValue<T, number>;
71
+ $unset?: NestedValue<T, any>;
72
+ $rename?: NestedValue<T, any>;
73
+ $set?: NestedValue<T, any>;
68
74
  };
69
- export type UpdaterArg<T = any> = ArrayUpdater<T> & ObjectUpdater<T> & ValueUpdater<T> & Arg<T>;
75
+ export type UpdaterArg<T = any> = ArrayUpdater<T> & ObjectUpdater<T> & ValueUpdater<T> & DeepPartial<T> & Record<string, any>;
70
76
  export type Arg<T = any> = {
71
77
  [K in keyof T]?: any;
72
78
  } & Record<string, any>;
@@ -74,9 +80,12 @@ export type SearchFunc<T = any> = (data: T, context: VContext) => boolean;
74
80
  export type UpdaterFunc<T = any> = (data: T, context: VContext) => boolean;
75
81
  export type Search<T = any> = SearchOptions<T> | SearchFunc<T>;
76
82
  export type Updater<T = any> = UpdaterArg<T> | UpdaterArg<T>[] | UpdaterFunc<T>;
83
+ export interface Data {
84
+ [key: string]: any;
85
+ }
77
86
  export interface DbFindOpts<T = any> {
78
87
  reverse?: boolean;
79
- max?: number;
88
+ limit?: number;
80
89
  offset?: number;
81
90
  sortBy?: KeysMatching<T, any>;
82
91
  sortAsc?: boolean;
@@ -90,15 +99,15 @@ declare class CollectionManager<D = Data> {
90
99
  private db;
91
100
  private collection;
92
101
  constructor(db: ValtheraCompatible, collection: string);
93
- add<T = Data>(data: Arg<T & D>, id_gen?: boolean): Promise<T>;
94
- find<T = Data>(search?: Search<T & D>, options?: DbFindOpts<T & Data>, findOpts?: FindOpts<T & Data>, context?: VContext): Promise<T[]>;
95
- findOne<T = Data>(search?: Search<T & Data>, findOpts?: FindOpts<T & Data>, context?: VContext): Promise<T>;
96
- update<T = Data>(search: Search<T & Data>, updater: Updater<T & Data>, context?: VContext): Promise<boolean>;
97
- updateOne<T = Data>(search: Search<T & Data>, updater: Updater<T & Data>, context?: VContext): Promise<boolean>;
98
- remove<T = Data>(search: Search<T & Data>, context?: VContext): Promise<boolean>;
99
- removeOne<T = Data>(search: Search<T & Data>, context?: VContext): Promise<boolean>;
100
- updateOneOrAdd<T = Data>(search: Search<T & Data>, updater: Updater<T & Data>, { add_arg, context, id_gen }: UpdateOneOrAdd<T & Data>): Promise<boolean>;
101
- toggleOne<T = Data>(search: Search<T & Data>, data?: Arg<T & Data>, context?: VContext): Promise<boolean>;
102
+ add(data: Arg<D>, id_gen?: boolean): Promise<D>;
103
+ find(search?: Search<D>, options?: DbFindOpts<D>, findOpts?: FindOpts<D>, context?: VContext): Promise<D[]>;
104
+ findOne(search?: Search<D>, findOpts?: FindOpts<D>, context?: VContext): Promise<D>;
105
+ update(search: Search<D>, updater: Updater<D>, context?: VContext): Promise<boolean>;
106
+ updateOne(search: Search<D>, updater: Updater<D>, context?: VContext): Promise<boolean>;
107
+ remove(search: Search<D>, context?: VContext): Promise<boolean>;
108
+ removeOne(search: Search<D>, context?: VContext): Promise<boolean>;
109
+ updateOneOrAdd(search: Search<D>, updater: Updater<D>, { add_arg, context, id_gen }?: UpdateOneOrAdd<D>): Promise<boolean>;
110
+ toggleOne(search: Search<D>, data?: Arg<D>, context?: VContext): Promise<boolean>;
102
111
  }
103
112
  export interface ValtheraCompatible {
104
113
  c(collection: string): CollectionManager;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wxn0brp/vql-client",
3
- "version": "0.2.6",
3
+ "version": "0.2.8",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "description": "VQL Client",