Advertisement
Guest User

Untitled

a guest
Sep 21st, 2019
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.96 KB | None | 0 0
  1. import t from 'io-ts';
  2. import { Request } from 'hapi';
  3. import { PathReporter } from 'io-ts/lib/PathReporter';
  4. import { isLeft } from 'fp-ts/lib/Either';
  5.  
  6. interface Params {
  7. path?: t.HasProps;
  8. query?: t.HasProps;
  9. body?: t.Any;
  10. }
  11.  
  12. interface Route {
  13. path: string;
  14. method: 'GET' | 'POST' | 'PUT' | 'DELETE';
  15. params: Params;
  16. handler: (request: Request) => {};
  17. }
  18.  
  19. export const createRoute = (route: Route) => {
  20. const { params, handler, ...rest } = route;
  21.  
  22. return {
  23. ...rest,
  24. handler: (request: Request) => {
  25. const requestData = {
  26. body: request.payload,
  27. path: request.params,
  28. query: request.query
  29. };
  30.  
  31. (Object.keys(params) as Array<keyof Params>).forEach(key => {
  32. const codec = params[key] as t.Any;
  33. const result = codec.decode(requestData[key]);
  34. if (isLeft(result)) {
  35. throw new Error(PathReporter.report(result).join('\n'));
  36. }
  37. });
  38.  
  39. return handler(request);
  40. }
  41. };
  42. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement