Skip to content

Commit a86347a

Browse files
committed
fix: optimize type definition of RequestParams
1 parent f8361eb commit a86347a

File tree

8 files changed

+42
-22
lines changed

8 files changed

+42
-22
lines changed

README.md

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -30,18 +30,18 @@
3030

3131
## Why frourio-express ?
3232

33-
Even if you write both the front and server in TypeScript, you can't statically type-check the API's sparsity.
33+
Even if you write both the frontend and backend in TypeScript, you can't statically type-check the API's sparsity.
3434

3535
We are always forced to write "Two TypeScript".
36-
We waste a lot of time on dynamic testing using the browser and Docker.
36+
We waste a lot of time on dynamic testing using the browser and server.
3737

3838
<div align="center">
3939
<img src="https://frouriojs.github.io/frourio/assets/images/problem.png" width="1200" alt="Why frourio ?" />
4040
</div>
4141
<br />
4242
<br />
4343

44-
Frourio-express is a framework for developing web apps quickly and safely in "One TypeScript".
44+
Frourio-express is a framework for developing web apps quickly and safely in **"One TypeScript"**.
4545

4646
<div align="center">
4747
<img src="https://frouriojs.github.io/frourio/assets/images/architecture.png" width="1200" alt="Architecture of create-frourio-app" />
@@ -821,7 +821,7 @@ app.listen(3000)
821821
822822
## Dependency Injection
823823
824-
Frourio-express use [frouriojs/Velona](https://github.com/frouriojs/velona) for dependency injection.
824+
Frourio-express use [frouriojs/velona](https://github.com/frouriojs/velona) for dependency injection.
825825
826826
`server/api/tasks/index.ts`
827827
@@ -908,9 +908,7 @@ test('dependency injection into controller', async () => {
908908
const limit = 3
909909
const message = 'test message'
910910
const res = await injectedController.get({
911-
query: { limit, message },
912-
body: undefined,
913-
headers: undefined
911+
query: { limit, message }
914912
})
915913
916914
expect(res.body).toHaveLength(limit)

__test__/index.spec.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -130,9 +130,7 @@ test('controller dependency injection', async () => {
130130

131131
await expect(
132132
injectedController.get({
133-
query: { id, requiredNum: 1, requiredNumArr: [0], disable: 'true' },
134-
body: undefined,
135-
headers: undefined
133+
query: { id, requiredNum: 1, requiredNumArr: [0], disable: 'true' }
136134
})
137135
).resolves.toHaveProperty('body', { id: +id })
138136
expect(val).toBe(+id)

servers/all/$server.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,11 +63,15 @@ type BlobToFile<T extends AspidaMethodParams> = T['reqFormat'] extends FormData
6363
}
6464
: T['reqBody']
6565

66-
type RequestParams<T extends AspidaMethodParams> = {
66+
type RequestParams<T extends AspidaMethodParams> = Pick<{
6767
query: T['query']
6868
body: BlobToFile<T>
6969
headers: T['reqHeaders']
70-
}
70+
}, {
71+
query: Required<T>['query'] extends {} | null ? 'query' : never
72+
body: Required<T>['reqBody'] extends {} | null ? 'body' : never
73+
headers: Required<T>['reqHeaders'] extends {} | null ? 'headers' : never
74+
}['query' | 'body' | 'headers']>
7175

7276
export type ServerMethods<T extends AspidaMethods, U extends ServerValues> = {
7377
[K in keyof T]: (

servers/minimum/$server.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,15 @@ type ServerValues = {
3535
user?: any
3636
}
3737

38-
type RequestParams<T extends AspidaMethodParams> = {
38+
type RequestParams<T extends AspidaMethodParams> = Pick<{
3939
query: T['query']
4040
body: T['reqBody']
4141
headers: T['reqHeaders']
42-
}
42+
}, {
43+
query: Required<T>['query'] extends {} | null ? 'query' : never
44+
body: Required<T>['reqBody'] extends {} | null ? 'body' : never
45+
headers: Required<T>['reqHeaders'] extends {} | null ? 'headers' : never
46+
}['query' | 'body' | 'headers']>
4347

4448
export type ServerMethods<T extends AspidaMethods, U extends ServerValues> = {
4549
[K in keyof T]: (

servers/noMulter/$server.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,11 +44,15 @@ type ServerValues = {
4444
user?: any
4545
}
4646

47-
type RequestParams<T extends AspidaMethodParams> = {
47+
type RequestParams<T extends AspidaMethodParams> = Pick<{
4848
query: T['query']
4949
body: T['reqBody']
5050
headers: T['reqHeaders']
51-
}
51+
}, {
52+
query: Required<T>['query'] extends {} | null ? 'query' : never
53+
body: Required<T>['reqBody'] extends {} | null ? 'body' : never
54+
headers: Required<T>['reqHeaders'] extends {} | null ? 'headers' : never
55+
}['query' | 'body' | 'headers']>
5256

5357
export type ServerMethods<T extends AspidaMethods, U extends ServerValues> = {
5458
[K in keyof T]: (

servers/noTypedParams/$server.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,11 +59,15 @@ type BlobToFile<T extends AspidaMethodParams> = T['reqFormat'] extends FormData
5959
}
6060
: T['reqBody']
6161

62-
type RequestParams<T extends AspidaMethodParams> = {
62+
type RequestParams<T extends AspidaMethodParams> = Pick<{
6363
query: T['query']
6464
body: BlobToFile<T>
6565
headers: T['reqHeaders']
66-
}
66+
}, {
67+
query: Required<T>['query'] extends {} | null ? 'query' : never
68+
body: Required<T>['reqBody'] extends {} | null ? 'body' : never
69+
headers: Required<T>['reqHeaders'] extends {} | null ? 'headers' : never
70+
}['query' | 'body' | 'headers']>
6771

6872
export type ServerMethods<T extends AspidaMethods, U extends ServerValues> = {
6973
[K in keyof T]: (

servers/noValidator/$server.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,11 +58,15 @@ type BlobToFile<T extends AspidaMethodParams> = T['reqFormat'] extends FormData
5858
}
5959
: T['reqBody']
6060

61-
type RequestParams<T extends AspidaMethodParams> = {
61+
type RequestParams<T extends AspidaMethodParams> = Pick<{
6262
query: T['query']
6363
body: BlobToFile<T>
6464
headers: T['reqHeaders']
65-
}
65+
}, {
66+
query: Required<T>['query'] extends {} | null ? 'query' : never
67+
body: Required<T>['reqBody'] extends {} | null ? 'body' : never
68+
headers: Required<T>['reqHeaders'] extends {} | null ? 'headers' : never
69+
}['query' | 'body' | 'headers']>
6670

6771
export type ServerMethods<T extends AspidaMethods, U extends ServerValues> = {
6872
[K in keyof T]: (

src/buildServerFile.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,11 +73,15 @@ type BlobToFile<T extends AspidaMethodParams> = T['reqFormat'] extends FormData
7373
`
7474
: ''
7575
}
76-
type RequestParams<T extends AspidaMethodParams> = {
76+
type RequestParams<T extends AspidaMethodParams> = Pick<{
7777
query: T['query']
7878
body: ${hasMulter ? 'BlobToFile<T>' : "T['reqBody']"}
7979
headers: T['reqHeaders']
80-
}
80+
}, {
81+
query: Required<T>['query'] extends {} | null ? 'query' : never
82+
body: Required<T>['reqBody'] extends {} | null ? 'body' : never
83+
headers: Required<T>['reqHeaders'] extends {} | null ? 'headers' : never
84+
}['query' | 'body' | 'headers']>
8185
8286
export type ServerMethods<T extends AspidaMethods, U extends ServerValues> = {
8387
[K in keyof T]: (

0 commit comments

Comments
 (0)