From a9c4ded243a105a54059f76754963b5e084125ff Mon Sep 17 00:00:00 2001 From: Himself65 Date: Wed, 3 Aug 2022 18:14:48 -0500 Subject: [PATCH] fix: type instantiation is excessively deep (#4262) --- examples/react/basic/src/main.tsx | 25 ++++++++---- .../react-table-devtools/src/Explorer.tsx | 24 +++++------ .../src/styledComponents.ts | 6 +-- packages/react-table-devtools/src/utils.ts | 12 +++--- packages/table-core/src/utils.ts | 40 ++++++++++++++++--- 5 files changed, 73 insertions(+), 34 deletions(-) diff --git a/examples/react/basic/src/main.tsx b/examples/react/basic/src/main.tsx index 5f89f13846..28a4cf77a5 100644 --- a/examples/react/basic/src/main.tsx +++ b/examples/react/basic/src/main.tsx @@ -17,17 +17,20 @@ type Person = { visits: number status: string progress: number + friend?: Person +} + +const friend: Person = { + firstName: 'tanner', + lastName: 'linsley', + age: 24, + visits: 100, + status: 'In Relationship', + progress: 50, } const defaultData: Person[] = [ - { - firstName: 'tanner', - lastName: 'linsley', - age: 24, - visits: 100, - status: 'In Relationship', - progress: 50, - }, + friend, { firstName: 'tandy', lastName: 'miller', @@ -43,6 +46,7 @@ const defaultData: Person[] = [ visits: 20, status: 'Complicated', progress: 10, + friend }, ] @@ -76,6 +80,11 @@ const columns = [ header: 'Profile Progress', footer: info => info.column.id, }), + columnHelper.accessor('friend', { + header: 'Friend', + cell: info => JSON.stringify(info.getValue()), + footer: info => info.column.id, + }), ] function App() { diff --git a/packages/react-table-devtools/src/Explorer.tsx b/packages/react-table-devtools/src/Explorer.tsx index 62b050f64f..ff0cd8a203 100644 --- a/packages/react-table-devtools/src/Explorer.tsx +++ b/packages/react-table-devtools/src/Explorer.tsx @@ -80,7 +80,7 @@ const DefaultRenderer = ({ {expanded ? ( subEntryPages.length === 1 ? ( - {subEntries.map((entry) => handleEntry(entry))} + {subEntries.map(entry => handleEntry(entry))} ) : ( @@ -89,10 +89,10 @@ const DefaultRenderer = ({ {expandedPages.includes(index) ? ( - {entries.map((entry) => handleEntry(entry))} + {entries.map(entry => handleEntry(entry))} ) : null} @@ -146,8 +146,8 @@ export default function Explorer({ }) { const [expanded, setExpanded] = React.useState(defaultExpanded) - const toggle = (set) => { - setExpanded((old) => (typeof set !== 'undefined' ? set : !old)) + const toggle = set => { + setExpanded(old => (typeof set !== 'undefined' ? set : !old)) } const path = [] @@ -156,7 +156,7 @@ export default function Explorer({ let subEntries const subEntryPages = [] - const makeProperty = (sub) => { + const makeProperty = sub => { const newPath = path.concat(sub.label) const subDefaultExpanded = defaultExpanded === true @@ -177,7 +177,7 @@ export default function Explorer({ makeProperty({ label: i, value: d, - }), + }) ) } else if ( value !== null && @@ -189,7 +189,7 @@ export default function Explorer({ makeProperty({ label: i, value: val, - }), + }) ) } else if (typeof value === 'function') { type = 'function' @@ -200,7 +200,7 @@ export default function Explorer({ makeProperty({ label, value, - }), + }) ) } @@ -214,7 +214,7 @@ export default function Explorer({ } return renderer({ - handleEntry: (entry) => ( + handleEntry: entry => ( ), type, diff --git a/packages/react-table-devtools/src/styledComponents.ts b/packages/react-table-devtools/src/styledComponents.ts index 9f87ab89ac..c06838bded 100644 --- a/packages/react-table-devtools/src/styledComponents.ts +++ b/packages/react-table-devtools/src/styledComponents.ts @@ -17,7 +17,7 @@ export const Panel = styled( fontSize: '.9em', // flexDirection: 'column', }, - }, + } ) export const ActivePanel = styled( @@ -33,7 +33,7 @@ export const ActivePanel = styled( '(max-width: 700px)': (_props, theme) => ({ borderTop: `2px solid ${theme.gray}`, }), - }, + } ) export const Button = styled('button', (props, theme) => ({ @@ -102,5 +102,5 @@ export const Select = styled( '(max-width: 500px)': { display: 'none', }, - }, + } ) diff --git a/packages/react-table-devtools/src/utils.ts b/packages/react-table-devtools/src/utils.ts index bf579e3729..79ccd04ba3 100644 --- a/packages/react-table-devtools/src/utils.ts +++ b/packages/react-table-devtools/src/utils.ts @@ -51,7 +51,7 @@ type Styles = export function styled( type: T, newStyles: Styles, - queries: Record = {}, + queries: Record = {} ) { return React.forwardRef>( ({ style, ...rest }, ref) => { @@ -67,7 +67,7 @@ export function styled( } : current }, - {}, + {} ) return React.createElement(type, { @@ -81,7 +81,7 @@ export function styled( }, ref, }) - }, + } ) } @@ -116,7 +116,7 @@ export function useSafeState(initialState: T): [T, (value: T) => void] { } }) }, - [isMounted], + [isMounted] ) return [state, safeSetState] @@ -129,9 +129,9 @@ export function useSafeState(initialState: T): [T, (value: T) => void] { function scheduleMicrotask(callback: () => void) { Promise.resolve() .then(callback) - .catch((error) => + .catch(error => setTimeout(() => { throw error - }), + }) ) } diff --git a/packages/table-core/src/utils.ts b/packages/table-core/src/utils.ts index e28e34525c..efdf557949 100755 --- a/packages/table-core/src/utils.ts +++ b/packages/table-core/src/utils.ts @@ -48,18 +48,48 @@ export type DeepKeys = unknown extends T : object extends T ? string : T extends readonly any[] & IsTuple - ? AllowedIndexes | DeepKeysPrefix> + ? AllowedIndexes | DeepKeysPrefix : T extends any[] ? never & 'Dynamic length array indexing is not supported' : T extends Date ? never : T extends object - ? (keyof T & string) | DeepKeysPrefix + ? (keyof T & string) | DeepKeysPrefix : never -type DeepKeysPrefix = TPrefix extends keyof T & (number | string) - ? `${TPrefix}.${DeepKeys & string}` - : never +type Key = string | number | symbol +type Join = L extends + | string + | number + ? R extends string | number + ? `${L}.${R}` + : L + : R extends string | number + ? R + : undefined +type Union< + L extends unknown | undefined, + R extends unknown | undefined +> = L extends undefined + ? R extends undefined + ? undefined + : R + : R extends undefined + ? L + : L | R +type DeepKeysPrefix< + T extends object, + Prev extends Key | undefined = undefined, + Path extends Key | undefined = undefined, + PrevTypes extends object = T +> = string & + { + [K in keyof T]: T[K] extends PrevTypes | T + ? Union, Join> + : T[K] extends object + ? DeepKeysPrefix, Join, PrevTypes | T> + : Union, Join> + }[keyof T] export type DeepValue = T extends Record ? TProp extends `${infer TBranch}.${infer TDeepProp}`