Skip to content

Commit b69ba17

Browse files
authored
Merge pull request #6 from frouriojs/develop
chore(release): 0.18.0
2 parents a2a737f + b78fd47 commit b69ba17

File tree

52 files changed

+367
-282
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

52 files changed

+367
-282
lines changed

CHANGELOG.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,23 @@
22

33
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
44

5+
## [0.18.0](https://github.com/frouriojs/frourio-express/compare/v0.17.1...v0.18.0) (2020-10-18)
6+
7+
8+
### ⚠ BREAKING CHANGES
9+
10+
* add AdditionalRequest
11+
12+
### Features
13+
14+
* add AdditionalRequest ([766d4c1](https://github.com/frouriojs/frourio-express/commit/766d4c13e7df7ce695c6374c30ce03568eaa81bc))
15+
16+
17+
### Documentation
18+
19+
* update benchmarks ([a2a737f](https://github.com/frouriojs/frourio-express/commit/a2a737f795be174eb286d328cbfa33c34017b42f))
20+
* update README ([538f165](https://github.com/frouriojs/frourio-express/commit/538f165db9087eb52af5a0d21518ddd1acac66e6))
21+
522
### [0.17.1](https://github.com/frouriojs/frourio-express/compare/v0.17.0...v0.17.1) (2020-10-11)
623

724

README.md

Lines changed: 60 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
</a>
2424
</div>
2525

26-
<p align="center">Frourio-express is a perfectly type-checkable REST framework for TypeScript.</p>
26+
<p align="center">Type safe full stack REST framework, for TypeScript</p>
2727
<br />
2828
<br />
2929
<br />
@@ -67,6 +67,60 @@ Benchmarks taken using https://github.com/frouriojs/benchmarks. This is a
6767
synthetic, "hello world" benchmark that aims to evaluate the framework
6868
overhead.
6969

70+
## Breaking change (2020/10/19) :warning:
71+
72+
Since frourio-express >= `0.18.0`, the way to add user properties to the request object has changed.
73+
74+
`server/api/user/hooks.ts`
75+
76+
```ts
77+
import passport from 'passport'
78+
import { defineHooks } from './$relay'
79+
import { getUserIdByToken } from '$/service/user'
80+
81+
// < 0.18.0
82+
// export type User = {
83+
// id: string
84+
// }
85+
86+
// >= 0.18.0
87+
export type AdditionalRequest = {
88+
user: {
89+
id: string
90+
}
91+
}
92+
93+
passport.use(
94+
// eslint-disable-next-line
95+
new (require('passport-trusted-header').Strategy)(
96+
{ headers: ['token'] },
97+
// eslint-disable-next-line
98+
(headers: { token: string }, done: Function) => {
99+
done(null, getUserIdByToken(headers.token))
100+
}
101+
)
102+
)
103+
104+
export default defineHooks(() => ({
105+
onRequest: [
106+
passport.initialize(),
107+
passport.authenticate('trusted-header', { session: false })
108+
]
109+
}))
110+
```
111+
112+
`server/api/user/controller.ts`
113+
114+
```ts
115+
import { defineController } from './$relay'
116+
import { getUserNameById } from '$/service/user'
117+
118+
export default defineController(() => ({
119+
// user was added by AdditionalRequest of ./hooks.ts
120+
get: async ({ user }) => ({ status: 200, body: await getUserNameById(user.id) })
121+
}))
122+
```
123+
70124
## Table of Contents
71125

72126
- [Install](#Install)
@@ -397,9 +451,10 @@ import passport from 'passport'
397451
import { defineHooks } from './$relay' // '$relay.ts' is automatically generated by frourio-express
398452
import { getUserIdByToken } from '$/service/user'
399453

400-
// Export the User in hooks.ts to receive the user in controller.ts
401-
export type User = {
402-
id: string
454+
export type AdditionalRequest = {
455+
user: {
456+
id: string
457+
}
403458
}
404459

405460
passport.use(
@@ -428,6 +483,7 @@ import { defineController } from './$relay'
428483
import { getUserNameById } from '$/service/user'
429484

430485
export default defineController(() => ({
486+
// user was added by AdditionalRequest of ./hooks.ts
431487
get: async ({ user }) => ({ status: 200, body: await getUserNameById(user.id) })
432488
}))
433489
```

package.json

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "frourio-express",
3-
"version": "0.17.1",
4-
"description": "Perfectly type-checkable REST framework for TypeScript",
3+
"version": "0.18.0",
4+
"description": "Type safe full stack REST framework, for TypeScript",
55
"author": "Solufa <[email protected]>",
66
"license": "MIT",
77
"main": "dist/index.js",
@@ -83,11 +83,11 @@
8383
]
8484
},
8585
"dependencies": {
86-
"aspida": "^0.22.0",
86+
"aspida": "^0.22.1",
8787
"velona": "^0.5.1"
8888
},
8989
"devDependencies": {
90-
"@aspida/axios": "^0.12.0",
90+
"@aspida/axios": "^0.12.1",
9191
"@types/express": "^4.17.7",
9292
"@types/jest": "^26.0.14",
9393
"@types/multer": "^1.4.4",
@@ -96,7 +96,7 @@
9696
"axios": "^0.20.0",
9797
"class-validator": "^0.12.2",
9898
"eslint": "^7.11.0",
99-
"eslint-config-prettier": "^6.12.0",
99+
"eslint-config-prettier": "^6.13.0",
100100
"eslint-config-standard": "^14.1.1",
101101
"eslint-plugin-import": "^2.22.1",
102102
"eslint-plugin-jest": "^24.1.0",

servers/all/$server.ts

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { validateOrReject } from 'class-validator'
77
import * as Validators from './validators'
88
import hooksFn0 from './api/hooks'
99
import hooksFn1 from './api/users/hooks'
10+
import hooksFn2 from './api/users/_userId@number/_name/hooks'
1011
import controllerFn0, { hooks as ctrlHooksFn0 } from './api/controller'
1112
import controllerFn1 from './api/500/controller'
1213
import controllerFn2 from './api/empty/noEmpty/controller'
@@ -48,11 +49,6 @@ type ServerResponse<K extends AspidaMethodParams> =
4849
>)
4950
| PartiallyPartial<BaseResponse<any, any, HttpStatusNoOk>, 'body' | 'headers'>
5051

51-
type ServerValues = {
52-
params?: Record<string, any>
53-
user?: any
54-
}
55-
5652
type BlobToFile<T extends AspidaMethodParams> = T['reqFormat'] extends FormData
5753
? {
5854
[P in keyof T['reqBody']]: Required<T['reqBody']>[P] extends Blob
@@ -73,7 +69,7 @@ type RequestParams<T extends AspidaMethodParams> = Pick<{
7369
headers: Required<T>['reqHeaders'] extends {} | null ? 'headers' : never
7470
}['query' | 'body' | 'headers']>
7571

76-
export type ServerMethods<T extends AspidaMethods, U extends ServerValues> = {
72+
export type ServerMethods<T extends AspidaMethods, U extends Record<string, any> = {}> = {
7773
[K in keyof T]: (
7874
req: RequestParams<T[K]> & U
7975
) => ServerResponse<T[K]> | Promise<ServerResponse<T[K]>>
@@ -193,6 +189,7 @@ export default (app: Express, options: FrourioOptions = {}) => {
193189
const basePath = options.basePath ?? ''
194190
const hooks0 = hooksFn0(app)
195191
const hooks1 = hooksFn1(app)
192+
const hooks2 = hooksFn2(app)
196193
const ctrlHooks0 = ctrlHooksFn0(app)
197194
const ctrlHooks1 = ctrlHooksFn1(app)
198195
const controller0 = controllerFn0()
@@ -312,6 +309,7 @@ export default (app: Express, options: FrourioOptions = {}) => {
312309
app.get(`${basePath}/users/:userId/:name`, [
313310
...hooks0.onRequest,
314311
hooks1.onRequest,
312+
hooks2.onRequest,
315313
hooks0.preParsing,
316314
createTypedParamsHandler(['userId']),
317315
methodToHandler(controller9.get)

servers/all/api/$relay.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,13 @@ import { Deps, depend } from 'velona'
44
import { ServerMethods } from '../$server'
55
import { Methods } from './'
66

7-
type ControllerMethods = ServerMethods<Methods, {}>
8-
9-
export type Hooks = {
7+
type Hooks = {
108
onRequest?: RequestHandler | RequestHandler[]
119
preParsing?: RequestHandler | RequestHandler[]
1210
preValidation?: RequestHandler | RequestHandler[]
1311
preHandler?: RequestHandler | RequestHandler[]
1412
}
13+
type ControllerMethods = ServerMethods<Methods>
1514

1615
export function defineHooks<T extends Hooks>(hooks: (app: Express) => T): (app: Express) => T
1716
export function defineHooks<T extends Record<string, any>, U extends Hooks>(deps: T, cb: (d: Deps<T>, app: Express) => U): { (app: Express): U; inject(d: Deps<T>): (app: Express) => U }

servers/all/api/500/$relay.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,13 @@ import { Deps, depend } from 'velona'
44
import { ServerMethods } from '../../$server'
55
import { Methods } from './'
66

7-
type ControllerMethods = ServerMethods<Methods, {}>
8-
9-
export type Hooks = {
7+
type Hooks = {
108
onRequest?: RequestHandler | RequestHandler[]
119
preParsing?: RequestHandler | RequestHandler[]
1210
preValidation?: RequestHandler | RequestHandler[]
1311
preHandler?: RequestHandler | RequestHandler[]
1412
}
13+
type ControllerMethods = ServerMethods<Methods>
1514

1615
export function defineHooks<T extends Hooks>(hooks: (app: Express) => T): (app: Express) => T
1716
export function defineHooks<T extends Record<string, any>, U extends Hooks>(deps: T, cb: (d: Deps<T>, app: Express) => U): { (app: Express): U; inject(d: Deps<T>): (app: Express) => U }

servers/all/api/empty/$relay.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,13 @@ import { Deps, depend } from 'velona'
44
import { ServerMethods } from '../../$server'
55
import { Methods } from './'
66

7-
type ControllerMethods = ServerMethods<Methods, {}>
8-
9-
export type Hooks = {
7+
type Hooks = {
108
onRequest?: RequestHandler | RequestHandler[]
119
preParsing?: RequestHandler | RequestHandler[]
1210
preValidation?: RequestHandler | RequestHandler[]
1311
preHandler?: RequestHandler | RequestHandler[]
1412
}
13+
type ControllerMethods = ServerMethods<Methods>
1514

1615
export function defineHooks<T extends Hooks>(hooks: (app: Express) => T): (app: Express) => T
1716
export function defineHooks<T extends Record<string, any>, U extends Hooks>(deps: T, cb: (d: Deps<T>, app: Express) => U): { (app: Express): U; inject(d: Deps<T>): (app: Express) => U }

servers/all/api/empty/noEmpty/$relay.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,13 @@ import { Deps, depend } from 'velona'
44
import { ServerMethods } from '../../../$server'
55
import { Methods } from './'
66

7-
type ControllerMethods = ServerMethods<Methods, {}>
8-
9-
export type Hooks = {
7+
type Hooks = {
108
onRequest?: RequestHandler | RequestHandler[]
119
preParsing?: RequestHandler | RequestHandler[]
1210
preValidation?: RequestHandler | RequestHandler[]
1311
preHandler?: RequestHandler | RequestHandler[]
1412
}
13+
type ControllerMethods = ServerMethods<Methods>
1514

1615
export function defineHooks<T extends Hooks>(hooks: (app: Express) => T): (app: Express) => T
1716
export function defineHooks<T extends Record<string, any>, U extends Hooks>(deps: T, cb: (d: Deps<T>, app: Express) => U): { (app: Express): U; inject(d: Deps<T>): (app: Express) => U }

servers/all/api/multiForm/$relay.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,13 @@ import { Deps, depend } from 'velona'
44
import { ServerMethods } from '../../$server'
55
import { Methods } from './'
66

7-
type ControllerMethods = ServerMethods<Methods, {}>
8-
9-
export type Hooks = {
7+
type Hooks = {
108
onRequest?: RequestHandler | RequestHandler[]
119
preParsing?: RequestHandler | RequestHandler[]
1210
preValidation?: RequestHandler | RequestHandler[]
1311
preHandler?: RequestHandler | RequestHandler[]
1412
}
13+
type ControllerMethods = ServerMethods<Methods>
1514

1615
export function defineHooks<T extends Hooks>(hooks: (app: Express) => T): (app: Express) => T
1716
export function defineHooks<T extends Record<string, any>, U extends Hooks>(deps: T, cb: (d: Deps<T>, app: Express) => U): { (app: Express): U; inject(d: Deps<T>): (app: Express) => U }

servers/all/api/texts/$relay.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,13 @@ import { Deps, depend } from 'velona'
44
import { ServerMethods } from '../../$server'
55
import { Methods } from './'
66

7-
type ControllerMethods = ServerMethods<Methods, {}>
8-
9-
export type Hooks = {
7+
type Hooks = {
108
onRequest?: RequestHandler | RequestHandler[]
119
preParsing?: RequestHandler | RequestHandler[]
1210
preValidation?: RequestHandler | RequestHandler[]
1311
preHandler?: RequestHandler | RequestHandler[]
1412
}
13+
type ControllerMethods = ServerMethods<Methods>
1514

1615
export function defineHooks<T extends Hooks>(hooks: (app: Express) => T): (app: Express) => T
1716
export function defineHooks<T extends Record<string, any>, U extends Hooks>(deps: T, cb: (d: Deps<T>, app: Express) => U): { (app: Express): U; inject(d: Deps<T>): (app: Express) => U }

servers/all/api/texts/_label@string/$relay.ts

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,17 @@ import { Deps, depend } from 'velona'
44
import { ServerMethods } from '../../../$server'
55
import { Methods } from './'
66

7-
type ControllerMethods = ServerMethods<Methods, {
8-
params: {
9-
label: string
10-
}
11-
}>
12-
13-
export type Hooks = {
7+
type Hooks = {
148
onRequest?: RequestHandler | RequestHandler[]
159
preParsing?: RequestHandler | RequestHandler[]
1610
preValidation?: RequestHandler | RequestHandler[]
1711
preHandler?: RequestHandler | RequestHandler[]
1812
}
13+
type ControllerMethods = ServerMethods<Methods, {
14+
params: {
15+
label: string
16+
}
17+
}>
1918

2019
export function defineHooks<T extends Hooks>(hooks: (app: Express) => T): (app: Express) => T
2120
export function defineHooks<T extends Record<string, any>, U extends Hooks>(deps: T, cb: (d: Deps<T>, app: Express) => U): { (app: Express): U; inject(d: Deps<T>): (app: Express) => U }

servers/all/api/texts/sample/$relay.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,13 @@ import { Deps, depend } from 'velona'
44
import { ServerMethods } from '../../../$server'
55
import { Methods } from './'
66

7-
type ControllerMethods = ServerMethods<Methods, {}>
8-
9-
export type Hooks = {
7+
type Hooks = {
108
onRequest?: RequestHandler | RequestHandler[]
119
preParsing?: RequestHandler | RequestHandler[]
1210
preValidation?: RequestHandler | RequestHandler[]
1311
preHandler?: RequestHandler | RequestHandler[]
1412
}
13+
type ControllerMethods = ServerMethods<Methods>
1514

1615
export function defineHooks<T extends Hooks>(hooks: (app: Express) => T): (app: Express) => T
1716
export function defineHooks<T extends Record<string, any>, U extends Hooks>(deps: T, cb: (d: Deps<T>, app: Express) => U): { (app: Express): U; inject(d: Deps<T>): (app: Express) => U }

servers/all/api/users/$relay.ts

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,19 @@
22
import { Express, RequestHandler } from 'express'
33
import { Deps, depend } from 'velona'
44
import { ServerMethods } from '../../$server'
5-
import { User } from './hooks'
5+
import { AdditionalRequest as AdditionalRequest0 } from './hooks'
6+
import { AdditionalRequest as AdditionalRequest1 } from './controller'
67
import { Methods } from './'
78

8-
type ControllerMethods = ServerMethods<Methods, {
9-
user: User
10-
}>
11-
12-
export type Hooks = {
13-
onRequest?: RequestHandler | RequestHandler[]
14-
preParsing?: RequestHandler | RequestHandler[]
15-
preValidation?: RequestHandler | RequestHandler[]
16-
preHandler?: RequestHandler | RequestHandler[]
9+
type AdditionalRequest = AdditionalRequest0 & AdditionalRequest1
10+
type AddedRequestHandler = RequestHandler extends (req: infer U, ...args: infer V) => infer W ? (req: U & Partial<AdditionalRequest>, ...args: V) => W : never
11+
type Hooks = {
12+
onRequest?: AddedRequestHandler | AddedRequestHandler[]
13+
preParsing?: AddedRequestHandler | AddedRequestHandler[]
14+
preValidation?: AddedRequestHandler | AddedRequestHandler[]
15+
preHandler?: AddedRequestHandler | AddedRequestHandler[]
1716
}
17+
type ControllerMethods = ServerMethods<Methods, AdditionalRequest>
1818

1919
export function defineHooks<T extends Hooks>(hooks: (app: Express) => T): (app: Express) => T
2020
export function defineHooks<T extends Record<string, any>, U extends Hooks>(deps: T, cb: (d: Deps<T>, app: Express) => U): { (app: Express): U; inject(d: Deps<T>): (app: Express) => U }

0 commit comments

Comments
 (0)