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