@tanstack/table-core 8.5.19 → 8.5.20
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/build/cjs/columnHelper.js.map +1 -1
- package/build/cjs/core/cell.js.map +1 -1
- package/build/cjs/core/column.js.map +1 -1
- package/build/cjs/core/headers.js.map +1 -1
- package/build/cjs/core/row.js.map +1 -1
- package/build/cjs/core/table.js.map +1 -1
- package/build/cjs/features/ColumnSizing.js.map +1 -1
- package/build/cjs/features/Expanding.js.map +1 -1
- package/build/cjs/features/Filters.js.map +1 -1
- package/build/cjs/features/Grouping.js.map +1 -1
- package/build/cjs/features/Ordering.js.map +1 -1
- package/build/cjs/features/Pagination.js.map +1 -1
- package/build/cjs/features/Pinning.js.map +1 -1
- package/build/cjs/features/RowSelection.js.map +1 -1
- package/build/cjs/features/Sorting.js.map +1 -1
- package/build/cjs/features/Visibility.js.map +1 -1
- package/build/cjs/utils.js +0 -4
- package/build/cjs/utils.js.map +1 -1
- package/build/esm/index.js +0 -4
- package/build/esm/index.js.map +1 -1
- package/build/stats-html.html +1 -1
- package/build/stats-react.json +312 -312
- package/build/types/index.d.ts +253 -199
- package/build/umd/index.development.js +0 -4
- package/build/umd/index.development.js.map +1 -1
- package/build/umd/index.production.js.map +1 -1
- package/package.json +1 -1
- package/src/columnHelper.ts +27 -20
- package/src/core/cell.ts +3 -3
- package/src/core/column.ts +2 -5
- package/src/core/headers.ts +5 -5
- package/src/core/row.ts +1 -1
- package/src/core/table.ts +6 -7
- package/src/features/ColumnSizing.ts +8 -8
- package/src/features/Expanding.ts +4 -4
- package/src/features/Filters.ts +17 -11
- package/src/features/Grouping.ts +16 -10
- package/src/features/Ordering.ts +5 -5
- package/src/features/Pagination.ts +6 -6
- package/src/features/Pinning.ts +8 -8
- package/src/features/RowSelection.ts +4 -4
- package/src/features/Sorting.ts +15 -9
- package/src/features/Visibility.ts +7 -7
- package/src/types.ts +133 -110
- package/src/utils.ts +59 -46
package/src/features/Sorting.ts
CHANGED
|
@@ -20,18 +20,18 @@ import { isFunction, makeStateUpdater } from '../utils'
|
|
|
20
20
|
|
|
21
21
|
export type SortDirection = 'asc' | 'desc'
|
|
22
22
|
|
|
23
|
-
export
|
|
23
|
+
export interface ColumnSort {
|
|
24
24
|
id: string
|
|
25
25
|
desc: boolean
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
export type SortingState = ColumnSort[]
|
|
29
29
|
|
|
30
|
-
export
|
|
30
|
+
export interface SortingTableState {
|
|
31
31
|
sorting: SortingState
|
|
32
32
|
}
|
|
33
33
|
|
|
34
|
-
export
|
|
34
|
+
export interface SortingFn<TData extends RowData> {
|
|
35
35
|
(rowA: Row<TData>, rowB: Row<TData>, columnId: string): number
|
|
36
36
|
}
|
|
37
37
|
|
|
@@ -46,7 +46,7 @@ export type SortingFnOption<TData extends RowData> =
|
|
|
46
46
|
| BuiltInSortingFn
|
|
47
47
|
| SortingFn<TData>
|
|
48
48
|
|
|
49
|
-
export
|
|
49
|
+
export interface SortingColumnDef<TData extends RowData> {
|
|
50
50
|
sortingFn?: SortingFnOption<TData>
|
|
51
51
|
sortDescFirst?: boolean
|
|
52
52
|
enableSorting?: boolean
|
|
@@ -55,7 +55,7 @@ export type SortingColumnDef<TData extends RowData> = {
|
|
|
55
55
|
sortUndefined?: false | -1 | 1
|
|
56
56
|
}
|
|
57
57
|
|
|
58
|
-
export
|
|
58
|
+
export interface SortingColumn<TData extends RowData> {
|
|
59
59
|
getAutoSortingFn: () => SortingFn<TData>
|
|
60
60
|
getAutoSortDir: () => SortDirection
|
|
61
61
|
getSortingFn: () => SortingFn<TData>
|
|
@@ -70,7 +70,7 @@ export type SortingColumn<TData extends RowData> = {
|
|
|
70
70
|
getToggleSortingHandler: () => undefined | ((event: unknown) => void)
|
|
71
71
|
}
|
|
72
72
|
|
|
73
|
-
|
|
73
|
+
interface SortingOptionsBase {
|
|
74
74
|
manualSorting?: boolean
|
|
75
75
|
onSortingChange?: OnChangeFn<SortingState>
|
|
76
76
|
enableSorting?: boolean
|
|
@@ -81,15 +81,21 @@ export type SortingOptions<TData extends RowData> = {
|
|
|
81
81
|
getSortedRowModel?: (table: Table<any>) => () => RowModel<any>
|
|
82
82
|
maxMultiSortColCount?: number
|
|
83
83
|
isMultiSortEvent?: (e: unknown) => boolean
|
|
84
|
-
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
type ResolvedSortingFns = keyof SortingFns extends never
|
|
85
87
|
? {
|
|
86
88
|
sortingFns?: Record<string, SortingFn<any>>
|
|
87
89
|
}
|
|
88
90
|
: {
|
|
89
91
|
sortingFns: Record<keyof SortingFns, SortingFn<any>>
|
|
90
|
-
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
export interface SortingOptions<TData extends RowData>
|
|
95
|
+
extends SortingOptionsBase,
|
|
96
|
+
ResolvedSortingFns {}
|
|
91
97
|
|
|
92
|
-
export
|
|
98
|
+
export interface SortingInstance<TData extends RowData> {
|
|
93
99
|
setSorting: (updater: Updater<SortingState>) => void
|
|
94
100
|
resetSorting: (defaultState?: boolean) => void
|
|
95
101
|
getPreSortedRowModel: () => RowModel<TData>
|
|
@@ -12,20 +12,20 @@ import { makeStateUpdater, memo } from '../utils'
|
|
|
12
12
|
|
|
13
13
|
export type VisibilityState = Record<string, boolean>
|
|
14
14
|
|
|
15
|
-
export
|
|
15
|
+
export interface VisibilityTableState {
|
|
16
16
|
columnVisibility: VisibilityState
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
-
export
|
|
19
|
+
export interface VisibilityOptions {
|
|
20
20
|
onColumnVisibilityChange?: OnChangeFn<VisibilityState>
|
|
21
21
|
enableHiding?: boolean
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
-
export
|
|
24
|
+
export interface VisibilityDefaultOptions {
|
|
25
25
|
onColumnVisibilityChange: OnChangeFn<VisibilityState>
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
-
export
|
|
28
|
+
export interface VisibilityInstance<TData extends RowData> {
|
|
29
29
|
getVisibleFlatColumns: () => Column<TData, unknown>[]
|
|
30
30
|
getVisibleLeafColumns: () => Column<TData, unknown>[]
|
|
31
31
|
getLeftVisibleLeafColumns: () => Column<TData, unknown>[]
|
|
@@ -39,16 +39,16 @@ export type VisibilityInstance<TData extends RowData> = {
|
|
|
39
39
|
getToggleAllColumnsVisibilityHandler: () => (event: unknown) => void
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
-
export
|
|
42
|
+
export interface VisibilityColumnDef {
|
|
43
43
|
enableHiding?: boolean
|
|
44
44
|
}
|
|
45
45
|
|
|
46
|
-
export
|
|
46
|
+
export interface VisibilityRow<TData extends RowData> {
|
|
47
47
|
_getAllVisibleCells: () => Cell<TData, unknown>[]
|
|
48
48
|
getVisibleCells: () => Cell<TData, unknown>[]
|
|
49
49
|
}
|
|
50
50
|
|
|
51
|
-
export
|
|
51
|
+
export interface VisibilityColumn {
|
|
52
52
|
getCanHide: () => boolean
|
|
53
53
|
getIsVisible: () => boolean
|
|
54
54
|
toggleVisibility: (value?: boolean) => void
|
package/src/types.ts
CHANGED
|
@@ -27,7 +27,6 @@ import {
|
|
|
27
27
|
HeadersInstance,
|
|
28
28
|
} from './core/headers'
|
|
29
29
|
import {
|
|
30
|
-
FilterFn,
|
|
31
30
|
FiltersColumn,
|
|
32
31
|
FiltersColumnDef,
|
|
33
32
|
FiltersInstance,
|
|
@@ -43,7 +42,6 @@ import {
|
|
|
43
42
|
SortingTableState,
|
|
44
43
|
} from './features/Sorting'
|
|
45
44
|
import {
|
|
46
|
-
CustomAggregationFns,
|
|
47
45
|
GroupingCell,
|
|
48
46
|
GroupingColumn,
|
|
49
47
|
GroupingColumnDef,
|
|
@@ -79,15 +77,20 @@ import {
|
|
|
79
77
|
RowSelectionTableState,
|
|
80
78
|
} from './features/RowSelection'
|
|
81
79
|
import { CoreRow } from './core/row'
|
|
82
|
-
import {
|
|
80
|
+
import { PartialKeys, UnionToIntersection } from './utils'
|
|
83
81
|
import { CellContext, CoreCell } from './core/cell'
|
|
84
82
|
import { CoreColumn } from './core/column'
|
|
85
83
|
|
|
86
84
|
export interface TableMeta<TData extends RowData> {}
|
|
85
|
+
|
|
87
86
|
export interface ColumnMeta<TData extends RowData, TValue> {}
|
|
87
|
+
|
|
88
88
|
export interface FilterMeta {}
|
|
89
|
+
|
|
89
90
|
export interface FilterFns {}
|
|
91
|
+
|
|
90
92
|
export interface SortingFns {}
|
|
93
|
+
|
|
91
94
|
export interface AggregationFns {}
|
|
92
95
|
|
|
93
96
|
export type Updater<T> = T | ((old: T) => T)
|
|
@@ -97,71 +100,79 @@ export type RowData = unknown | object | any[]
|
|
|
97
100
|
|
|
98
101
|
export type AnyRender = (Comp: any, props: any) => any
|
|
99
102
|
|
|
100
|
-
export
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
103
|
+
export interface Table<TData extends RowData>
|
|
104
|
+
extends CoreInstance<TData>,
|
|
105
|
+
HeadersInstance<TData>,
|
|
106
|
+
VisibilityInstance<TData>,
|
|
107
|
+
ColumnOrderInstance<TData>,
|
|
108
|
+
ColumnPinningInstance<TData>,
|
|
109
|
+
FiltersInstance<TData>,
|
|
110
|
+
SortingInstance<TData>,
|
|
111
|
+
GroupingInstance<TData>,
|
|
112
|
+
ColumnSizingInstance,
|
|
113
|
+
ExpandedInstance<TData>,
|
|
114
|
+
PaginationInstance<TData>,
|
|
115
|
+
RowSelectionInstance<TData> {}
|
|
116
|
+
|
|
117
|
+
interface FeatureOptions<TData extends RowData>
|
|
118
|
+
extends VisibilityOptions,
|
|
119
|
+
ColumnOrderOptions,
|
|
120
|
+
ColumnPinningOptions,
|
|
121
|
+
FiltersOptions<TData>,
|
|
122
|
+
SortingOptions<TData>,
|
|
123
|
+
GroupingOptions,
|
|
124
|
+
ExpandedOptions<TData>,
|
|
125
|
+
ColumnSizingOptions,
|
|
126
|
+
PaginationOptions,
|
|
127
|
+
RowSelectionOptions<TData> {}
|
|
112
128
|
|
|
113
129
|
export type TableOptionsResolved<TData extends RowData> = CoreOptions<TData> &
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
GroupingRow &
|
|
161
|
-
RowSelectionRow &
|
|
162
|
-
ExpandedRow
|
|
163
|
-
|
|
164
|
-
export type RowModel<TData extends RowData> = {
|
|
130
|
+
FeatureOptions<TData>
|
|
131
|
+
|
|
132
|
+
export interface TableOptions<TData extends RowData>
|
|
133
|
+
extends PartialKeys<
|
|
134
|
+
TableOptionsResolved<TData>,
|
|
135
|
+
'state' | 'onStateChange' | 'renderFallbackValue'
|
|
136
|
+
> {}
|
|
137
|
+
|
|
138
|
+
export interface TableState
|
|
139
|
+
extends CoreTableState,
|
|
140
|
+
VisibilityTableState,
|
|
141
|
+
ColumnOrderTableState,
|
|
142
|
+
ColumnPinningTableState,
|
|
143
|
+
FiltersTableState,
|
|
144
|
+
SortingTableState,
|
|
145
|
+
ExpandedTableState,
|
|
146
|
+
GroupingTableState,
|
|
147
|
+
ColumnSizingTableState,
|
|
148
|
+
PaginationTableState,
|
|
149
|
+
RowSelectionTableState {}
|
|
150
|
+
|
|
151
|
+
interface CompleteInitialTableState
|
|
152
|
+
extends CoreTableState,
|
|
153
|
+
VisibilityTableState,
|
|
154
|
+
ColumnOrderTableState,
|
|
155
|
+
ColumnPinningTableState,
|
|
156
|
+
FiltersTableState,
|
|
157
|
+
SortingTableState,
|
|
158
|
+
ExpandedTableState,
|
|
159
|
+
GroupingTableState,
|
|
160
|
+
ColumnSizingTableState,
|
|
161
|
+
PaginationInitialTableState,
|
|
162
|
+
RowSelectionTableState {}
|
|
163
|
+
|
|
164
|
+
export interface InitialTableState extends Partial<CompleteInitialTableState> {}
|
|
165
|
+
|
|
166
|
+
export interface Row<TData extends RowData>
|
|
167
|
+
extends CoreRow<TData>,
|
|
168
|
+
VisibilityRow<TData>,
|
|
169
|
+
ColumnPinningRow<TData>,
|
|
170
|
+
FiltersRow<TData>,
|
|
171
|
+
GroupingRow,
|
|
172
|
+
RowSelectionRow,
|
|
173
|
+
ExpandedRow {}
|
|
174
|
+
|
|
175
|
+
export interface RowModel<TData extends RowData> {
|
|
165
176
|
rows: Row<TData>[]
|
|
166
177
|
flatRows: Row<TData>[]
|
|
167
178
|
rowsById: Record<string, Row<TData>>
|
|
@@ -180,12 +191,12 @@ export type StringOrTemplateHeader<TData, TValue> =
|
|
|
180
191
|
| string
|
|
181
192
|
| ColumnDefTemplate<HeaderContext<TData, TValue>>
|
|
182
193
|
|
|
183
|
-
|
|
194
|
+
interface StringHeaderIdentifier {
|
|
184
195
|
header: string
|
|
185
196
|
id?: string
|
|
186
197
|
}
|
|
187
198
|
|
|
188
|
-
|
|
199
|
+
interface IdIdentifier<TData extends RowData, TValue> {
|
|
189
200
|
id: string
|
|
190
201
|
header?: StringOrTemplateHeader<TData, TValue>
|
|
191
202
|
}
|
|
@@ -196,24 +207,26 @@ type ColumnIdentifiers<TData extends RowData, TValue> =
|
|
|
196
207
|
|
|
197
208
|
//
|
|
198
209
|
|
|
199
|
-
|
|
210
|
+
interface ColumnDefExtensions<TData extends RowData, TValue = unknown>
|
|
211
|
+
extends VisibilityColumnDef,
|
|
212
|
+
ColumnPinningColumnDef,
|
|
213
|
+
FiltersColumnDef<TData>,
|
|
214
|
+
SortingColumnDef<TData>,
|
|
215
|
+
GroupingColumnDef<TData, TValue>,
|
|
216
|
+
ColumnSizingColumnDef {}
|
|
217
|
+
|
|
218
|
+
export interface ColumnDefBase<TData extends RowData, TValue = unknown>
|
|
219
|
+
extends ColumnDefExtensions<TData, TValue> {
|
|
200
220
|
getUniqueValues?: AccessorFn<TData, unknown[]>
|
|
201
221
|
footer?: ColumnDefTemplate<HeaderContext<TData, TValue>>
|
|
202
222
|
cell?: ColumnDefTemplate<CellContext<TData, TValue>>
|
|
203
223
|
meta?: ColumnMeta<TData, TValue>
|
|
204
|
-
}
|
|
205
|
-
ColumnPinningColumnDef &
|
|
206
|
-
FiltersColumnDef<TData> &
|
|
207
|
-
SortingColumnDef<TData> &
|
|
208
|
-
GroupingColumnDef<TData, TValue> &
|
|
209
|
-
ColumnSizingColumnDef
|
|
224
|
+
}
|
|
210
225
|
|
|
211
226
|
//
|
|
212
227
|
|
|
213
|
-
export
|
|
214
|
-
TData
|
|
215
|
-
TValue = unknown
|
|
216
|
-
> = ColumnDefBase<TData, TValue> & {
|
|
228
|
+
export interface IdentifiedColumnDef<TData extends RowData, TValue = unknown>
|
|
229
|
+
extends ColumnDefBase<TData, TValue> {
|
|
217
230
|
id?: string
|
|
218
231
|
header?: StringOrTemplateHeader<TData, TValue>
|
|
219
232
|
}
|
|
@@ -223,28 +236,37 @@ export type DisplayColumnDef<
|
|
|
223
236
|
TValue = unknown
|
|
224
237
|
> = ColumnDefBase<TData, TValue> & ColumnIdentifiers<TData, TValue>
|
|
225
238
|
|
|
239
|
+
interface GroupColumnDefBase<TData extends RowData, TValue = unknown>
|
|
240
|
+
extends ColumnDefBase<TData, TValue> {
|
|
241
|
+
columns?: ColumnDef<TData, any>[]
|
|
242
|
+
}
|
|
243
|
+
|
|
226
244
|
export type GroupColumnDef<
|
|
227
245
|
TData extends RowData,
|
|
228
246
|
TValue = unknown
|
|
229
|
-
> =
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
247
|
+
> = GroupColumnDefBase<TData, TValue> & ColumnIdentifiers<TData, TValue>
|
|
248
|
+
|
|
249
|
+
interface AccessorFnColumnDefBase<TData extends RowData, TValue = unknown>
|
|
250
|
+
extends ColumnDefBase<TData, TValue> {
|
|
251
|
+
accessorFn: AccessorFn<TData, TValue>
|
|
252
|
+
}
|
|
233
253
|
|
|
234
254
|
export type AccessorFnColumnDef<
|
|
235
255
|
TData extends RowData,
|
|
236
256
|
TValue = unknown
|
|
237
|
-
> =
|
|
238
|
-
ColumnIdentifiers<TData, TValue> & {
|
|
239
|
-
accessorFn: AccessorFn<TData, TValue>
|
|
240
|
-
}
|
|
257
|
+
> = AccessorFnColumnDefBase<TData, TValue> & ColumnIdentifiers<TData, TValue>
|
|
241
258
|
|
|
242
|
-
|
|
259
|
+
interface AccessorKeyColumnDefBase<TData extends RowData, TValue = unknown>
|
|
260
|
+
extends ColumnDefBase<TData, TValue> {
|
|
243
261
|
id?: string
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
262
|
+
accessorKey: string | keyof TData
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
export type AccessorKeyColumnDef<
|
|
266
|
+
TData extends RowData,
|
|
267
|
+
TValue = unknown
|
|
268
|
+
> = AccessorKeyColumnDefBase<TData, TValue> &
|
|
269
|
+
Partial<ColumnIdentifiers<TData, TValue>>
|
|
248
270
|
|
|
249
271
|
export type AccessorColumnDef<TData extends RowData, TValue = unknown> =
|
|
250
272
|
| AccessorKeyColumnDef<TData, TValue>
|
|
@@ -264,21 +286,22 @@ export type ColumnDefResolved<
|
|
|
264
286
|
accessorKey?: string
|
|
265
287
|
}
|
|
266
288
|
|
|
267
|
-
export
|
|
268
|
-
TData,
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
export
|
|
289
|
+
export interface Column<TData extends RowData, TValue = unknown>
|
|
290
|
+
extends CoreColumn<TData, TValue>,
|
|
291
|
+
ColumnVisibilityColumn,
|
|
292
|
+
ColumnPinningColumn,
|
|
293
|
+
FiltersColumn<TData>,
|
|
294
|
+
SortingColumn<TData>,
|
|
295
|
+
GroupingColumn<TData>,
|
|
296
|
+
ColumnSizingColumn {}
|
|
297
|
+
|
|
298
|
+
export interface Cell<TData extends RowData, TValue>
|
|
299
|
+
extends CoreCell<TData, TValue>,
|
|
300
|
+
GroupingCell {}
|
|
301
|
+
|
|
302
|
+
export interface Header<TData extends RowData, TValue>
|
|
303
|
+
extends CoreHeader<TData, TValue>,
|
|
304
|
+
ColumnSizingHeader {}
|
|
305
|
+
|
|
306
|
+
export interface HeaderGroup<TData extends RowData>
|
|
307
|
+
extends CoreHeaderGroup<TData> {}
|
package/src/utils.ts
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { TableState, Updater } from './types'
|
|
2
2
|
|
|
3
|
-
export type PartialKeys<T, K extends keyof T> = Omit<T, K> & Partial<
|
|
4
|
-
export type RequiredKeys<T, K extends keyof T> =
|
|
5
|
-
Required<Pick<T, K>>
|
|
3
|
+
export type PartialKeys<T, K extends keyof T> = Omit<T, K> & Partial<T>
|
|
4
|
+
export type RequiredKeys<T, K extends keyof T> = T & { [P in K]-?: T[P] }
|
|
6
5
|
export type Overwrite<T, U extends { [TKey in keyof T]?: any }> = Omit<
|
|
7
6
|
T,
|
|
8
7
|
keyof U
|
|
@@ -18,54 +17,68 @@ export type UnionToIntersection<T> = (
|
|
|
18
17
|
export type IsAny<T, Y, N> = 1 extends 0 & T ? Y : N
|
|
19
18
|
export type IsKnown<T, Y, N> = unknown extends T ? N : Y
|
|
20
19
|
|
|
21
|
-
type
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
type Index40 = ComputeRange<40>[number]
|
|
28
|
-
|
|
29
|
-
// Is this type a tuple?
|
|
30
|
-
type IsTuple<T> = T extends readonly any[] & { length: infer Length }
|
|
31
|
-
? Length extends Index40
|
|
32
|
-
? T
|
|
20
|
+
type IndexableData = Record<string | number, any>
|
|
21
|
+
export type DeepValue<T, TProp> = T extends IndexableData
|
|
22
|
+
? TProp extends `${infer TBranch}.${infer TDeepProp}`
|
|
23
|
+
? DeepValue<T[TBranch], TDeepProp>
|
|
24
|
+
: TProp extends keyof T
|
|
25
|
+
? T[TProp]
|
|
33
26
|
: never
|
|
34
27
|
: never
|
|
35
28
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
> = Tuple extends readonly []
|
|
41
|
-
? Keys
|
|
42
|
-
: Tuple extends readonly [infer _, ...infer Tail]
|
|
43
|
-
? AllowedIndexes<Tail, Keys | Tail['length']>
|
|
44
|
-
: Keys
|
|
45
|
-
|
|
46
|
-
export type DeepKeys<T> = unknown extends T
|
|
47
|
-
? keyof T
|
|
48
|
-
: object extends T
|
|
49
|
-
? string
|
|
50
|
-
: T extends readonly any[] & IsTuple<T>
|
|
51
|
-
? AllowedIndexes<T> | DeepKeysPrefix<T, AllowedIndexes<T>>
|
|
52
|
-
: T extends any[]
|
|
53
|
-
? never & 'Dynamic length array indexing is not supported'
|
|
54
|
-
: T extends Date
|
|
55
|
-
? never
|
|
56
|
-
: T extends object
|
|
57
|
-
? (keyof T & string) | DeepKeysPrefix<T, keyof T>
|
|
58
|
-
: never
|
|
59
|
-
|
|
60
|
-
type DeepKeysPrefix<T, TPrefix> = TPrefix extends keyof T & (number | string)
|
|
61
|
-
? `${TPrefix}.${DeepKeys<T[TPrefix]> & string}`
|
|
29
|
+
type Join<K, P> = K extends string | number
|
|
30
|
+
? P extends string | number
|
|
31
|
+
? `${K}${'' extends P ? '' : '.'}${P}`
|
|
32
|
+
: never
|
|
62
33
|
: never
|
|
63
34
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
35
|
+
type Prev = [
|
|
36
|
+
never,
|
|
37
|
+
0,
|
|
38
|
+
1,
|
|
39
|
+
2,
|
|
40
|
+
3,
|
|
41
|
+
4,
|
|
42
|
+
5,
|
|
43
|
+
6,
|
|
44
|
+
7,
|
|
45
|
+
8,
|
|
46
|
+
9,
|
|
47
|
+
10,
|
|
48
|
+
11,
|
|
49
|
+
12,
|
|
50
|
+
13,
|
|
51
|
+
14,
|
|
52
|
+
15,
|
|
53
|
+
16,
|
|
54
|
+
17,
|
|
55
|
+
18,
|
|
56
|
+
19,
|
|
57
|
+
20,
|
|
58
|
+
...0[]
|
|
59
|
+
]
|
|
60
|
+
|
|
61
|
+
type ExplicitLeaves =
|
|
62
|
+
| Date
|
|
63
|
+
| Number
|
|
64
|
+
| BigInt
|
|
65
|
+
| String
|
|
66
|
+
| Set<unknown>
|
|
67
|
+
| Map<unknown, unknown>
|
|
68
|
+
| WeakSet<object>
|
|
69
|
+
| WeakMap<object, unknown>
|
|
70
|
+
|
|
71
|
+
export type DeepKeys<T, D extends number = 10> = [D] extends [never]
|
|
72
|
+
? never
|
|
73
|
+
: T extends ExplicitLeaves
|
|
74
|
+
? never
|
|
75
|
+
: T extends object
|
|
76
|
+
? {
|
|
77
|
+
[K in keyof T]-?: K extends string | number
|
|
78
|
+
? `${K}` | Join<K, DeepKeys<T[K], Prev[D]>>
|
|
79
|
+
: never
|
|
80
|
+
}[keyof T]
|
|
81
|
+
: ''
|
|
69
82
|
|
|
70
83
|
export type NoInfer<T> = [T][T extends any ? 0 : never]
|
|
71
84
|
|