diff --git a/rollup.config.mjs b/rollup.config.mjs index 595f66f..b619079 100644 --- a/rollup.config.mjs +++ b/rollup.config.mjs @@ -16,7 +16,6 @@ const files = (await globby('./src/*.ts', { types: path.replace('/src/', '/dist/').replace('.ts', '.d.ts'), })).sort((a, b) => a.shortPath.toLowerCase() < b.shortPath.toLowerCase() ? -1 : 1) - // read original package.json const pkg = await fs.readJSON('./package.json') diff --git a/src/AutoRouter.ts b/src/AutoRouter.ts index e239920..2ac5ff3 100644 --- a/src/AutoRouter.ts +++ b/src/AutoRouter.ts @@ -1,7 +1,7 @@ import { Router } from './Router' import { error } from './error' import { json } from './json' -import { AutoRouterOptions, AutoRouterType, IRequest } from './types' +import { AutoRouterOptions, AutoRouterType, IRequest, IRequestStrict} from './types' import { withParams } from './withParams' export const AutoRouter = < @@ -13,17 +13,20 @@ export const AutoRouter = < missing = () => error(404), finally: f = [], before = [], - ...options }: AutoRouterOptions = {} -): AutoRouterType => Router({ + ...options }: AutoRouterOptions = {} +) => Router({ before: [ + // @ts-ignore withParams, ...before ], + // @ts-ignore catch: error, finally: [ + // @ts-ignore (r: any, ...args) => r ?? missing(r, ...args), format, ...f, ], ...options, -}) +}) as AutoRouterType diff --git a/src/Router.ts b/src/Router.ts index d561804..fa55526 100644 --- a/src/Router.ts +++ b/src/Router.ts @@ -10,7 +10,7 @@ export const Router = < RequestType = IRequest, Args extends any[] = any[], ResponseType = any ->({ base = '', routes = [], ...other }: RouterOptions = {}): RouterType => +>({ base = '', routes = [], ...other }: RouterOptions = {}): RouterType => ({ __proto__: new Proxy({}, { // @ts-expect-error (we're adding an expected prop "path" to the get) @@ -72,4 +72,4 @@ export const Router = < return response }, - } as RouterType) + } as RouterType) diff --git a/src/types/AutoRouterOptions.ts b/src/types/AutoRouterOptions.ts index 80afbf2..68386d5 100644 --- a/src/types/AutoRouterOptions.ts +++ b/src/types/AutoRouterOptions.ts @@ -2,7 +2,11 @@ import { RequestHandler } from './RequestHandler' import { ResponseHandler } from './ResponseHandler' import { RouterOptions } from './RouterOptions' -export type AutoRouterOptions = { - missing?: RequestHandler +export type AutoRouterOptions< + RequestType, + Args extends any[], + ResponseType +> = { + missing?: RequestHandler format?: ResponseHandler -} & RouterOptions +} & RouterOptions diff --git a/src/types/AutoRouterType.ts b/src/types/AutoRouterType.ts index 1921c81..ef76260 100644 --- a/src/types/AutoRouterType.ts +++ b/src/types/AutoRouterType.ts @@ -4,10 +4,10 @@ import { ResponseHandler } from './ResponseHandler' import { RouterType } from './RouterType' export type AutoRouterType< - R = IRequest, + RequestType = IRequest, Args extends any[] = any[], ResponseType = any > = { - missing?: RequestHandler + missing?: RequestHandler format?: ResponseHandler -} & RouterType +} & RouterType diff --git a/src/types/ErrorHandler.ts b/src/types/ErrorHandler.ts index 2b133db..7ec77a6 100644 --- a/src/types/ErrorHandler.ts +++ b/src/types/ErrorHandler.ts @@ -3,5 +3,6 @@ import { IRequest } from './IRequest' export type ErrorHandler< ErrorType extends Error = StatusError, - RequestType = IRequest, Args extends any[] = any[] + RequestType = IRequest, + Args extends any[] = any[] > = (error: ErrorType, request: RequestType, ...args: Args) => any diff --git a/src/types/IttyRouterType.ts b/src/types/IttyRouterType.ts index 4279e64..ce5e4dc 100644 --- a/src/types/IttyRouterType.ts +++ b/src/types/IttyRouterType.ts @@ -6,20 +6,20 @@ import { RouteEntry } from './RouteEntry' import { CustomRoutes } from './CustomRoutes' export type IttyRouterType< - R = IRequest, - A extends any[] = any[], + RequestType = IRequest, + Args extends any[] = any[], ResponseType = any, - GlobalRequestType = R, + GlobalRequestType = RequestType, > = { - __proto__: IttyRouterType + __proto__: IttyRouterType routes: RouteEntry[] - fetch: (request: RequestLike, ...extra: Args) => Promise - all: Route - delete: Route - get: Route - head: Route - options: Route - patch: Route - post: Route - put: Route -} & CustomRoutes> & GenericTraps + fetch: (request: RequestLike, ...extra: A) => Promise + all: Route + delete: Route + get: Route + head: Route + options: Route + patch: Route + post: Route + put: Route +} & CustomRoutes> & GenericTraps diff --git a/src/types/RequestHandler.ts b/src/types/RequestHandler.ts index 0cb8d15..489b56b 100644 --- a/src/types/RequestHandler.ts +++ b/src/types/RequestHandler.ts @@ -1,4 +1,6 @@ import { IRequest } from './IRequest' -export type RequestHandler = any[]> = - (request: R, ...args: Args) => any +export type RequestHandler< + RequestType = IRequest, + Args extends Array = any[] +> = (request: RequestType, ...args: Args) => any diff --git a/src/types/ResponseHandler.ts b/src/types/ResponseHandler.ts index ab84377..f8dea0f 100644 --- a/src/types/ResponseHandler.ts +++ b/src/types/ResponseHandler.ts @@ -1,11 +1,11 @@ import { IRequest } from './IRequest' export type ResponseHandler< - ResponseType = Response, + ResponseType = any, RequestType = IRequest, Args extends any[] = any[] > = ( - response: ResponseType & any, - request: RequestType & any, + response: ResponseType, + request: RequestType, ...args: Args ) => any diff --git a/src/types/RouteEntry.ts b/src/types/RouteEntry.ts index 0a618c4..c3bb768 100644 --- a/src/types/RouteEntry.ts +++ b/src/types/RouteEntry.ts @@ -1,8 +1,9 @@ +import { IRequest } from './IRequest' import { RequestHandler } from './RequestHandler' -export type RouteEntry = [ +export type RouteEntry = [ httpMethod: string, match: RegExp, - handlers: RequestHandler[], + handlers: RequestHandler[], path?: string, ] diff --git a/src/types/RouterOptions.ts b/src/types/RouterOptions.ts index d9965fe..10ec224 100644 --- a/src/types/RouterOptions.ts +++ b/src/types/RouterOptions.ts @@ -1,10 +1,16 @@ +import { StatusError } from 'StatusError' import { ErrorHandler } from './ErrorHandler' +import { IRequest } from './IRequest' import { IttyRouterOptions } from './IttyRouterOptions' import { RequestHandler } from './RequestHandler' import { ResponseHandler } from './ResponseHandler' -export type RouterOptions = { - before?: RequestHandler[] - catch?: ErrorHandler - finally?: ResponseHandler[] +export type RouterOptions< + RequestType = IRequest, + Args extends any[] = [], + ResponseType = any +> = { + before?: RequestHandler[] + catch?: ErrorHandler + finally?: ResponseHandler[] } & IttyRouterOptions diff --git a/src/types/RouterType.ts b/src/types/RouterType.ts index b34c9a7..46f8471 100644 --- a/src/types/RouterType.ts +++ b/src/types/RouterType.ts @@ -1,11 +1,16 @@ +import { StatusError } from 'StatusError' import { ErrorHandler } from './ErrorHandler' import { IRequest } from './IRequest' import { IttyRouterType } from './IttyRouterType' import { RequestHandler } from './RequestHandler' import { ResponseHandler } from './ResponseHandler' -export type RouterType = { - before?: RequestHandler[] - catch?: ErrorHandler - finally?: ResponseHandler[] -} & IttyRouterType +export type RouterType< + RequestType = IRequest, + Args extends any[] = any[], + ResponseType = any +> = { + before?: RequestHandler[] + catch?: ErrorHandler + finally?: ResponseHandler[] +} & IttyRouterType