Guest User

Untitled

a guest
Jan 16th, 2018
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.08 KB | None | 0 0
  1. // tslint:disable:no-any
  2. // tslint:disable:no-console
  3. // tslint:disable:no-shadowed-variable
  4.  
  5. import * as express from "express";
  6.  
  7. const req = {
  8. a: 1,
  9. b: "2"
  10. };
  11.  
  12. export type IRequestMiddleware<T> = (request: any) => Promise<T>;
  13.  
  14. export type IRequestHandler<T> = (request: any) => Promise<T>;
  15.  
  16. const extractAmw: IRequestMiddleware<number> = (req: any): Promise<number> =>
  17. Promise.resolve(req.a);
  18.  
  19. const extractBmw: IRequestMiddleware<string> = (req: any): Promise<string> =>
  20. Promise.resolve(req.b);
  21.  
  22. const curriedTypedHandler = (a: number) => (b: string): IRequestHandler<{}> => {
  23. return request => Promise.resolve({ "A:": a, "B:": b });
  24. };
  25.  
  26.  
  27. const withRequestMiddleware = <T>(mw1: IRequestMiddleware<T>): ((h) => any) => {
  28. return curriedTypedHandler => {
  29. return async request => {
  30. const mwResult = await mw1(request);
  31. return curriedTypedHandler(mwResult);
  32. };
  33. };
  34. };
  35.  
  36. const h1 = withRequestMiddleware(extractAmw)(curriedTypedHandler)(req).then(
  37. curriedTypedHandler =>
  38. withRequestMiddleware(extractBmw)(curriedTypedHandler)(req)
  39. );
  40.  
  41. h1.then(req).then(console.log);
Add Comment
Please, Sign In to add comment