|
1 | 1 | import ArSyncModel from './generated_typed_files/ArSyncModel' |
2 | 2 | import { useArSyncModel, useArSyncFetch } from './generated_typed_files/hooks' |
3 | 3 |
|
| 4 | +type IsEqual<T, U> = [T, U] extends [U, T] ? true : false |
| 5 | +function isOK<T extends true>(): T | undefined { return } |
| 6 | +type IsStrictMode = string | null extends string ? false : true |
| 7 | +isOK<IsStrictMode>() |
| 8 | + |
4 | 9 | const [hooksData1] = useArSyncModel({ field: 'currentUser', query: 'id' }) |
5 | | -hooksData1!.id |
| 10 | +isOK<IsEqual<typeof hooksData1, { id: number } | null>>() |
6 | 11 | const [hooksData2] = useArSyncModel({ field: 'currentUser', query: { '*': true, foo: true } }) |
7 | | -hooksData2!.error.extraFields = 'foo' |
| 12 | +isOK<IsEqual<typeof hooksData2, { error: { extraFields: 'foo' } } | null>>() |
8 | 13 | const [hooksData3] = useArSyncFetch({ field: 'currentUser', query: 'id' }) |
9 | | -hooksData3!.id |
| 14 | +isOK<IsEqual<typeof hooksData3, { id: number } | null>>() |
10 | 15 | const [hooksData4] = useArSyncFetch({ field: 'currentUser', query: { '*': true, foo: true } }) |
11 | | -hooksData4!.error.extraFields = 'foo' |
| 16 | +isOK<IsEqual<typeof hooksData4, { error: { extraFields: 'foo' } } | null>>() |
12 | 17 |
|
13 | 18 | const data1 = new ArSyncModel({ field: 'currentUser', query: 'id' }).data! |
14 | | -data1.id |
| 19 | +isOK<IsEqual<typeof data1, { id: number }>>() |
15 | 20 | const data2 = new ArSyncModel({ field: 'currentUser', query: ['id', 'name'] }).data! |
16 | | -data2.id; data2.name |
| 21 | +isOK<IsEqual<typeof data2, { id: number; name: string | null }>>() |
17 | 22 | const data3 = new ArSyncModel({ field: 'currentUser', query: '*' }).data! |
18 | | -data3.id; data3.name; data3.posts |
| 23 | +isOK<IsEqual<typeof data3, { id: number; name: string | null; posts: {}[]; do_not_call_after_destroyed: any }>>() |
19 | 24 | const data4 = new ArSyncModel({ field: 'currentUser', query: { posts: 'id' } }).data! |
20 | | -data4.posts[0].id |
| 25 | +isOK<IsEqual<typeof data4, { posts: { id: number }[] }>>() |
21 | 26 | const data5 = new ArSyncModel({ field: 'currentUser', query: { posts: '*' } }).data! |
22 | | -data5.posts[0].id; data5.posts[0].user; data5.posts[0].body |
23 | | -const data6 = new ArSyncModel({ field: 'currentUser', query: { posts: { '*': true, comments: 'user' } } }).data! |
24 | | -data6.posts[0].id; data6.posts[0].user; data6.posts[0].comments[0].user |
| 27 | +isOK<IsEqual<typeof data5, { |
| 28 | + posts: { |
| 29 | + id: number; user: {}; title: string | null; body: string | null; |
| 30 | + do_not_call_after_destroyed: any; comments: {}[]; my_comments: {}[] |
| 31 | + }[] |
| 32 | +}>>() |
| 33 | +const data6 = new ArSyncModel({ field: 'currentUser', query: { posts: { '*': true, comments: 'user' } } }).data!.posts[0].comments[0] |
| 34 | +isOK<IsEqual<typeof data6, { user: {} }>>() |
25 | 35 | const data7 = new ArSyncModel({ field: 'currentUser', query: { name: true, poosts: true } }).data! |
26 | | -data7.error.extraFields = 'poosts' |
| 36 | +isOK<IsEqual<typeof data7, { error: { extraFields: 'poosts' } }>>() |
27 | 37 | const data8 = new ArSyncModel({ field: 'currentUser', query: { posts: { id: true, commmments: true, titllle: true } } }).data! |
28 | | -data8.error.extraFields = 'commmments' |
29 | | -data8.error.extraFields = 'titllle' |
| 38 | +isOK<IsEqual<typeof data8, { error: { extraFields: 'commmments' | 'titllle' } }>>() |
30 | 39 | const data9 = new ArSyncModel({ field: 'currentUser', query: { '*': true, posts: { id: true, commmments: true } } }).data! |
31 | | -data9.error.extraFields = 'commmments' |
32 | | -const data10 = new ArSyncModel({ field: 'users', query: { '*': true, posts: { id: true, comments: '*' } } }).data! |
33 | | -data10[0].posts[0].comments[0].id |
| 40 | +isOK<IsEqual<typeof data9, { error: { extraFields: 'commmments' } }>>() |
| 41 | +const data10 = new ArSyncModel({ field: 'users', query: { '*': true, posts: { id: true, comments: '*' } } }).data![0].posts[0].comments[0].id |
| 42 | +isOK<IsEqual<typeof data10, number>>() |
34 | 43 | const data11 = new ArSyncModel({ field: 'users', query: { '*': true, posts: { id: true, comments: '*', commmments: true } } }).data! |
35 | | -data11.error.extraFields = 'commmments' |
36 | | -const data12 = new ArSyncModel({ field: 'currentUser', query: { posts: { params: { limit: 4 }, query: 'title' } } }).data! |
37 | | -data12.posts[0].title |
38 | | -const data13 = new ArSyncModel({ field: 'currentUser', query: { posts: { params: { limit: 4 }, query: ['id', 'title'] } } }).data! |
39 | | -data13.posts[0].title |
40 | | -const data14 = new ArSyncModel({ field: 'currentUser', query: { posts: { params: { limit: 4 }, query: { id: true, title: true } } } }).data! |
41 | | -data14.posts[0].title |
42 | | -const data15 = new ArSyncModel({ field: 'currentUser', query: { posts: ['id', 'title'] } } as const).data! |
43 | | -data15.posts[0].title |
| 44 | +isOK<IsEqual<typeof data11, { error: { extraFields: 'commmments' } }>>() |
| 45 | +const data12 = new ArSyncModel({ field: 'currentUser', query: { posts: { params: { limit: 4 }, query: 'title' } } }).data!.posts[0] |
| 46 | +isOK<IsEqual<typeof data12, { title: string | null }>>() |
| 47 | +const data13 = new ArSyncModel({ field: 'currentUser', query: { posts: { params: { limit: 4 }, query: ['id', 'title'] } } }).data!.posts[0] |
| 48 | +isOK<IsEqual<typeof data13, { id: number; title: string | null }>>() |
| 49 | +const data14 = new ArSyncModel({ field: 'currentUser', query: { posts: { params: { limit: 4 }, query: { id: true, title: true } } } }).data!.posts[0] |
| 50 | +isOK<IsEqual<typeof data14, { id: number; title: string | null }>>() |
| 51 | +const data15 = new ArSyncModel({ field: 'currentUser', query: { posts: ['id', 'title'] } } as const).data!.posts[0] |
| 52 | +isOK<IsEqual<typeof data15, { id: number; title: string | null }>>() |
44 | 53 |
|
45 | 54 | const data16 = new ArSyncModel({ field: 'currentUser', query: { id: { field: 'name' }, name: { field: 'id' }, id2: { field: 'id' }, name2: { field: 'name' } } }).data! |
46 | | -data16.name = data16.id2 = 0 |
47 | | -data16.id = data16.name2 = 'name' |
48 | | -const data17 = new ArSyncModel({ field: 'currentUser', query: { posts: { '*': true, hoge: { field: 'comments', query: 'id' }, comments: { field: 'title' } } } }).data! |
49 | | -data17.posts[0].comments = 'title' |
50 | | -data17.posts[0].hoge[0].id = 0 |
| 55 | +isOK<IsEqual<typeof data16, { id: string | null; name: number; id2: number; name2: string | null }>>() |
| 56 | +const data17 = new ArSyncModel({ field: 'currentUser', query: { posts: { '*': true, hoge: { field: 'comments', query: 'id' }, comments: { field: 'title' } } } }).data!.posts[0] |
| 57 | +isOK<IsEqual<typeof data17.hoge, { id: number }[]>>() |
| 58 | +isOK<IsEqual<typeof data17.comments, string | null>>() |
0 commit comments