@sprucelabs/data-stores 28.3.137 → 28.3.139

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.
@@ -1,11 +1,10 @@
1
- import { QuerySelector } from '../databases/mongo.types';
2
- type QueryPredicate<Query, K extends keyof Query> = Query[K] | QuerySelector<Query[K]> | string;
1
+ import { QuerySelector, RootQuerySelector } from '../databases/mongo.types';
3
2
  type Obj = Record<string, any>;
4
- export type QueryBuilder<Query> = {
5
- [K in keyof Query]?: QueryPredicate<Query, K>;
3
+ export type QueryBuilder<Query, Keys extends Paths<Query> = Paths<Query>> = {
4
+ [K in Keys]?: QuerySelector<TypeAtPath<Query, K>> | TypeAtPath<Query, K>;
6
5
  } & {
7
6
  id?: string | QuerySelector<string>;
8
- };
7
+ } & RootQuerySelector<Query>;
9
8
  export interface QuerySortField {
10
9
  field: string;
11
10
  direction: 'asc' | 'desc';
@@ -16,15 +15,37 @@ export interface QueryOptions {
16
15
  sort?: QuerySortField[];
17
16
  includeFields?: string[];
18
17
  }
19
- export type FlattenAndPathKeys<O extends Obj, T extends Obj = PathKeys<O>> = Flatten<T>;
20
- export type Flatten<T extends Obj> = Pick<T, NonObjectKeysOf<T>> & UnionToIntersection<ObjectValuesOf<T>>;
21
18
  export type PathKeys<Query extends Obj, Prefix extends string = ''> = {
22
19
  [K in Extract<keyof Query, string> as `${Prefix}${K}`]: Query[K] extends Obj ? PathKeys<Query[K], `${K}.`> : Query[K];
23
20
  };
24
- type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (k: infer I) => void ? I : never;
25
- type ValuesOf<T> = T[keyof T];
26
- type ObjectValuesOf<T> = Exclude<Extract<ValuesOf<T>, object>, any[]>;
27
- type NonObjectKeysOf<T> = {
28
- [K in keyof T]: T[K] extends any[] ? K : T[K] extends Obj ? never : K;
29
- }[keyof T];
21
+ type Join<K, P> = K extends string | number ? P extends string | number ? `${K}${'' extends P ? '' : '.'}${P}` : never : never;
22
+ type Prev = [
23
+ never,
24
+ 0,
25
+ 1,
26
+ 2,
27
+ 3,
28
+ 4,
29
+ 5,
30
+ 6,
31
+ 7,
32
+ 8,
33
+ 9,
34
+ 10,
35
+ 11,
36
+ 12,
37
+ 13,
38
+ 14,
39
+ 15,
40
+ 16,
41
+ 17,
42
+ 18,
43
+ 19,
44
+ 20,
45
+ ...0[]
46
+ ];
47
+ type Paths<T, D extends number = 3> = [D] extends [never] ? never : T extends object ? {
48
+ [K in keyof T]-?: K extends string | number ? `${K}` | Join<K, Paths<T[K], Prev[D]>> : never;
49
+ }[keyof T] : '';
50
+ type TypeAtPath<T, P extends string> = P extends `${infer K}.${infer Rest}` ? K extends keyof T ? TypeAtPath<T[K], Rest> : never : P extends keyof T ? T[P] : never;
30
51
  export {};
@@ -1,11 +1,10 @@
1
- import { QuerySelector } from '../databases/mongo.types';
2
- type QueryPredicate<Query, K extends keyof Query> = Query[K] | QuerySelector<Query[K]> | string;
1
+ import { QuerySelector, RootQuerySelector } from '../databases/mongo.types';
3
2
  type Obj = Record<string, any>;
4
- export type QueryBuilder<Query> = {
5
- [K in keyof Query]?: QueryPredicate<Query, K>;
3
+ export type QueryBuilder<Query, Keys extends Paths<Query> = Paths<Query>> = {
4
+ [K in Keys]?: QuerySelector<TypeAtPath<Query, K>> | TypeAtPath<Query, K>;
6
5
  } & {
7
6
  id?: string | QuerySelector<string>;
8
- };
7
+ } & RootQuerySelector<Query>;
9
8
  export interface QuerySortField {
10
9
  field: string;
11
10
  direction: 'asc' | 'desc';
@@ -16,15 +15,37 @@ export interface QueryOptions {
16
15
  sort?: QuerySortField[];
17
16
  includeFields?: string[];
18
17
  }
19
- export type FlattenAndPathKeys<O extends Obj, T extends Obj = PathKeys<O>> = Flatten<T>;
20
- export type Flatten<T extends Obj> = Pick<T, NonObjectKeysOf<T>> & UnionToIntersection<ObjectValuesOf<T>>;
21
18
  export type PathKeys<Query extends Obj, Prefix extends string = ''> = {
22
19
  [K in Extract<keyof Query, string> as `${Prefix}${K}`]: Query[K] extends Obj ? PathKeys<Query[K], `${K}.`> : Query[K];
23
20
  };
24
- type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (k: infer I) => void ? I : never;
25
- type ValuesOf<T> = T[keyof T];
26
- type ObjectValuesOf<T> = Exclude<Extract<ValuesOf<T>, object>, any[]>;
27
- type NonObjectKeysOf<T> = {
28
- [K in keyof T]: T[K] extends any[] ? K : T[K] extends Obj ? never : K;
29
- }[keyof T];
21
+ type Join<K, P> = K extends string | number ? P extends string | number ? `${K}${'' extends P ? '' : '.'}${P}` : never : never;
22
+ type Prev = [
23
+ never,
24
+ 0,
25
+ 1,
26
+ 2,
27
+ 3,
28
+ 4,
29
+ 5,
30
+ 6,
31
+ 7,
32
+ 8,
33
+ 9,
34
+ 10,
35
+ 11,
36
+ 12,
37
+ 13,
38
+ 14,
39
+ 15,
40
+ 16,
41
+ 17,
42
+ 18,
43
+ 19,
44
+ 20,
45
+ ...0[]
46
+ ];
47
+ type Paths<T, D extends number = 3> = [D] extends [never] ? never : T extends object ? {
48
+ [K in keyof T]-?: K extends string | number ? `${K}` | Join<K, Paths<T[K], Prev[D]>> : never;
49
+ }[keyof T] : '';
50
+ type TypeAtPath<T, P extends string> = P extends `${infer K}.${infer Rest}` ? K extends keyof T ? TypeAtPath<T[K], Rest> : never : P extends keyof T ? T[P] : never;
30
51
  export {};
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "publishConfig": {
4
4
  "access": "public"
5
5
  },
6
- "version": "28.3.137",
6
+ "version": "28.3.139",
7
7
  "files": [
8
8
  "build/**/*",
9
9
  "!build/__tests__",
@@ -79,7 +79,7 @@
79
79
  "@sprucelabs/resolve-path-aliases": "^2.0.456",
80
80
  "@sprucelabs/semantic-release": "^5.0.2",
81
81
  "@sprucelabs/test": "^9.0.50",
82
- "@sprucelabs/test-utils": "^5.1.427",
82
+ "@sprucelabs/test-utils": "^5.1.430",
83
83
  "@types/lodash": "^4.17.10",
84
84
  "@types/node": "^22.7.5",
85
85
  "chokidar-cli": "^3.0.0",