@kronor/dtv 4.1.0 → 5.1.0
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/README.md +6 -0
- package/bin/dtv.js +24 -0
- package/dist/assets/{index-fwXiEkID.js → index-JkFoTAyM.js} +1 -1
- package/dist/cli/commands/init.js +106 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/typegen.js +26 -0
- package/dist/cli/commands/typegen.js.map +1 -0
- package/dist/cli/config/loadConfig.js +101 -0
- package/dist/cli/config/loadConfig.js.map +1 -0
- package/dist/cli/config/types.js +2 -0
- package/dist/cli/config/types.js.map +1 -0
- package/dist/cli/dtv.js +12 -0
- package/dist/cli/dtv.js.map +1 -0
- package/dist/cli/typegen/runTypegen.js +638 -0
- package/dist/cli/typegen/runTypegen.js.map +1 -0
- package/dist/cli/typegen/schemaToTs.js +167 -0
- package/dist/cli/typegen/schemaToTs.js.map +1 -0
- package/dist/index.es.js +44 -38
- package/dist/index.html +1 -1
- package/dist/types/cli/commands/init.d.ts +3 -0
- package/dist/types/cli/commands/init.d.ts.map +1 -0
- package/dist/types/cli/commands/typegen.d.ts +3 -0
- package/dist/types/cli/commands/typegen.d.ts.map +1 -0
- package/dist/types/cli/config/loadConfig.d.ts +3 -0
- package/dist/types/cli/config/loadConfig.d.ts.map +1 -0
- package/dist/types/cli/config/types.d.ts +34 -0
- package/dist/types/cli/config/types.d.ts.map +1 -0
- package/dist/types/cli/dtv.d.ts +2 -0
- package/dist/types/cli/dtv.d.ts.map +1 -0
- package/dist/types/cli/typegen/runTypegen.d.ts +9 -0
- package/dist/types/cli/typegen/runTypegen.d.ts.map +1 -0
- package/dist/types/cli/typegen/schemaToTs.d.ts +13 -0
- package/dist/types/cli/typegen/schemaToTs.d.ts.map +1 -0
- package/dist/types/dsl/columns.d.ts +50 -23
- package/dist/types/dsl/columns.d.ts.map +1 -1
- package/dist/types/dsl/filterExpr.d.ts +130 -46
- package/dist/types/dsl/filterExpr.d.ts.map +1 -1
- package/dist/types/dsl/filters.d.ts +72 -2
- package/dist/types/dsl/filters.d.ts.map +1 -1
- package/dist/types/dsl/internal/queryForRow.d.ts +42 -0
- package/dist/types/dsl/internal/queryForRow.d.ts.map +1 -0
- package/dist/types/framework/column-definition.d.ts +205 -24
- package/dist/types/framework/column-definition.d.ts.map +1 -1
- package/dist/types/framework/hasura.d.ts +2 -2
- package/dist/types/framework/hasura.d.ts.map +1 -1
- package/dist/types/framework/native-runtime/index.d.ts +2 -2
- package/dist/types/framework/typelevel.d.ts +6 -0
- package/dist/types/framework/typelevel.d.ts.map +1 -0
- package/dist/types/lib/index.d.ts +2 -0
- package/dist/types/lib/index.d.ts.map +1 -1
- package/dist/types/typegen/index.d.ts +27 -0
- package/dist/types/typegen/index.d.ts.map +1 -0
- package/docs/typegen.md +90 -0
- package/package.json +18 -5
|
@@ -2,79 +2,163 @@ import type { ConditionOnlyTransform, FilterControl, FilterExpr as FilterExprTyp
|
|
|
2
2
|
export type { ConditionOnlyTransform, FilterField, FilterTransform };
|
|
3
3
|
export type FilterExpr = FilterExprType;
|
|
4
4
|
export declare const FilterExpr: {
|
|
5
|
-
equals: (args: {
|
|
6
|
-
field:
|
|
5
|
+
equals: <const Field extends FilterField>(args: {
|
|
6
|
+
field: Field;
|
|
7
7
|
control: FilterControl;
|
|
8
8
|
transform?: FilterTransform;
|
|
9
|
-
}) =>
|
|
10
|
-
|
|
11
|
-
field:
|
|
9
|
+
}) => {
|
|
10
|
+
type: "equals";
|
|
11
|
+
field: Field;
|
|
12
|
+
value: FilterControl;
|
|
13
|
+
transform?: FilterTransform;
|
|
14
|
+
};
|
|
15
|
+
notEquals: <const Field extends FilterField>(args: {
|
|
16
|
+
field: Field;
|
|
12
17
|
control: FilterControl;
|
|
13
18
|
transform?: FilterTransform;
|
|
14
|
-
}) =>
|
|
15
|
-
|
|
16
|
-
field:
|
|
19
|
+
}) => {
|
|
20
|
+
type: "notEquals";
|
|
21
|
+
field: Field;
|
|
22
|
+
value: FilterControl;
|
|
23
|
+
transform?: FilterTransform;
|
|
24
|
+
};
|
|
25
|
+
greaterThan: <const Field extends FilterField>(args: {
|
|
26
|
+
field: Field;
|
|
17
27
|
control: FilterControl;
|
|
18
28
|
transform?: FilterTransform;
|
|
19
|
-
}) =>
|
|
20
|
-
|
|
21
|
-
field:
|
|
29
|
+
}) => {
|
|
30
|
+
type: "greaterThan";
|
|
31
|
+
field: Field;
|
|
32
|
+
value: FilterControl;
|
|
33
|
+
transform?: FilterTransform;
|
|
34
|
+
};
|
|
35
|
+
lessThan: <const Field extends FilterField>(args: {
|
|
36
|
+
field: Field;
|
|
22
37
|
control: FilterControl;
|
|
23
38
|
transform?: FilterTransform;
|
|
24
|
-
}) =>
|
|
25
|
-
|
|
26
|
-
field:
|
|
39
|
+
}) => {
|
|
40
|
+
type: "lessThan";
|
|
41
|
+
field: Field;
|
|
42
|
+
value: FilterControl;
|
|
43
|
+
transform?: FilterTransform;
|
|
44
|
+
};
|
|
45
|
+
greaterThanOrEqual: <const Field extends FilterField>(args: {
|
|
46
|
+
field: Field;
|
|
27
47
|
control: FilterControl;
|
|
28
48
|
transform?: FilterTransform;
|
|
29
|
-
}) =>
|
|
30
|
-
|
|
31
|
-
field:
|
|
49
|
+
}) => {
|
|
50
|
+
type: "greaterThanOrEqual";
|
|
51
|
+
field: Field;
|
|
52
|
+
value: FilterControl;
|
|
53
|
+
transform?: FilterTransform;
|
|
54
|
+
};
|
|
55
|
+
lessThanOrEqual: <const Field extends FilterField>(args: {
|
|
56
|
+
field: Field;
|
|
32
57
|
control: FilterControl;
|
|
33
58
|
transform?: FilterTransform;
|
|
34
|
-
}) =>
|
|
35
|
-
|
|
36
|
-
field:
|
|
59
|
+
}) => {
|
|
60
|
+
type: "lessThanOrEqual";
|
|
61
|
+
field: Field;
|
|
62
|
+
value: FilterControl;
|
|
63
|
+
transform?: FilterTransform;
|
|
64
|
+
};
|
|
65
|
+
in: <const Field extends FilterField>(args: {
|
|
66
|
+
field: Field;
|
|
37
67
|
control: FilterControl;
|
|
38
68
|
transform?: FilterTransform;
|
|
39
|
-
}) =>
|
|
40
|
-
|
|
41
|
-
field:
|
|
69
|
+
}) => {
|
|
70
|
+
type: "in";
|
|
71
|
+
field: Field;
|
|
72
|
+
value: FilterControl;
|
|
73
|
+
transform?: FilterTransform;
|
|
74
|
+
};
|
|
75
|
+
notIn: <const Field extends FilterField>(args: {
|
|
76
|
+
field: Field;
|
|
42
77
|
control: FilterControl;
|
|
43
78
|
transform?: FilterTransform;
|
|
44
|
-
}) =>
|
|
45
|
-
|
|
46
|
-
field:
|
|
79
|
+
}) => {
|
|
80
|
+
type: "notIn";
|
|
81
|
+
field: Field;
|
|
82
|
+
value: FilterControl;
|
|
83
|
+
transform?: FilterTransform;
|
|
84
|
+
};
|
|
85
|
+
like: <const Field extends FilterField>(args: {
|
|
86
|
+
field: Field;
|
|
47
87
|
control: FilterControl;
|
|
48
88
|
transform?: FilterTransform;
|
|
49
|
-
}) =>
|
|
50
|
-
|
|
51
|
-
field:
|
|
89
|
+
}) => {
|
|
90
|
+
type: "like";
|
|
91
|
+
field: Field;
|
|
92
|
+
value: FilterControl;
|
|
93
|
+
transform?: FilterTransform;
|
|
94
|
+
};
|
|
95
|
+
iLike: <const Field extends FilterField>(args: {
|
|
96
|
+
field: Field;
|
|
52
97
|
control: FilterControl;
|
|
53
98
|
transform?: FilterTransform;
|
|
54
|
-
}) =>
|
|
55
|
-
|
|
56
|
-
field:
|
|
99
|
+
}) => {
|
|
100
|
+
type: "iLike";
|
|
101
|
+
field: Field;
|
|
102
|
+
value: FilterControl;
|
|
103
|
+
transform?: FilterTransform;
|
|
104
|
+
};
|
|
105
|
+
isNull: <const Field extends FilterField>(args: {
|
|
106
|
+
field: Field;
|
|
57
107
|
control: FilterControl;
|
|
58
108
|
transform?: FilterTransform;
|
|
59
|
-
}) =>
|
|
109
|
+
}) => {
|
|
110
|
+
type: "isNull";
|
|
111
|
+
field: Field;
|
|
112
|
+
value: FilterControl;
|
|
113
|
+
transform?: FilterTransform;
|
|
114
|
+
};
|
|
60
115
|
computedCondition: (args: {
|
|
61
116
|
control: FilterControl;
|
|
62
117
|
transform: ConditionOnlyTransform;
|
|
63
|
-
}) =>
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
118
|
+
}) => {
|
|
119
|
+
type: "equals";
|
|
120
|
+
field: {
|
|
121
|
+
or: [];
|
|
122
|
+
};
|
|
123
|
+
value: FilterControl;
|
|
124
|
+
transform: ConditionOnlyTransform;
|
|
125
|
+
};
|
|
126
|
+
and: <const Filters extends readonly FilterExprType[]>(args: {
|
|
127
|
+
filters: Filters;
|
|
128
|
+
}) => {
|
|
129
|
+
type: "and";
|
|
130
|
+
filters: [...Filters];
|
|
131
|
+
};
|
|
132
|
+
or: <const Filters extends readonly FilterExprType[]>(args: {
|
|
133
|
+
filters: Filters;
|
|
134
|
+
}) => {
|
|
135
|
+
type: "or";
|
|
136
|
+
filters: [...Filters];
|
|
137
|
+
};
|
|
138
|
+
not: <const Filter extends FilterExprType>(args: {
|
|
139
|
+
filter: Filter;
|
|
140
|
+
}) => {
|
|
141
|
+
type: "not";
|
|
142
|
+
filter: Filter;
|
|
143
|
+
};
|
|
144
|
+
range: <const Field extends FilterField>(args: {
|
|
145
|
+
field: Field;
|
|
75
146
|
control: (options: any) => FilterControl;
|
|
76
147
|
transform?: FilterTransform;
|
|
77
|
-
}) =>
|
|
148
|
+
}) => {
|
|
149
|
+
type: "and";
|
|
150
|
+
filters: [{
|
|
151
|
+
type: "greaterThanOrEqual";
|
|
152
|
+
field: Field;
|
|
153
|
+
value: FilterControl;
|
|
154
|
+
transform?: FilterTransform;
|
|
155
|
+
}, {
|
|
156
|
+
type: "lessThanOrEqual";
|
|
157
|
+
field: Field;
|
|
158
|
+
value: FilterControl;
|
|
159
|
+
transform?: FilterTransform;
|
|
160
|
+
}];
|
|
161
|
+
};
|
|
78
162
|
allOperators: {
|
|
79
163
|
label: string;
|
|
80
164
|
value: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filterExpr.d.ts","sourceRoot":"","sources":["../../../src/dsl/filterExpr.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,sBAAsB,EACtB,aAAa,EACb,UAAU,IAAI,cAAc,EAC5B,WAAW,EACX,eAAe,EAClB,MAAM,sBAAsB,CAAC;AAG9B,YAAY,EAAE,sBAAsB,EAAE,WAAW,EAAE,eAAe,EAAE,CAAC;AACrE,MAAM,MAAM,UAAU,GAAG,cAAc,CAAC;AAGxC,eAAO,MAAM,UAAU;mBACJ;QAAE,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"filterExpr.d.ts","sourceRoot":"","sources":["../../../src/dsl/filterExpr.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,sBAAsB,EACtB,aAAa,EACb,UAAU,IAAI,cAAc,EAC5B,WAAW,EACX,eAAe,EAClB,MAAM,sBAAsB,CAAC;AAG9B,YAAY,EAAE,sBAAsB,EAAE,WAAW,EAAE,eAAe,EAAE,CAAC;AACrE,MAAM,MAAM,UAAU,GAAG,cAAc,CAAC;AAGxC,eAAO,MAAM,UAAU;mBACJ,KAAK,SAAS,WAAW,QAAQ;QAAE,KAAK,EAAE,KAAK,CAAC;QAAC,OAAO,EAAE,aAAa,CAAC;QAAC,SAAS,CAAC,EAAE,eAAe,CAAA;KAAE,KAAG;QACpH,IAAI,EAAE,QAAQ,CAAC;QACf,KAAK,EAAE,KAAK,CAAC;QACb,KAAK,EAAE,aAAa,CAAC;QACrB,SAAS,CAAC,EAAE,eAAe,CAAC;KAC/B;sBAQiB,KAAK,SAAS,WAAW,QAAQ;QAAE,KAAK,EAAE,KAAK,CAAC;QAAC,OAAO,EAAE,aAAa,CAAC;QAAC,SAAS,CAAC,EAAE,eAAe,CAAA;KAAE,KAAG;QACvH,IAAI,EAAE,WAAW,CAAC;QAClB,KAAK,EAAE,KAAK,CAAC;QACb,KAAK,EAAE,aAAa,CAAC;QACrB,SAAS,CAAC,EAAE,eAAe,CAAC;KAC/B;wBAQmB,KAAK,SAAS,WAAW,QAAQ;QAAE,KAAK,EAAE,KAAK,CAAC;QAAC,OAAO,EAAE,aAAa,CAAC;QAAC,SAAS,CAAC,EAAE,eAAe,CAAA;KAAE,KAAG;QACzH,IAAI,EAAE,aAAa,CAAC;QACpB,KAAK,EAAE,KAAK,CAAC;QACb,KAAK,EAAE,aAAa,CAAC;QACrB,SAAS,CAAC,EAAE,eAAe,CAAC;KAC/B;qBAQgB,KAAK,SAAS,WAAW,QAAQ;QAAE,KAAK,EAAE,KAAK,CAAC;QAAC,OAAO,EAAE,aAAa,CAAC;QAAC,SAAS,CAAC,EAAE,eAAe,CAAA;KAAE,KAAG;QACtH,IAAI,EAAE,UAAU,CAAC;QACjB,KAAK,EAAE,KAAK,CAAC;QACb,KAAK,EAAE,aAAa,CAAC;QACrB,SAAS,CAAC,EAAE,eAAe,CAAC;KAC/B;+BAQ0B,KAAK,SAAS,WAAW,QAAQ;QAAE,KAAK,EAAE,KAAK,CAAC;QAAC,OAAO,EAAE,aAAa,CAAC;QAAC,SAAS,CAAC,EAAE,eAAe,CAAA;KAAE,KAAG;QAChI,IAAI,EAAE,oBAAoB,CAAC;QAC3B,KAAK,EAAE,KAAK,CAAC;QACb,KAAK,EAAE,aAAa,CAAC;QACrB,SAAS,CAAC,EAAE,eAAe,CAAC;KAC/B;4BAQuB,KAAK,SAAS,WAAW,QAAQ;QAAE,KAAK,EAAE,KAAK,CAAC;QAAC,OAAO,EAAE,aAAa,CAAC;QAAC,SAAS,CAAC,EAAE,eAAe,CAAA;KAAE,KAAG;QAC7H,IAAI,EAAE,iBAAiB,CAAC;QACxB,KAAK,EAAE,KAAK,CAAC;QACb,KAAK,EAAE,aAAa,CAAC;QACrB,SAAS,CAAC,EAAE,eAAe,CAAC;KAC/B;eAQU,KAAK,SAAS,WAAW,QAAQ;QAAE,KAAK,EAAE,KAAK,CAAC;QAAC,OAAO,EAAE,aAAa,CAAC;QAAC,SAAS,CAAC,EAAE,eAAe,CAAA;KAAE,KAAG;QAChH,IAAI,EAAE,IAAI,CAAC;QACX,KAAK,EAAE,KAAK,CAAC;QACb,KAAK,EAAE,aAAa,CAAC;QACrB,SAAS,CAAC,EAAE,eAAe,CAAC;KAC/B;kBAQa,KAAK,SAAS,WAAW,QAAQ;QAAE,KAAK,EAAE,KAAK,CAAC;QAAC,OAAO,EAAE,aAAa,CAAC;QAAC,SAAS,CAAC,EAAE,eAAe,CAAA;KAAE,KAAG;QACnH,IAAI,EAAE,OAAO,CAAC;QACd,KAAK,EAAE,KAAK,CAAC;QACb,KAAK,EAAE,aAAa,CAAC;QACrB,SAAS,CAAC,EAAE,eAAe,CAAC;KAC/B;iBAQY,KAAK,SAAS,WAAW,QAAQ;QAAE,KAAK,EAAE,KAAK,CAAC;QAAC,OAAO,EAAE,aAAa,CAAC;QAAC,SAAS,CAAC,EAAE,eAAe,CAAA;KAAE,KAAG;QAClH,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,KAAK,CAAC;QACb,KAAK,EAAE,aAAa,CAAC;QACrB,SAAS,CAAC,EAAE,eAAe,CAAC;KAC/B;kBAQa,KAAK,SAAS,WAAW,QAAQ;QAAE,KAAK,EAAE,KAAK,CAAC;QAAC,OAAO,EAAE,aAAa,CAAC;QAAC,SAAS,CAAC,EAAE,eAAe,CAAA;KAAE,KAAG;QACnH,IAAI,EAAE,OAAO,CAAC;QACd,KAAK,EAAE,KAAK,CAAC;QACb,KAAK,EAAE,aAAa,CAAC;QACrB,SAAS,CAAC,EAAE,eAAe,CAAC;KAC/B;mBAQc,KAAK,SAAS,WAAW,QAAQ;QAAE,KAAK,EAAE,KAAK,CAAC;QAAC,OAAO,EAAE,aAAa,CAAC;QAAC,SAAS,CAAC,EAAE,eAAe,CAAA;KAAE,KAAG;QACpH,IAAI,EAAE,QAAQ,CAAC;QACf,KAAK,EAAE,KAAK,CAAC;QACb,KAAK,EAAE,aAAa,CAAC;QACrB,SAAS,CAAC,EAAE,eAAe,CAAC;KAC/B;8BAUyB;QAAE,OAAO,EAAE,aAAa,CAAC;QAAC,SAAS,EAAE,sBAAsB,CAAA;KAAE,KAAG;QACtF,IAAI,EAAE,QAAQ,CAAC;QACf,KAAK,EAAE;YAAE,EAAE,EAAE,EAAE,CAAA;SAAE,CAAC;QAClB,KAAK,EAAE,aAAa,CAAC;QACrB,SAAS,EAAE,sBAAsB,CAAC;KACrC;gBAQW,OAAO,SAAS,SAAS,cAAc,EAAE,QAAQ;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,KAAG;QAChF,IAAI,EAAE,KAAK,CAAC;QACZ,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC;KACzB;eACU,OAAO,SAAS,SAAS,cAAc,EAAE,QAAQ;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,KAAG;QAC/E,IAAI,EAAE,IAAI,CAAC;QACX,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC;KACzB;gBACW,MAAM,SAAS,cAAc,QAAQ;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,KAAG;QAClE,IAAI,EAAE,KAAK,CAAC;QACZ,MAAM,EAAE,MAAM,CAAC;KAClB;kBACa,KAAK,SAAS,WAAW,QAAQ;QAAE,KAAK,EAAE,KAAK,CAAC;QAAC,OAAO,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,aAAa,CAAC;QAAC,SAAS,CAAC,EAAE,eAAe,CAAA;KAAE,KAAG;QACrI,IAAI,EAAE,KAAK,CAAC;QACZ,OAAO,EAAE,CACL;YACI,IAAI,EAAE,oBAAoB,CAAC;YAC3B,KAAK,EAAE,KAAK,CAAC;YACb,KAAK,EAAE,aAAa,CAAC;YACrB,SAAS,CAAC,EAAE,eAAe,CAAC;SAC/B,EACD;YACI,IAAI,EAAE,iBAAiB,CAAC;YACxB,KAAK,EAAE,KAAK,CAAC;YACb,KAAK,EAAE,aAAa,CAAC;YACrB,SAAS,CAAC,EAAE,eAAe,CAAC;SAC/B,CACJ,CAAC;KACL;;;;;CASJ,CAAC;AAEF,eAAe,UAAU,CAAC"}
|
|
@@ -1,8 +1,70 @@
|
|
|
1
1
|
import type { FilterExpr, FilterField, FilterSchema, FilterGroup, FilterGroups, FilterTransform } from '../framework/filters';
|
|
2
|
+
import type { FilterControl } from '../framework/filters';
|
|
2
3
|
export type { FilterField, FilterSchema, FilterGroup, FilterGroups, FilterTransform };
|
|
4
|
+
type StringKeyOf<Row> = Extract<keyof Row, string>;
|
|
5
|
+
type MutableTuple<T extends readonly unknown[]> = [...T];
|
|
6
|
+
type UnwrapArray<T> = T extends readonly (infer E)[] ? E : T;
|
|
7
|
+
type NextPathTarget<T> = UnwrapArray<NonNullable<T>>;
|
|
8
|
+
type PrevDepth = {
|
|
9
|
+
0: never;
|
|
10
|
+
1: 0;
|
|
11
|
+
2: 1;
|
|
12
|
+
3: 2;
|
|
13
|
+
4: 3;
|
|
14
|
+
5: 4;
|
|
15
|
+
6: 5;
|
|
16
|
+
7: 6;
|
|
17
|
+
8: 7;
|
|
18
|
+
9: 8;
|
|
19
|
+
10: 9;
|
|
20
|
+
};
|
|
21
|
+
type ShouldRecurse<T> = T extends object ? T extends (...args: never[]) => unknown ? false : T extends Date ? false : true : false;
|
|
22
|
+
/**
|
|
23
|
+
* All valid dotted field paths for a given row type.
|
|
24
|
+
*
|
|
25
|
+
* Examples:
|
|
26
|
+
* - "id"
|
|
27
|
+
* - "customer.email"
|
|
28
|
+
* - "lines.sku" (arrays are traversed via their element type)
|
|
29
|
+
*/
|
|
30
|
+
export type FilterFieldPath<Row, Depth extends keyof PrevDepth = 10> = string extends keyof Row ? string : {
|
|
31
|
+
[K in StringKeyOf<Row>]: ShouldRecurse<NextPathTarget<Row[K]>> extends true ? Depth extends 0 ? K : K | `${K}.${FilterFieldPath<NextPathTarget<Row[K]>, PrevDepth[Depth]>}` : K;
|
|
32
|
+
}[StringKeyOf<Row>];
|
|
33
|
+
export type FilterFieldForRow<Row> = FilterFieldPath<Row> | {
|
|
34
|
+
and: FilterFieldPath<Row>[];
|
|
35
|
+
} | {
|
|
36
|
+
or: FilterFieldPath<Row>[];
|
|
37
|
+
} | {
|
|
38
|
+
or: [];
|
|
39
|
+
};
|
|
40
|
+
export type FilterExprForRow<Row> = ({
|
|
41
|
+
type: 'and';
|
|
42
|
+
filters: FilterExprForRow<Row>[];
|
|
43
|
+
} & Omit<Extract<FilterExpr, {
|
|
44
|
+
type: 'and';
|
|
45
|
+
}>, 'filters'>) | ({
|
|
46
|
+
type: 'or';
|
|
47
|
+
filters: FilterExprForRow<Row>[];
|
|
48
|
+
} & Omit<Extract<FilterExpr, {
|
|
49
|
+
type: 'or';
|
|
50
|
+
}>, 'filters'>) | ({
|
|
51
|
+
type: 'not';
|
|
52
|
+
filter: FilterExprForRow<Row>;
|
|
53
|
+
} & Omit<Extract<FilterExpr, {
|
|
54
|
+
type: 'not';
|
|
55
|
+
}>, 'filter'>) | (Omit<Extract<FilterExpr, {
|
|
56
|
+
field: FilterField;
|
|
57
|
+
value: FilterControl;
|
|
58
|
+
}>, 'field'> & {
|
|
59
|
+
field: FilterFieldForRow<Row>;
|
|
60
|
+
});
|
|
3
61
|
export declare const filterField: {
|
|
4
|
-
and: (...fields:
|
|
5
|
-
|
|
62
|
+
and: <const Fields extends readonly string[]>(...fields: Fields) => FilterField & {
|
|
63
|
+
and: MutableTuple<Fields>;
|
|
64
|
+
};
|
|
65
|
+
or: <const Fields extends readonly string[]>(...fields: Fields) => FilterField & {
|
|
66
|
+
or: MutableTuple<Fields>;
|
|
67
|
+
};
|
|
6
68
|
};
|
|
7
69
|
export declare function filterGroup(args: {
|
|
8
70
|
name: string;
|
|
@@ -10,9 +72,17 @@ export declare function filterGroup(args: {
|
|
|
10
72
|
filters: FilterSchema[];
|
|
11
73
|
}): FilterGroup;
|
|
12
74
|
export declare function filter(args: {
|
|
75
|
+
rowType?: never;
|
|
13
76
|
id: string;
|
|
14
77
|
label: string;
|
|
15
78
|
expression: FilterExpr;
|
|
16
79
|
aiGenerated?: boolean;
|
|
17
80
|
}): FilterSchema;
|
|
81
|
+
export declare function filter<Row, const Expr extends FilterExpr>(args: {
|
|
82
|
+
rowType: Row;
|
|
83
|
+
id: string;
|
|
84
|
+
label: string;
|
|
85
|
+
expression: Expr & FilterExprForRow<Row>;
|
|
86
|
+
aiGenerated?: boolean;
|
|
87
|
+
}): FilterSchema;
|
|
18
88
|
//# sourceMappingURL=filters.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filters.d.ts","sourceRoot":"","sources":["../../../src/dsl/filters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,UAAU,EACV,WAAW,EACX,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,eAAe,EAClB,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"filters.d.ts","sourceRoot":"","sources":["../../../src/dsl/filters.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { ArrayQuery, ArrayQueryForRow, ObjectQueryForRow, QueryForRowSafe, ValueQueryForRow } from '../../framework/column-definition';
|
|
2
|
+
type NonNullish<T> = Exclude<T, null | undefined>;
|
|
3
|
+
type ElemOf<T> = T extends ReadonlyArray<infer E> ? E : never;
|
|
4
|
+
type ArrayFieldKey<Row> = ArrayQueryForRow<Row> extends {
|
|
5
|
+
field: infer F;
|
|
6
|
+
} ? Extract<F, string> : never;
|
|
7
|
+
type ObjectFieldKey<Row> = ObjectQueryForRow<Row> extends {
|
|
8
|
+
field: infer F;
|
|
9
|
+
} ? Extract<F, string> : never;
|
|
10
|
+
export type QueryBuilder<Row> = {
|
|
11
|
+
value: <K extends keyof Row & string>(field: K, args?: {
|
|
12
|
+
path?: string;
|
|
13
|
+
}) => ValueQueryForRow<Row> & {
|
|
14
|
+
field: K;
|
|
15
|
+
};
|
|
16
|
+
object: <K extends ObjectFieldKey<Row> & keyof Row & string, const SelectionSet extends readonly QueryForRowSafe<NonNullish<Row[K]>>[]>(field: K, buildSelection: (q: QueryBuilder<NonNullish<Row[K]>>) => SelectionSet, args?: {
|
|
17
|
+
path?: string;
|
|
18
|
+
}) => ObjectQueryForRow<Row> & {
|
|
19
|
+
field: K;
|
|
20
|
+
selectionSet: SelectionSet;
|
|
21
|
+
};
|
|
22
|
+
array: <K extends ArrayFieldKey<Row> & keyof Row & string, const SelectionSet extends readonly QueryForRowSafe<NonNullish<ElemOf<NonNullish<Row[K]>>>>[]>(field: K, buildSelection: (q: QueryBuilder<NonNullish<ElemOf<NonNullish<Row[K]>>>>) => SelectionSet, args?: {
|
|
23
|
+
path?: string;
|
|
24
|
+
orderBy?: ArrayQuery['orderBy'];
|
|
25
|
+
distinctOn?: ArrayQuery['distinctOn'];
|
|
26
|
+
limit?: number;
|
|
27
|
+
where?: ArrayQuery['where'];
|
|
28
|
+
}) => ArrayQueryForRow<Row> & {
|
|
29
|
+
field: K;
|
|
30
|
+
selectionSet: SelectionSet;
|
|
31
|
+
};
|
|
32
|
+
selection: <SelectionRow>() => QueryBuilder<SelectionRow>;
|
|
33
|
+
__row: Row;
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* Internal typed query builder scoped to a Row type.
|
|
37
|
+
*
|
|
38
|
+
* Not exported via the public DSL surface (yet).
|
|
39
|
+
*/
|
|
40
|
+
export declare function queryForRow<Row>(): QueryBuilder<Row>;
|
|
41
|
+
export {};
|
|
42
|
+
//# sourceMappingURL=queryForRow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queryForRow.d.ts","sourceRoot":"","sources":["../../../../src/dsl/internal/queryForRow.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
import { ReactNode, createElement } from "react";
|
|
2
|
-
import type { HasuraCondition } from
|
|
2
|
+
import type { HasuraCondition } from "./graphql";
|
|
3
3
|
import { FlexRow, FlexColumn, DateTime } from "./cell-renderer-components/LayoutHelpers";
|
|
4
|
-
import { CurrencyAmount } from
|
|
5
|
-
import { majorToMinor, minorToMajor } from
|
|
4
|
+
import { CurrencyAmount } from "./cell-renderer-components/CurrencyAmount";
|
|
5
|
+
import { majorToMinor, minorToMajor } from "./currency";
|
|
6
6
|
import { Mapping } from "./cell-renderer-components/Mapping";
|
|
7
7
|
import { Link } from "./cell-renderer-components/Link";
|
|
8
|
-
import { Tag } from
|
|
9
|
-
import { FilterState } from "./state";
|
|
10
|
-
import { FilterId } from "./filters";
|
|
11
|
-
|
|
12
|
-
|
|
8
|
+
import { Tag } from "primereact/tag";
|
|
9
|
+
import type { FilterState } from "./state";
|
|
10
|
+
import type { FilterId } from "./filters";
|
|
11
|
+
import type { EmptyObject, Simplify, UnionToIntersection } from "./typelevel";
|
|
12
|
+
export type CellRendererProps<Data extends Record<string, any> = Record<string, any>> = {
|
|
13
|
+
data: Data;
|
|
13
14
|
setFilterState: (updater: (currentState: FilterState) => FilterState) => void;
|
|
14
15
|
applyFilters: () => void;
|
|
15
16
|
updateFilterById: (filterId: FilterId, updater: (currentValue: any) => any) => void;
|
|
@@ -33,52 +34,232 @@ export type CellRendererProps = {
|
|
|
33
34
|
*/
|
|
34
35
|
columnDefinition: TableColumnDefinition;
|
|
35
36
|
};
|
|
36
|
-
export type CellRenderer =
|
|
37
|
+
export type CellRenderer<Data extends Record<string, any> = Record<string, any>> = {
|
|
38
|
+
bivarianceHack(props: CellRendererProps<Data>): ReactNode;
|
|
39
|
+
}["bivarianceHack"];
|
|
37
40
|
export type ColumnId = string;
|
|
38
41
|
export type OrderByConfig = {
|
|
39
42
|
key: string;
|
|
40
|
-
direction:
|
|
43
|
+
direction: "ASC" | "DESC";
|
|
41
44
|
};
|
|
42
45
|
export type FieldAlias = {
|
|
43
|
-
type:
|
|
46
|
+
type: "fieldAlias";
|
|
44
47
|
alias: string;
|
|
45
48
|
field: FieldQuery;
|
|
46
49
|
};
|
|
47
50
|
export type ValueQuery = {
|
|
48
|
-
type:
|
|
51
|
+
type: "valueQuery";
|
|
49
52
|
field: string;
|
|
50
53
|
path?: string;
|
|
51
54
|
};
|
|
52
55
|
export type ObjectQuery = {
|
|
53
|
-
type:
|
|
56
|
+
type: "objectQuery";
|
|
54
57
|
field: string;
|
|
55
58
|
path?: string;
|
|
56
|
-
selectionSet: Query[];
|
|
59
|
+
selectionSet: readonly Query[];
|
|
57
60
|
};
|
|
58
61
|
export type ArrayQuery = {
|
|
59
|
-
type:
|
|
62
|
+
type: "arrayQuery";
|
|
60
63
|
field: string;
|
|
61
64
|
path?: string;
|
|
62
65
|
orderBy?: OrderByConfig | OrderByConfig[];
|
|
63
66
|
distinctOn?: string[];
|
|
64
67
|
limit?: number;
|
|
65
68
|
where?: HasuraCondition;
|
|
66
|
-
selectionSet: Query[];
|
|
69
|
+
selectionSet: readonly Query[];
|
|
67
70
|
};
|
|
68
71
|
export type Query = ValueQuery | ObjectQuery | ArrayQuery;
|
|
69
72
|
export type FieldQuery = Query | FieldAlias;
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
+
type ValueFromObjectQuery<Q extends Query> = Q extends {
|
|
74
|
+
type: "objectQuery";
|
|
75
|
+
selectionSet: infer SelectionSet extends readonly Query[];
|
|
76
|
+
} ? DataFromSelectionSet<SelectionSet> : unknown;
|
|
77
|
+
type ValueFromArrayQuery<Q extends Query> = Q extends {
|
|
78
|
+
type: "arrayQuery";
|
|
79
|
+
selectionSet: infer SelectionSet extends readonly Query[];
|
|
80
|
+
} ? Array<DataFromSelectionSet<SelectionSet>> : unknown;
|
|
81
|
+
type ValueFromQuery<Q extends Query> = Q extends {
|
|
82
|
+
type: "valueQuery";
|
|
83
|
+
} ? unknown : Q extends {
|
|
84
|
+
type: "objectQuery";
|
|
85
|
+
} ? ValueFromObjectQuery<Q> : Q extends {
|
|
86
|
+
type: "arrayQuery";
|
|
87
|
+
} ? ValueFromArrayQuery<Q> : unknown;
|
|
88
|
+
type ValueFromFieldQuery<FQ extends FieldQuery> = FQ extends FieldAlias ? ValueFromFieldQuery<FQ["field"]> : FQ extends Query ? ValueFromQuery<FQ> : unknown;
|
|
89
|
+
type DataFromValueQuery<Q extends Query> = Q extends {
|
|
90
|
+
type: "valueQuery";
|
|
91
|
+
field: infer Field extends string;
|
|
92
|
+
} ? {
|
|
93
|
+
[K in Field]: unknown;
|
|
94
|
+
} : EmptyObject;
|
|
95
|
+
type DataFromObjectQuery<Q extends Query> = Q extends {
|
|
96
|
+
type: "objectQuery";
|
|
97
|
+
field: infer Field extends string;
|
|
98
|
+
selectionSet: infer SelectionSet extends readonly Query[];
|
|
99
|
+
} ? {
|
|
100
|
+
[K in Field]: DataFromSelectionSet<SelectionSet>;
|
|
101
|
+
} : EmptyObject;
|
|
102
|
+
type DataFromArrayQuery<Q extends Query> = Q extends {
|
|
103
|
+
type: "arrayQuery";
|
|
104
|
+
field: infer Field extends string;
|
|
105
|
+
selectionSet: infer SelectionSet extends readonly Query[];
|
|
106
|
+
} ? {
|
|
107
|
+
[K in Field]: Array<DataFromSelectionSet<SelectionSet>>;
|
|
108
|
+
} : EmptyObject;
|
|
109
|
+
export type DataFromQuery<Q extends Query> = Q extends {
|
|
110
|
+
type: "valueQuery";
|
|
111
|
+
} ? DataFromValueQuery<Q> : Q extends {
|
|
112
|
+
type: "objectQuery";
|
|
113
|
+
} ? DataFromObjectQuery<Q> : Q extends {
|
|
114
|
+
type: "arrayQuery";
|
|
115
|
+
} ? DataFromArrayQuery<Q> : EmptyObject;
|
|
116
|
+
export type DataFromFieldQuery<FQ extends FieldQuery> = FQ extends FieldAlias ? {
|
|
117
|
+
[K in FQ["alias"]]: ValueFromFieldQuery<FQ["field"]>;
|
|
118
|
+
} : FQ extends Query ? DataFromQuery<FQ> : EmptyObject;
|
|
119
|
+
export type DataFromSelectionSet<SelectionSet extends readonly Query[]> = Simplify<UnionToIntersection<DataFromQuery<SelectionSet[number]>>>;
|
|
120
|
+
export type DataFromFieldQueries<FieldQueries extends readonly FieldQuery[]> = Simplify<UnionToIntersection<DataFromFieldQuery<FieldQueries[number]>>>;
|
|
121
|
+
type PreserveNull<TOriginal, TMapped> = null extends TOriginal ? TMapped | null : TMapped;
|
|
122
|
+
type PreserveUndefined<TOriginal, TMapped> = undefined extends TOriginal ? TMapped | undefined : TMapped;
|
|
123
|
+
type PreserveNullish<TOriginal, TMapped> = PreserveUndefined<TOriginal, PreserveNull<TOriginal, TMapped>>;
|
|
124
|
+
type ValueFromObjectQueryForRow<Row, Q extends Query> = Q extends {
|
|
125
|
+
type: "objectQuery";
|
|
126
|
+
field: infer Field extends string;
|
|
127
|
+
selectionSet: infer SelectionSet extends readonly Query[];
|
|
128
|
+
} ? Field extends keyof Row ? PreserveNullish<Row[Field], NonNullable<Row[Field]> extends object ? DataFromSelectionSetForRow<NonNullable<Row[Field]>, SelectionSet> : unknown> : unknown : unknown;
|
|
129
|
+
type ValueFromArrayQueryForRow<Row, Q extends Query> = Q extends {
|
|
130
|
+
type: "arrayQuery";
|
|
131
|
+
field: infer Field extends string;
|
|
132
|
+
selectionSet: infer SelectionSet extends readonly Query[];
|
|
133
|
+
} ? Field extends keyof Row ? PreserveNullish<Row[Field], NonNullable<Row[Field]> extends ReadonlyArray<infer Elem> ? Array<PreserveNullish<Elem, DataFromSelectionSetForRow<NonNullable<Elem> extends object ? NonNullable<Elem> : Record<string, unknown>, SelectionSet>>> : unknown> : unknown : unknown;
|
|
134
|
+
type ValueFromQueryForRow<Row, Q extends Query> = Q extends {
|
|
135
|
+
type: "valueQuery";
|
|
136
|
+
field: infer Field extends string;
|
|
137
|
+
} ? Row[Field & keyof Row] : Q extends {
|
|
138
|
+
type: "objectQuery";
|
|
139
|
+
} ? ValueFromObjectQueryForRow<Row, Q> : Q extends {
|
|
140
|
+
type: "arrayQuery";
|
|
141
|
+
} ? ValueFromArrayQueryForRow<Row, Q> : unknown;
|
|
142
|
+
type ValueFromFieldQueryForRow<Row, FQ extends FieldQuery> = FQ extends FieldAlias ? ValueFromFieldQueryForRow<Row, FQ["field"]> : FQ extends Query ? ValueFromQueryForRow<Row, FQ> : unknown;
|
|
143
|
+
type DataFromValueQueryForRow<Row, Q extends Query> = Q extends {
|
|
144
|
+
type: "valueQuery";
|
|
145
|
+
field: infer Field extends string;
|
|
146
|
+
} ? {
|
|
147
|
+
[K in Field]: Row[K & keyof Row];
|
|
148
|
+
} : EmptyObject;
|
|
149
|
+
type DataFromObjectQueryForRow<Row, Q extends Query> = Q extends {
|
|
150
|
+
type: "objectQuery";
|
|
151
|
+
field: infer Field extends string;
|
|
152
|
+
selectionSet: infer SelectionSet extends readonly Query[];
|
|
153
|
+
} ? {
|
|
154
|
+
[K in Field]: PreserveNullish<Row[Field & keyof Row], NonNullable<Row[Field & keyof Row]> extends object ? DataFromSelectionSetForRow<NonNullable<Row[Field & keyof Row]>, SelectionSet> : unknown>;
|
|
155
|
+
} : EmptyObject;
|
|
156
|
+
type DataFromArrayQueryForRow<Row, Q extends Query> = Q extends {
|
|
157
|
+
type: "arrayQuery";
|
|
158
|
+
field: infer Field extends string;
|
|
159
|
+
selectionSet: infer SelectionSet extends readonly Query[];
|
|
160
|
+
} ? {
|
|
161
|
+
[K in Field]: PreserveNullish<Row[Field & keyof Row], NonNullable<Row[Field & keyof Row]> extends ReadonlyArray<infer Elem> ? Array<PreserveNullish<Elem, DataFromSelectionSetForRow<NonNullable<Elem> extends object ? NonNullable<Elem> : Record<string, unknown>, SelectionSet>>> : unknown>;
|
|
162
|
+
} : EmptyObject;
|
|
163
|
+
export type DataFromQueryForRow<Row, Q extends Query> = Q extends {
|
|
164
|
+
type: "valueQuery";
|
|
165
|
+
} ? DataFromValueQueryForRow<Row, Q> : Q extends {
|
|
166
|
+
type: "objectQuery";
|
|
167
|
+
} ? DataFromObjectQueryForRow<Row, Q> : Q extends {
|
|
168
|
+
type: "arrayQuery";
|
|
169
|
+
} ? DataFromArrayQueryForRow<Row, Q> : EmptyObject;
|
|
170
|
+
export type DataFromFieldQueryForRow<Row, FQ extends FieldQuery> = FQ extends FieldAlias ? {
|
|
171
|
+
[K in FQ["alias"]]: ValueFromFieldQueryForRow<Row, FQ["field"]>;
|
|
172
|
+
} : FQ extends Query ? DataFromQueryForRow<Row, FQ> : EmptyObject;
|
|
173
|
+
export type DataFromSelectionSetForRow<Row, SelectionSet extends readonly Query[]> = Simplify<UnionToIntersection<DataFromQueryForRow<Row, SelectionSet[number]>>>;
|
|
174
|
+
export type DataFromFieldQueriesForRow<Row, FieldQueries extends readonly FieldQuery[]> = Simplify<UnionToIntersection<DataFromFieldQueryForRow<Row, FieldQueries[number]>>>;
|
|
175
|
+
type ExtractTopLevelKey<FQ extends FieldQuery> = FQ extends {
|
|
176
|
+
type: "fieldAlias";
|
|
177
|
+
alias: infer Alias extends string;
|
|
178
|
+
} ? Alias : FQ extends {
|
|
179
|
+
field: infer Field extends string;
|
|
180
|
+
} ? Field : never;
|
|
181
|
+
type HasWideTopLevelKeys<FieldQueries extends readonly FieldQuery[]> = string extends ExtractTopLevelKey<FieldQueries[number]> ? true : false;
|
|
182
|
+
/**
|
|
183
|
+
* Safe variant that avoids deep conditional-type expansion when the column's
|
|
184
|
+
* FieldQuery[] has been widened to generic `string` keys.
|
|
185
|
+
*/
|
|
186
|
+
export type DataFromFieldQueriesSafe<FieldQueries extends readonly FieldQuery[]> = HasWideTopLevelKeys<FieldQueries> extends true ? Record<string, any> : DataFromFieldQueries<FieldQueries>;
|
|
187
|
+
export type DataFromFieldQueriesForRowSafe<Row, FieldQueries extends readonly FieldQuery[]> = HasWideTopLevelKeys<FieldQueries> extends true ? Record<string, any> : DataFromFieldQueriesForRow<Row, FieldQueries>;
|
|
188
|
+
type HasWideKeys<Row> = string extends keyof Row ? true : false;
|
|
189
|
+
type StringKeyOf<Row> = keyof Row & string;
|
|
190
|
+
type NonNullish<T> = Exclude<T, null | undefined>;
|
|
191
|
+
type ElemOf<T> = T extends ReadonlyArray<infer E> ? E : never;
|
|
192
|
+
type KeysMatching<Row, Constraint> = {
|
|
193
|
+
[K in keyof Row]-?: NonNullish<Row[K]> extends Constraint ? K : never;
|
|
194
|
+
}[keyof Row];
|
|
195
|
+
type ArrayKeys<Row> = KeysMatching<Row, ReadonlyArray<any>>;
|
|
196
|
+
type ObjectKeys<Row> = {
|
|
197
|
+
[K in keyof Row]-?: NonNullish<Row[K]> extends ReadonlyArray<any> ? never : NonNullish<Row[K]> extends object ? K : never;
|
|
198
|
+
}[keyof Row];
|
|
199
|
+
export type ValueQueryForRow<Row> = ValueQuery & {
|
|
200
|
+
field: StringKeyOf<Row>;
|
|
201
|
+
};
|
|
202
|
+
export type ObjectQueryForRow<Row> = {
|
|
203
|
+
[K in Extract<ObjectKeys<Row>, string>]: ObjectQuery & {
|
|
204
|
+
field: K;
|
|
205
|
+
selectionSet: readonly QueryForRowSafe<NonNullish<Row[K]>>[];
|
|
206
|
+
};
|
|
207
|
+
}[Extract<ObjectKeys<Row>, string>];
|
|
208
|
+
export type ArrayQueryForRow<Row> = {
|
|
209
|
+
[K in Extract<ArrayKeys<Row>, string>]: ArrayQuery & {
|
|
210
|
+
field: K;
|
|
211
|
+
selectionSet: readonly QueryForRowSafe<NonNullish<ElemOf<NonNullish<Row[K]>>>>[];
|
|
212
|
+
};
|
|
213
|
+
}[Extract<ArrayKeys<Row>, string>];
|
|
214
|
+
export type QueryForRow<Row> = ValueQueryForRow<Row> | ObjectQueryForRow<Row> | ArrayQueryForRow<Row>;
|
|
215
|
+
export type QueryForRowSafe<Row> = HasWideKeys<Row> extends true ? Query : QueryForRow<Row>;
|
|
216
|
+
export type FieldAliasForRow<Row> = FieldAlias & {
|
|
217
|
+
field: FieldQueryForRowSafe<Row>;
|
|
218
|
+
};
|
|
219
|
+
export type FieldQueryForRow<Row> = QueryForRow<Row> | FieldAliasForRow<Row>;
|
|
220
|
+
export type FieldQueryForRowSafe<Row> = HasWideKeys<Row> extends true ? FieldQuery : FieldQueryForRow<Row>;
|
|
221
|
+
type IsTuple<T extends readonly unknown[]> = number extends T["length"] ? false : true;
|
|
222
|
+
type FieldOfQuery<Q extends Query> = Q extends {
|
|
223
|
+
field: infer Field;
|
|
224
|
+
} ? Field : never;
|
|
225
|
+
type SelectionSetOfQuery<Q extends Query> = Q extends {
|
|
226
|
+
selectionSet: infer SelectionSet extends readonly Query[];
|
|
227
|
+
} ? SelectionSet : never;
|
|
228
|
+
type ValidateQueryForRow<Row, Q extends Query> = Q extends {
|
|
229
|
+
type: "valueQuery";
|
|
230
|
+
} ? FieldOfQuery<Q> extends StringKeyOf<Row> ? Q : never : Q extends {
|
|
231
|
+
type: "objectQuery";
|
|
232
|
+
} ? FieldOfQuery<Q> extends Extract<ObjectKeys<Row>, string> ? ValidateSelectionSetForRow<NonNullish<Row[FieldOfQuery<Q>]>, SelectionSetOfQuery<Q>> extends never ? never : Q : never : Q extends {
|
|
233
|
+
type: "arrayQuery";
|
|
234
|
+
} ? FieldOfQuery<Q> extends Extract<ArrayKeys<Row>, string> ? ValidateSelectionSetForRow<NonNullish<ElemOf<NonNullish<Row[FieldOfQuery<Q>]>>>, SelectionSetOfQuery<Q>> extends never ? never : Q : never : never;
|
|
235
|
+
type ValidateSelectionSetForRow<Row, SelectionSet extends readonly Query[]> = IsTuple<SelectionSet> extends true ? SelectionSet extends readonly [] ? SelectionSet : SelectionSet extends readonly [infer Head, ...infer Tail] ? Head extends Query ? ValidateQueryForRow<Row, Head> extends never ? never : Tail extends readonly Query[] ? ValidateSelectionSetForRow<Row, Tail> : never : never : never : SelectionSet;
|
|
236
|
+
type ValidateFieldQueryForRow<Row, FQ extends FieldQuery> = FQ extends FieldAlias ? ValidateFieldQueryForRow<Row, FQ["field"]> extends never ? never : FQ : FQ extends Query ? ValidateQueryForRow<Row, FQ> : never;
|
|
237
|
+
type ValidateFieldQueriesTupleForRow<Row, FieldQueries extends readonly FieldQuery[]> = FieldQueries extends readonly [] ? FieldQueries : FieldQueries extends readonly [infer Head, ...infer Tail] ? Head extends FieldQuery ? ValidateFieldQueryForRow<Row, Head> extends never ? never : Tail extends readonly FieldQuery[] ? ValidateFieldQueriesTupleForRow<Row, Tail> : never : never : never;
|
|
238
|
+
/**
|
|
239
|
+
* Validates that every FieldQuery in FieldQueries only refers to keys present
|
|
240
|
+
* on Row (recursively for nested selection sets).
|
|
241
|
+
*
|
|
242
|
+
* When FieldQueries is a tuple (typical inline literals), validation is strict.
|
|
243
|
+
* When FieldQueries is a widened array type, validation is best-effort and
|
|
244
|
+
* requires the element type to be compatible with row-aware query types.
|
|
245
|
+
*/
|
|
246
|
+
export type ValidateFieldQueriesForRow<Row, FieldQueries extends readonly FieldQuery[]> = IsTuple<FieldQueries> extends true ? ValidateFieldQueriesTupleForRow<Row, FieldQueries> : FieldQueries;
|
|
247
|
+
export declare function fieldAlias<const Alias extends string, const FQ extends FieldQuery>(alias: Alias, fieldQuery: FQ): FieldAlias & {
|
|
248
|
+
alias: Alias;
|
|
249
|
+
field: FQ;
|
|
250
|
+
};
|
|
251
|
+
export type TableColumnDefinition<FieldQueries extends readonly FieldQuery[] = readonly FieldQuery[], CellData extends Record<string, any> = DataFromFieldQueriesSafe<FieldQueries>> = {
|
|
252
|
+
type: "tableColumn";
|
|
73
253
|
id: ColumnId;
|
|
74
|
-
data:
|
|
254
|
+
data: FieldQueries;
|
|
75
255
|
name: string;
|
|
76
|
-
cellRenderer: CellRenderer
|
|
256
|
+
cellRenderer: CellRenderer<CellData>;
|
|
77
257
|
};
|
|
78
|
-
export type VirtualColumnDefinition = {
|
|
79
|
-
type:
|
|
258
|
+
export type VirtualColumnDefinition<FieldQueries extends readonly FieldQuery[] = readonly FieldQuery[]> = {
|
|
259
|
+
type: "virtualColumn";
|
|
80
260
|
id: ColumnId;
|
|
81
|
-
data:
|
|
261
|
+
data: FieldQueries;
|
|
82
262
|
};
|
|
83
263
|
export type ColumnDefinition = TableColumnDefinition | VirtualColumnDefinition;
|
|
264
|
+
export {};
|
|
84
265
|
//# sourceMappingURL=column-definition.d.ts.map
|