Skip to content

Commit 090d4b0

Browse files
authored
Merge pull request #95 from frouriojs/develop
fix: append AdditionalRequest to ctrl level hooks
2 parents 3481b35 + 0557f32 commit 090d4b0

File tree

43 files changed

+368
-573
lines changed

Some content is hidden

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

43 files changed

+368
-573
lines changed

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,12 @@
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.31.1](https://github.com/frouriojs/frourio-express/compare/v0.31.0...v0.31.1) (2022-12-09)
6+
7+
### Bug Fixes
8+
9+
- append AdditionalRequest to ctrl level hooks (https://github.com/frouriojs/frourio-express/pull/95)
10+
511
## [0.31.0](https://github.com/frouriojs/frourio-express/compare/v0.30.0...v0.31.0) (2022-11-24)
612

713
### Features

servers/all/$server.ts

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -87,23 +87,27 @@ type RequestParams<T extends AspidaMethodParams> = Pick<{
8787
headers: Required<T>['reqHeaders'] extends {} | null ? 'headers' : never
8888
}['query' | 'body' | 'headers']>
8989

90-
type ServerHandler<T extends AspidaMethodParams, U extends Record<string, any> = {}> = (
90+
type ServerHandler<T extends AspidaMethodParams, U extends Record<string, unknown> = {}> = (
9191
req: RequestParams<T> & U
9292
) => ServerResponse<T>
9393

94-
type ServerHandlerPromise<T extends AspidaMethodParams, U extends Record<string, any> = {}> = (
94+
type ServerHandlerPromise<T extends AspidaMethodParams, U extends Record<string, unknown> = {}> = (
9595
req: RequestParams<T> & U
9696
) => Promise<ServerResponse<T>>
9797

98-
export type ServerMethodHandler<T extends AspidaMethodParams, U extends Record<string, any> = {}> = ServerHandler<T, U> | ServerHandlerPromise<T, U> | {
98+
type AddedRequestHandler<R extends Record<string, unknown>> = RequestHandler extends (req: infer U, ...args: infer V) => infer W ? (req: U & Partial<R>, ...args: V) => W : never
99+
100+
export type ServerHooks<R extends Record<string, unknown> = {}> = {
101+
onRequest?: AddedRequestHandler<R> | AddedRequestHandler<R>[]
102+
preParsing?: AddedRequestHandler<R> | AddedRequestHandler<R>[]
103+
preValidation?: AddedRequestHandler<R> | AddedRequestHandler<R>[]
104+
preHandler?: AddedRequestHandler<R> | AddedRequestHandler<R>[]
105+
}
106+
107+
export type ServerMethodHandler<T extends AspidaMethodParams, U extends Record<string, unknown> = {}> = ServerHandler<T, U> | ServerHandlerPromise<T, U> | {
99108
validators?: Partial<{ [Key in keyof RequestParams<T>]?: z.ZodType<RequestParams<T>[Key]>}>
100109
schemas?: { response?: { [V in HttpStatusOk]?: Schema }}
101-
hooks?: {
102-
onRequest?: RequestHandler | RequestHandler[]
103-
preParsing?: RequestHandler | RequestHandler[]
104-
preValidation?: RequestHandler | RequestHandler[]
105-
preHandler?: RequestHandler | RequestHandler[]
106-
}
110+
hooks?: ServerHooks<U>
107111
handler: ServerHandler<T, U> | ServerHandlerPromise<T, U>
108112
}
109113

@@ -214,7 +218,7 @@ const formatMulterData = (arrayTypeKeys: [string, boolean][]): RequestHandler =>
214218
next()
215219
}
216220

217-
const validatorCompiler = (key: 'params' | 'query' | 'headers' | 'body', validator: z.ZodType<any>): RequestHandler =>
221+
const validatorCompiler = (key: 'params' | 'query' | 'headers' | 'body', validator: z.ZodType<unknown>): RequestHandler =>
218222
(req, res, next) => {
219223
const result = validator.safeParse(req[key])
220224

@@ -487,7 +491,8 @@ export default (app: Express, options: FrourioOptions = {}) => {
487491
hooks0.preParsing,
488492
createTypedParamsHandler(['userId']),
489493
validatorCompiler('params', validators1.params),
490-
methodToHandler(controller8.get)
494+
controller8.get.hooks.preHandler,
495+
methodToHandler(controller8.get.handler)
491496
])
492497

493498
app.get(`${basePath}/users/:userId/:name`, [

servers/all/api/$relay.ts

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,18 @@
11
import type { Injectable } from 'velona'
22
import { depend } from 'velona'
3-
import type { Express, RequestHandler } from 'express'
3+
import type { Express } from 'express'
44
import type { Schema } from 'fast-json-stringify'
55
import type { HttpStatusOk } from 'aspida'
6-
import type { ServerMethodHandler } from '../$server'
6+
import type { ServerHooks, ServerMethodHandler } from '../$server'
77
import type { Methods } from './'
88

9-
type Hooks = {
10-
onRequest?: RequestHandler | RequestHandler[]
11-
preParsing?: RequestHandler | RequestHandler[]
12-
preValidation?: RequestHandler | RequestHandler[]
13-
preHandler?: RequestHandler | RequestHandler[]
14-
}
15-
169
export function defineResponseSchema<T extends { [U in keyof Methods]?: { [V in HttpStatusOk]?: Schema }}>(methods: () => T) {
1710
return methods
1811
}
1912

20-
export function defineHooks<T extends Hooks>(hooks: (app: Express) => T): (app: Express) => T
21-
export function defineHooks<T extends Record<string, any>, U extends Hooks>(deps: T, cb: (d: T, app: Express) => U): Injectable<T, [Express], U>
22-
export function defineHooks<T extends Record<string, any>>(hooks: (app: Express) => Hooks | T, cb?: ((deps: T, app: Express) => Hooks)) {
13+
export function defineHooks<T extends ServerHooks>(hooks: (app: Express) => T): (app: Express) => T
14+
export function defineHooks<T extends Record<string, unknown>, U extends ServerHooks>(deps: T, cb: (d: T, app: Express) => U): Injectable<T, [Express], U>
15+
export function defineHooks<T extends Record<string, unknown>>(hooks: (app: Express) => ServerHooks | T, cb?: ((deps: T, app: Express) => ServerHooks)) {
2316
return cb && typeof hooks !== 'function' ? depend(hooks, cb) : hooks
2417
}
2518

@@ -28,7 +21,7 @@ type ServerMethods = {
2821
}
2922

3023
export function defineController<M extends ServerMethods>(methods: (app: Express) => M): (app: Express) => M
31-
export function defineController<M extends ServerMethods, T extends Record<string, any>>(deps: T, cb: (d: T, app: Express) => M): Injectable<T, [Express], M>
32-
export function defineController<M extends ServerMethods, T extends Record<string, any>>(methods: ((app: Express) => M) | T, cb?: ((deps: T, app: Express) => M)) {
24+
export function defineController<M extends ServerMethods, T extends Record<string, unknown>>(deps: T, cb: (d: T, app: Express) => M): Injectable<T, [Express], M>
25+
export function defineController<M extends ServerMethods, T extends Record<string, unknown>>(methods: ((app: Express) => M) | T, cb?: ((deps: T, app: Express) => M)) {
3326
return cb && typeof methods !== 'function' ? depend(methods, cb) : methods
3427
}

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

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,18 @@
11
import type { Injectable } from 'velona'
22
import { depend } from 'velona'
3-
import type { Express, RequestHandler } from 'express'
3+
import type { Express } from 'express'
44
import type { Schema } from 'fast-json-stringify'
55
import type { HttpStatusOk } from 'aspida'
6-
import type { ServerMethodHandler } from '../../$server'
6+
import type { ServerHooks, ServerMethodHandler } from '../../$server'
77
import type { Methods } from './'
88

9-
type Hooks = {
10-
onRequest?: RequestHandler | RequestHandler[]
11-
preParsing?: RequestHandler | RequestHandler[]
12-
preValidation?: RequestHandler | RequestHandler[]
13-
preHandler?: RequestHandler | RequestHandler[]
14-
}
15-
169
export function defineResponseSchema<T extends { [U in keyof Methods]?: { [V in HttpStatusOk]?: Schema }}>(methods: () => T) {
1710
return methods
1811
}
1912

20-
export function defineHooks<T extends Hooks>(hooks: (app: Express) => T): (app: Express) => T
21-
export function defineHooks<T extends Record<string, any>, U extends Hooks>(deps: T, cb: (d: T, app: Express) => U): Injectable<T, [Express], U>
22-
export function defineHooks<T extends Record<string, any>>(hooks: (app: Express) => Hooks | T, cb?: ((deps: T, app: Express) => Hooks)) {
13+
export function defineHooks<T extends ServerHooks>(hooks: (app: Express) => T): (app: Express) => T
14+
export function defineHooks<T extends Record<string, unknown>, U extends ServerHooks>(deps: T, cb: (d: T, app: Express) => U): Injectable<T, [Express], U>
15+
export function defineHooks<T extends Record<string, unknown>>(hooks: (app: Express) => ServerHooks | T, cb?: ((deps: T, app: Express) => ServerHooks)) {
2316
return cb && typeof hooks !== 'function' ? depend(hooks, cb) : hooks
2417
}
2518

@@ -28,7 +21,7 @@ type ServerMethods = {
2821
}
2922

3023
export function defineController<M extends ServerMethods>(methods: (app: Express) => M): (app: Express) => M
31-
export function defineController<M extends ServerMethods, T extends Record<string, any>>(deps: T, cb: (d: T, app: Express) => M): Injectable<T, [Express], M>
32-
export function defineController<M extends ServerMethods, T extends Record<string, any>>(methods: ((app: Express) => M) | T, cb?: ((deps: T, app: Express) => M)) {
24+
export function defineController<M extends ServerMethods, T extends Record<string, unknown>>(deps: T, cb: (d: T, app: Express) => M): Injectable<T, [Express], M>
25+
export function defineController<M extends ServerMethods, T extends Record<string, unknown>>(methods: ((app: Express) => M) | T, cb?: ((deps: T, app: Express) => M)) {
3326
return cb && typeof methods !== 'function' ? depend(methods, cb) : methods
3427
}

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

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,18 @@
11
import type { Injectable } from 'velona'
22
import { depend } from 'velona'
3-
import type { Express, RequestHandler } from 'express'
3+
import type { Express } from 'express'
44
import type { Schema } from 'fast-json-stringify'
55
import type { HttpStatusOk } from 'aspida'
6-
import type { ServerMethodHandler } from '../../$server'
6+
import type { ServerHooks, ServerMethodHandler } from '../../$server'
77
import type { Methods } from './'
88

9-
type Hooks = {
10-
onRequest?: RequestHandler | RequestHandler[]
11-
preParsing?: RequestHandler | RequestHandler[]
12-
preValidation?: RequestHandler | RequestHandler[]
13-
preHandler?: RequestHandler | RequestHandler[]
14-
}
15-
169
export function defineResponseSchema<T extends { [U in keyof Methods]?: { [V in HttpStatusOk]?: Schema }}>(methods: () => T) {
1710
return methods
1811
}
1912

20-
export function defineHooks<T extends Hooks>(hooks: (app: Express) => T): (app: Express) => T
21-
export function defineHooks<T extends Record<string, any>, U extends Hooks>(deps: T, cb: (d: T, app: Express) => U): Injectable<T, [Express], U>
22-
export function defineHooks<T extends Record<string, any>>(hooks: (app: Express) => Hooks | T, cb?: ((deps: T, app: Express) => Hooks)) {
13+
export function defineHooks<T extends ServerHooks>(hooks: (app: Express) => T): (app: Express) => T
14+
export function defineHooks<T extends Record<string, unknown>, U extends ServerHooks>(deps: T, cb: (d: T, app: Express) => U): Injectable<T, [Express], U>
15+
export function defineHooks<T extends Record<string, unknown>>(hooks: (app: Express) => ServerHooks | T, cb?: ((deps: T, app: Express) => ServerHooks)) {
2316
return cb && typeof hooks !== 'function' ? depend(hooks, cb) : hooks
2417
}
2518

@@ -28,7 +21,7 @@ type ServerMethods = {
2821
}
2922

3023
export function defineController<M extends ServerMethods>(methods: (app: Express) => M): (app: Express) => M
31-
export function defineController<M extends ServerMethods, T extends Record<string, any>>(deps: T, cb: (d: T, app: Express) => M): Injectable<T, [Express], M>
32-
export function defineController<M extends ServerMethods, T extends Record<string, any>>(methods: ((app: Express) => M) | T, cb?: ((deps: T, app: Express) => M)) {
24+
export function defineController<M extends ServerMethods, T extends Record<string, unknown>>(deps: T, cb: (d: T, app: Express) => M): Injectable<T, [Express], M>
25+
export function defineController<M extends ServerMethods, T extends Record<string, unknown>>(methods: ((app: Express) => M) | T, cb?: ((deps: T, app: Express) => M)) {
3326
return cb && typeof methods !== 'function' ? depend(methods, cb) : methods
3427
}
Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,18 @@
11
import type { Injectable } from 'velona'
22
import { depend } from 'velona'
3-
import type { Express, RequestHandler } from 'express'
3+
import type { Express } from 'express'
44
import type { Schema } from 'fast-json-stringify'
55
import type { HttpStatusOk } from 'aspida'
6-
import type { ServerMethodHandler } from '../../../$server'
6+
import type { ServerHooks, ServerMethodHandler } from '../../../$server'
77
import type { Methods } from './'
88

9-
type Hooks = {
10-
onRequest?: RequestHandler | RequestHandler[]
11-
preParsing?: RequestHandler | RequestHandler[]
12-
preValidation?: RequestHandler | RequestHandler[]
13-
preHandler?: RequestHandler | RequestHandler[]
14-
}
15-
169
export function defineResponseSchema<T extends { [U in keyof Methods]?: { [V in HttpStatusOk]?: Schema }}>(methods: () => T) {
1710
return methods
1811
}
1912

20-
export function defineHooks<T extends Hooks>(hooks: (app: Express) => T): (app: Express) => T
21-
export function defineHooks<T extends Record<string, any>, U extends Hooks>(deps: T, cb: (d: T, app: Express) => U): Injectable<T, [Express], U>
22-
export function defineHooks<T extends Record<string, any>>(hooks: (app: Express) => Hooks | T, cb?: ((deps: T, app: Express) => Hooks)) {
13+
export function defineHooks<T extends ServerHooks>(hooks: (app: Express) => T): (app: Express) => T
14+
export function defineHooks<T extends Record<string, unknown>, U extends ServerHooks>(deps: T, cb: (d: T, app: Express) => U): Injectable<T, [Express], U>
15+
export function defineHooks<T extends Record<string, unknown>>(hooks: (app: Express) => ServerHooks | T, cb?: ((deps: T, app: Express) => ServerHooks)) {
2316
return cb && typeof hooks !== 'function' ? depend(hooks, cb) : hooks
2417
}
2518

@@ -28,7 +21,7 @@ type ServerMethods = {
2821
}
2922

3023
export function defineController<M extends ServerMethods>(methods: (app: Express) => M): (app: Express) => M
31-
export function defineController<M extends ServerMethods, T extends Record<string, any>>(deps: T, cb: (d: T, app: Express) => M): Injectable<T, [Express], M>
32-
export function defineController<M extends ServerMethods, T extends Record<string, any>>(methods: ((app: Express) => M) | T, cb?: ((deps: T, app: Express) => M)) {
24+
export function defineController<M extends ServerMethods, T extends Record<string, unknown>>(deps: T, cb: (d: T, app: Express) => M): Injectable<T, [Express], M>
25+
export function defineController<M extends ServerMethods, T extends Record<string, unknown>>(methods: ((app: Express) => M) | T, cb?: ((deps: T, app: Express) => M)) {
3326
return cb && typeof methods !== 'function' ? depend(methods, cb) : methods
3427
}

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

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,18 @@
11
import type { Injectable } from 'velona'
22
import { depend } from 'velona'
3-
import type { Express, RequestHandler } from 'express'
3+
import type { Express } from 'express'
44
import type { Schema } from 'fast-json-stringify'
55
import type { HttpStatusOk } from 'aspida'
6-
import type { ServerMethodHandler } from '../../$server'
6+
import type { ServerHooks, ServerMethodHandler } from '../../$server'
77
import type { Methods } from './'
88

9-
type Hooks = {
10-
onRequest?: RequestHandler | RequestHandler[]
11-
preParsing?: RequestHandler | RequestHandler[]
12-
preValidation?: RequestHandler | RequestHandler[]
13-
preHandler?: RequestHandler | RequestHandler[]
14-
}
15-
169
export function defineResponseSchema<T extends { [U in keyof Methods]?: { [V in HttpStatusOk]?: Schema }}>(methods: () => T) {
1710
return methods
1811
}
1912

20-
export function defineHooks<T extends Hooks>(hooks: (app: Express) => T): (app: Express) => T
21-
export function defineHooks<T extends Record<string, any>, U extends Hooks>(deps: T, cb: (d: T, app: Express) => U): Injectable<T, [Express], U>
22-
export function defineHooks<T extends Record<string, any>>(hooks: (app: Express) => Hooks | T, cb?: ((deps: T, app: Express) => Hooks)) {
13+
export function defineHooks<T extends ServerHooks>(hooks: (app: Express) => T): (app: Express) => T
14+
export function defineHooks<T extends Record<string, unknown>, U extends ServerHooks>(deps: T, cb: (d: T, app: Express) => U): Injectable<T, [Express], U>
15+
export function defineHooks<T extends Record<string, unknown>>(hooks: (app: Express) => ServerHooks | T, cb?: ((deps: T, app: Express) => ServerHooks)) {
2316
return cb && typeof hooks !== 'function' ? depend(hooks, cb) : hooks
2417
}
2518

@@ -28,7 +21,7 @@ type ServerMethods = {
2821
}
2922

3023
export function defineController<M extends ServerMethods>(methods: (app: Express) => M): (app: Express) => M
31-
export function defineController<M extends ServerMethods, T extends Record<string, any>>(deps: T, cb: (d: T, app: Express) => M): Injectable<T, [Express], M>
32-
export function defineController<M extends ServerMethods, T extends Record<string, any>>(methods: ((app: Express) => M) | T, cb?: ((deps: T, app: Express) => M)) {
24+
export function defineController<M extends ServerMethods, T extends Record<string, unknown>>(deps: T, cb: (d: T, app: Express) => M): Injectable<T, [Express], M>
25+
export function defineController<M extends ServerMethods, T extends Record<string, unknown>>(methods: ((app: Express) => M) | T, cb?: ((deps: T, app: Express) => M)) {
3326
return cb && typeof methods !== 'function' ? depend(methods, cb) : methods
3427
}

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

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,18 @@
11
import type { Injectable } from 'velona'
22
import { depend } from 'velona'
3-
import type { Express, RequestHandler } from 'express'
3+
import type { Express } from 'express'
44
import type { Schema } from 'fast-json-stringify'
55
import type { HttpStatusOk } from 'aspida'
6-
import type { ServerMethodHandler } from '../../$server'
6+
import type { ServerHooks, ServerMethodHandler } from '../../$server'
77
import type { Methods } from './'
88

9-
type Hooks = {
10-
onRequest?: RequestHandler | RequestHandler[]
11-
preParsing?: RequestHandler | RequestHandler[]
12-
preValidation?: RequestHandler | RequestHandler[]
13-
preHandler?: RequestHandler | RequestHandler[]
14-
}
15-
169
export function defineResponseSchema<T extends { [U in keyof Methods]?: { [V in HttpStatusOk]?: Schema }}>(methods: () => T) {
1710
return methods
1811
}
1912

20-
export function defineHooks<T extends Hooks>(hooks: (app: Express) => T): (app: Express) => T
21-
export function defineHooks<T extends Record<string, any>, U extends Hooks>(deps: T, cb: (d: T, app: Express) => U): Injectable<T, [Express], U>
22-
export function defineHooks<T extends Record<string, any>>(hooks: (app: Express) => Hooks | T, cb?: ((deps: T, app: Express) => Hooks)) {
13+
export function defineHooks<T extends ServerHooks>(hooks: (app: Express) => T): (app: Express) => T
14+
export function defineHooks<T extends Record<string, unknown>, U extends ServerHooks>(deps: T, cb: (d: T, app: Express) => U): Injectable<T, [Express], U>
15+
export function defineHooks<T extends Record<string, unknown>>(hooks: (app: Express) => ServerHooks | T, cb?: ((deps: T, app: Express) => ServerHooks)) {
2316
return cb && typeof hooks !== 'function' ? depend(hooks, cb) : hooks
2417
}
2518

@@ -28,7 +21,7 @@ type ServerMethods = {
2821
}
2922

3023
export function defineController<M extends ServerMethods>(methods: (app: Express) => M): (app: Express) => M
31-
export function defineController<M extends ServerMethods, T extends Record<string, any>>(deps: T, cb: (d: T, app: Express) => M): Injectable<T, [Express], M>
32-
export function defineController<M extends ServerMethods, T extends Record<string, any>>(methods: ((app: Express) => M) | T, cb?: ((deps: T, app: Express) => M)) {
24+
export function defineController<M extends ServerMethods, T extends Record<string, unknown>>(deps: T, cb: (d: T, app: Express) => M): Injectable<T, [Express], M>
25+
export function defineController<M extends ServerMethods, T extends Record<string, unknown>>(methods: ((app: Express) => M) | T, cb?: ((deps: T, app: Express) => M)) {
3326
return cb && typeof methods !== 'function' ? depend(methods, cb) : methods
3427
}

0 commit comments

Comments
 (0)