Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import t from 'io-ts';
- import { Request } from 'hapi';
- import { PathReporter } from 'io-ts/lib/PathReporter';
- import { isLeft } from 'fp-ts/lib/Either';
- interface Params {
- path?: t.HasProps;
- query?: t.HasProps;
- body?: t.Any;
- }
- interface Route {
- path: string;
- method: 'GET' | 'POST' | 'PUT' | 'DELETE';
- params: Params;
- handler: (request: Request) => {};
- }
- export const createRoute = (route: Route) => {
- const { params, handler, ...rest } = route;
- return {
- ...rest,
- handler: (request: Request) => {
- const requestData = {
- body: request.payload,
- path: request.params,
- query: request.query
- };
- (Object.keys(params) as Array<keyof Params>).forEach(key => {
- const codec = params[key] as t.Any;
- const result = codec.decode(requestData[key]);
- if (isLeft(result)) {
- throw new Error(PathReporter.report(result).join('\n'));
- }
- });
- return handler(request);
- }
- };
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement