Skip to content

Commit 30113fe

Browse files
committed
fix(guards): object array types
1 parent ec040c4 commit 30113fe

File tree

3 files changed

+29
-21
lines changed

3 files changed

+29
-21
lines changed

src/parser.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -380,11 +380,19 @@ function parseInterfaceProperties(
380380
name,
381381
)}.every((item: unknown) => ${
382382
prop.isPrimitiveType || isPrimitiveType
383-
? `typeof item === '${type}'`
383+
? `typeof item === '${
384+
(prop.type || type) === '{ [key: string]: any }'
385+
? 'object'
386+
: prop.type || type
387+
}'`
384388
: (prop.typescriptType || typescriptType).endsWith('[]') // checks if item is nested array type
385389
? `(Array.isArray(item) && item.every((itemItem: unknown) => ${(prop.isPrimitiveType ||
386390
isPrimitiveType
387-
? `typeof itemItem === '${type}'`
391+
? `typeof itemItem === '${
392+
(prop.type || type) === '{ [key: string]: any }'
393+
? 'object'
394+
: prop.type || type
395+
}'`
388396
: `is${prop.typescriptType || typescriptType}(itemItem)`
389397
).replace('[]', '')}))`
390398
: `is${prop.typescriptType || typescriptType}(item)`

tests/gcloud-firestore/api/guards/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -647,7 +647,7 @@ export function isStatus(arg: any): arg is models.Status {
647647
// code?: number
648648
( typeof arg.code === 'undefined' || typeof arg.code === 'number' ) &&
649649
// details?: { [key: string]: any }[]
650-
( typeof arg.details === 'undefined' || (Array.isArray(arg.details) && arg.details.every((item: unknown) => typeof item === '{ [key: string]: any }')) ) &&
650+
( typeof arg.details === 'undefined' || (Array.isArray(arg.details) && arg.details.every((item: unknown) => typeof item === 'object')) ) &&
651651
// message?: string
652652
( typeof arg.message === 'undefined' || typeof arg.message === 'string' ) &&
653653

tests/github/api/guards/index.ts

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -199,9 +199,9 @@ export function isCommit(arg: any): arg is models.Commit {
199199
// committer?: { [key: string]: any }
200200
( typeof arg.committer === 'undefined' || typeof arg.committer === 'object' ) &&
201201
// files?: { [key: string]: any }[]
202-
( typeof arg.files === 'undefined' || (Array.isArray(arg.files) && arg.files.every((item: unknown) => typeof item === '{ [key: string]: any }')) ) &&
202+
( typeof arg.files === 'undefined' || (Array.isArray(arg.files) && arg.files.every((item: unknown) => typeof item === 'object')) ) &&
203203
// parents?: { [key: string]: any }[]
204-
( typeof arg.parents === 'undefined' || (Array.isArray(arg.parents) && arg.parents.every((item: unknown) => typeof item === '{ [key: string]: any }')) ) &&
204+
( typeof arg.parents === 'undefined' || (Array.isArray(arg.parents) && arg.parents.every((item: unknown) => typeof item === 'object')) ) &&
205205
// sha?: string
206206
( typeof arg.sha === 'undefined' || typeof arg.sha === 'string' ) &&
207207
// stats?: { [key: string]: any }
@@ -294,11 +294,11 @@ export function isCompareCommits(arg: any): arg is models.CompareCommits {
294294
// behind_by?: number
295295
( typeof arg.behind_by === 'undefined' || typeof arg.behind_by === 'number' ) &&
296296
// commits?: { [key: string]: any }[]
297-
( typeof arg.commits === 'undefined' || (Array.isArray(arg.commits) && arg.commits.every((item: unknown) => typeof item === '{ [key: string]: any }')) ) &&
297+
( typeof arg.commits === 'undefined' || (Array.isArray(arg.commits) && arg.commits.every((item: unknown) => typeof item === 'object')) ) &&
298298
// diff_url?: string
299299
( typeof arg.diff_url === 'undefined' || typeof arg.diff_url === 'string' ) &&
300300
// files?: { [key: string]: any }[]
301-
( typeof arg.files === 'undefined' || (Array.isArray(arg.files) && arg.files.every((item: unknown) => typeof item === '{ [key: string]: any }')) ) &&
301+
( typeof arg.files === 'undefined' || (Array.isArray(arg.files) && arg.files.every((item: unknown) => typeof item === 'object')) ) &&
302302
// html_url?: string
303303
( typeof arg.html_url === 'undefined' || typeof arg.html_url === 'string' ) &&
304304
// patch_url?: string
@@ -724,13 +724,13 @@ export function isGist(arg: any): arg is models.Gist {
724724
// files?: { [key: string]: any }
725725
( typeof arg.files === 'undefined' || typeof arg.files === 'object' ) &&
726726
// forks?: { [key: string]: any }[]
727-
( typeof arg.forks === 'undefined' || (Array.isArray(arg.forks) && arg.forks.every((item: unknown) => typeof item === '{ [key: string]: any }')) ) &&
727+
( typeof arg.forks === 'undefined' || (Array.isArray(arg.forks) && arg.forks.every((item: unknown) => typeof item === 'object')) ) &&
728728
// git_pull_url?: string
729729
( typeof arg.git_pull_url === 'undefined' || typeof arg.git_pull_url === 'string' ) &&
730730
// git_push_url?: string
731731
( typeof arg.git_push_url === 'undefined' || typeof arg.git_push_url === 'string' ) &&
732732
// history?: { [key: string]: any }[]
733-
( typeof arg.history === 'undefined' || (Array.isArray(arg.history) && arg.history.every((item: unknown) => typeof item === '{ [key: string]: any }')) ) &&
733+
( typeof arg.history === 'undefined' || (Array.isArray(arg.history) && arg.history.every((item: unknown) => typeof item === 'object')) ) &&
734734
// html_url?: string
735735
( typeof arg.html_url === 'undefined' || typeof arg.html_url === 'string' ) &&
736736
// id?: string
@@ -1021,7 +1021,7 @@ export function isMergesSuccessful(arg: any): arg is models.MergesSuccessful {
10211021
// message?: string
10221022
( typeof arg.message === 'undefined' || typeof arg.message === 'string' ) &&
10231023
// parents?: { [key: string]: any }[]
1024-
( typeof arg.parents === 'undefined' || (Array.isArray(arg.parents) && arg.parents.every((item: unknown) => typeof item === '{ [key: string]: any }')) ) &&
1024+
( typeof arg.parents === 'undefined' || (Array.isArray(arg.parents) && arg.parents.every((item: unknown) => typeof item === 'object')) ) &&
10251025
// sha?: string
10261026
( typeof arg.sha === 'undefined' || typeof arg.sha === 'string' ) &&
10271027
// url?: string
@@ -1496,7 +1496,7 @@ export function isRelease(arg: any): arg is models.Release {
14961496
arg != null &&
14971497
typeof arg === 'object' &&
14981498
// assets?: { [key: string]: any }[]
1499-
( typeof arg.assets === 'undefined' || (Array.isArray(arg.assets) && arg.assets.every((item: unknown) => typeof item === '{ [key: string]: any }')) ) &&
1499+
( typeof arg.assets === 'undefined' || (Array.isArray(arg.assets) && arg.assets.every((item: unknown) => typeof item === 'object')) ) &&
15001500
// assets_url?: string
15011501
( typeof arg.assets_url === 'undefined' || typeof arg.assets_url === 'string' ) &&
15021502
// author?: { [key: string]: any }
@@ -1659,7 +1659,7 @@ export function isRepoCommit(arg: any): arg is models.RepoCommit {
16591659
// message?: string
16601660
( typeof arg.message === 'undefined' || typeof arg.message === 'string' ) &&
16611661
// parents?: { [key: string]: any }[]
1662-
( typeof arg.parents === 'undefined' || (Array.isArray(arg.parents) && arg.parents.every((item: unknown) => typeof item === '{ [key: string]: any }')) ) &&
1662+
( typeof arg.parents === 'undefined' || (Array.isArray(arg.parents) && arg.parents.every((item: unknown) => typeof item === 'object')) ) &&
16631663
// sha?: string
16641664
( typeof arg.sha === 'undefined' || typeof arg.sha === 'string' ) &&
16651665
// tree?: { [key: string]: any }
@@ -1743,7 +1743,7 @@ export function isSearchCode(arg: any): arg is models.SearchCode {
17431743
arg != null &&
17441744
typeof arg === 'object' &&
17451745
// items?: { [key: string]: any }[]
1746-
( typeof arg.items === 'undefined' || (Array.isArray(arg.items) && arg.items.every((item: unknown) => typeof item === '{ [key: string]: any }')) ) &&
1746+
( typeof arg.items === 'undefined' || (Array.isArray(arg.items) && arg.items.every((item: unknown) => typeof item === 'object')) ) &&
17471747
// total_count?: number
17481748
( typeof arg.total_count === 'undefined' || typeof arg.total_count === 'number' ) &&
17491749

@@ -1756,7 +1756,7 @@ export function isSearchIssues(arg: any): arg is models.SearchIssues {
17561756
arg != null &&
17571757
typeof arg === 'object' &&
17581758
// items?: { [key: string]: any }[]
1759-
( typeof arg.items === 'undefined' || (Array.isArray(arg.items) && arg.items.every((item: unknown) => typeof item === '{ [key: string]: any }')) ) &&
1759+
( typeof arg.items === 'undefined' || (Array.isArray(arg.items) && arg.items.every((item: unknown) => typeof item === 'object')) ) &&
17601760
// total_count?: number
17611761
( typeof arg.total_count === 'undefined' || typeof arg.total_count === 'number' ) &&
17621762

@@ -1769,7 +1769,7 @@ export function isSearchIssuesByKeyword(arg: any): arg is models.SearchIssuesByK
17691769
arg != null &&
17701770
typeof arg === 'object' &&
17711771
// issues?: { [key: string]: any }[]
1772-
( typeof arg.issues === 'undefined' || (Array.isArray(arg.issues) && arg.issues.every((item: unknown) => typeof item === '{ [key: string]: any }')) ) &&
1772+
( typeof arg.issues === 'undefined' || (Array.isArray(arg.issues) && arg.issues.every((item: unknown) => typeof item === 'object')) ) &&
17731773

17741774
true
17751775
);
@@ -1780,7 +1780,7 @@ export function isSearchRepositories(arg: any): arg is models.SearchRepositories
17801780
arg != null &&
17811781
typeof arg === 'object' &&
17821782
// items?: { [key: string]: any }[]
1783-
( typeof arg.items === 'undefined' || (Array.isArray(arg.items) && arg.items.every((item: unknown) => typeof item === '{ [key: string]: any }')) ) &&
1783+
( typeof arg.items === 'undefined' || (Array.isArray(arg.items) && arg.items.every((item: unknown) => typeof item === 'object')) ) &&
17841784
// total_count?: number
17851785
( typeof arg.total_count === 'undefined' || typeof arg.total_count === 'number' ) &&
17861786

@@ -1793,7 +1793,7 @@ export function isSearchRepositoriesByKeyword(arg: any): arg is models.SearchRep
17931793
arg != null &&
17941794
typeof arg === 'object' &&
17951795
// repositories?: { [key: string]: any }[]
1796-
( typeof arg.repositories === 'undefined' || (Array.isArray(arg.repositories) && arg.repositories.every((item: unknown) => typeof item === '{ [key: string]: any }')) ) &&
1796+
( typeof arg.repositories === 'undefined' || (Array.isArray(arg.repositories) && arg.repositories.every((item: unknown) => typeof item === 'object')) ) &&
17971797

17981798
true
17991799
);
@@ -1815,7 +1815,7 @@ export function isSearchUsers(arg: any): arg is models.SearchUsers {
18151815
arg != null &&
18161816
typeof arg === 'object' &&
18171817
// items?: { [key: string]: any }[]
1818-
( typeof arg.items === 'undefined' || (Array.isArray(arg.items) && arg.items.every((item: unknown) => typeof item === '{ [key: string]: any }')) ) &&
1818+
( typeof arg.items === 'undefined' || (Array.isArray(arg.items) && arg.items.every((item: unknown) => typeof item === 'object')) ) &&
18191819
// total_count?: number
18201820
( typeof arg.total_count === 'undefined' || typeof arg.total_count === 'number' ) &&
18211821

@@ -1828,7 +1828,7 @@ export function isSearchUsersByKeyword(arg: any): arg is models.SearchUsersByKey
18281828
arg != null &&
18291829
typeof arg === 'object' &&
18301830
// users?: { [key: string]: any }[]
1831-
( typeof arg.users === 'undefined' || (Array.isArray(arg.users) && arg.users.every((item: unknown) => typeof item === '{ [key: string]: any }')) ) &&
1831+
( typeof arg.users === 'undefined' || (Array.isArray(arg.users) && arg.users.every((item: unknown) => typeof item === 'object')) ) &&
18321832

18331833
true
18341834
);
@@ -1997,7 +1997,7 @@ export function isTree(arg: any): arg is models.Tree {
19971997
// sha?: string
19981998
( typeof arg.sha === 'undefined' || typeof arg.sha === 'string' ) &&
19991999
// tree?: { [key: string]: any }[]
2000-
( typeof arg.tree === 'undefined' || (Array.isArray(arg.tree) && arg.tree.every((item: unknown) => typeof item === '{ [key: string]: any }')) ) &&
2000+
( typeof arg.tree === 'undefined' || (Array.isArray(arg.tree) && arg.tree.every((item: unknown) => typeof item === 'object')) ) &&
20012001
// url?: string
20022002
( typeof arg.url === 'undefined' || typeof arg.url === 'string' ) &&
20032003

@@ -2014,7 +2014,7 @@ export function isTrees(arg: any): arg is models.Trees {
20142014
// sha?: string
20152015
( typeof arg.sha === 'undefined' || typeof arg.sha === 'string' ) &&
20162016
// tree?: { [key: string]: any }[]
2017-
( typeof arg.tree === 'undefined' || (Array.isArray(arg.tree) && arg.tree.every((item: unknown) => typeof item === '{ [key: string]: any }')) ) &&
2017+
( typeof arg.tree === 'undefined' || (Array.isArray(arg.tree) && arg.tree.every((item: unknown) => typeof item === 'object')) ) &&
20182018
// url?: string
20192019
( typeof arg.url === 'undefined' || typeof arg.url === 'string' ) &&
20202020

0 commit comments

Comments
 (0)