Skip to content

Commit 89da76c

Browse files
committed
fix(guards): nested array types
support up to 2nd level `Foo[][]`
1 parent 1dbfe3a commit 89da76c

File tree

2 files changed

+8
-2
lines changed

2 files changed

+8
-2
lines changed

src/parser.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -381,6 +381,12 @@ function parseInterfaceProperties(
381381
)}.every((item: unknown) => ${
382382
prop.isPrimitiveType || isPrimitiveType
383383
? `typeof item === '${type}'`
384+
: (prop.typescriptType || typescriptType).endsWith('[]') // checks if item is nested array type
385+
? `(Array.isArray(item) && item.every((itemItem: unknown) => ${(prop.isPrimitiveType ||
386+
isPrimitiveType
387+
? `typeof itemItem === '${type}'`
388+
: `is${prop.typescriptType || typescriptType}(itemItem)`
389+
).replace('[]', '')}))`
384390
: `is${prop.typescriptType || typescriptType}(item)`
385391
}))`
386392
: name === ADDITIONAL_PROPERTIES_KEY

tests/esquare/api/guards/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -747,7 +747,7 @@ export function isTable(arg: any): arg is models.Table {
747747
arg != null &&
748748
typeof arg === 'object' &&
749749
// tableData?: TableCell[][]
750-
( typeof arg.tableData === 'undefined' || (Array.isArray(arg.tableData) && arg.tableData.every((item: unknown) => isTableCell[](item))) ) &&
750+
( typeof arg.tableData === 'undefined' || (Array.isArray(arg.tableData) && arg.tableData.every((item: unknown) => (Array.isArray(item) && item.every((itemItem: unknown) => isTableCell(itemItem))))) ) &&
751751
// tableHead?: Column[]
752752
( typeof arg.tableHead === 'undefined' || (Array.isArray(arg.tableHead) && arg.tableHead.every((item: unknown) => isColumn(item))) ) &&
753753

@@ -849,7 +849,7 @@ export function isValidatedTable(arg: any): arg is models.ValidatedTable {
849849
arg != null &&
850850
typeof arg === 'object' &&
851851
// tableData?: ValidatedTableCell[][]
852-
( typeof arg.tableData === 'undefined' || (Array.isArray(arg.tableData) && arg.tableData.every((item: unknown) => isValidatedTableCell[](item))) ) &&
852+
( typeof arg.tableData === 'undefined' || (Array.isArray(arg.tableData) && arg.tableData.every((item: unknown) => (Array.isArray(item) && item.every((itemItem: unknown) => isValidatedTableCell(itemItem))))) ) &&
853853
// tableHead?: Column[]
854854
( typeof arg.tableHead === 'undefined' || (Array.isArray(arg.tableHead) && arg.tableHead.every((item: unknown) => isColumn(item))) ) &&
855855

0 commit comments

Comments
 (0)