Advertisement
Guest User

Untitled

a guest
Mar 26th, 2019
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import { Type, Static, TBase } from 'typebox'
  2.  
  3. // ------------------------------------------
  4. // Some Decorator Crap
  5. // ------------------------------------------
  6.  
  7. export function Controller(path, request) {
  8.   return (constructor) => {
  9.     // todo:
  10.   }
  11. }
  12. export function Route(path: string, request) {
  13.   return (prototype, method, descriptor) => {
  14.     // todo:
  15.   }
  16. }
  17. export function Define(name) {
  18.   return () => {
  19.     // todo:
  20.   }
  21. }
  22. export function Inject(name) {
  23.   return () => {
  24.     // todo:
  25.   }
  26. }
  27.  
  28. // ------------------------------------------
  29. // Operational Contract
  30. // ------------------------------------------
  31.  
  32. const CreateUserRequest = Type.Object({
  33.   name:  Type.String(),
  34.   email: Type.Number()
  35. })
  36. const CreateUserResponse = Type.Object({
  37.   name:  Type.String(),
  38.   email: Type.Number()
  39. })
  40.  
  41. // ------------------------------------------
  42. // Dependency to be injected
  43. // ------------------------------------------
  44. export class IRepository {}
  45. @Define("Repository") export class Repository {}
  46.  
  47. export class ApiController {}
  48.  
  49. // ------------------------------------------
  50. // Some Controller thing
  51. // ------------------------------------------
  52.  
  53. @Controller('/api/users', {
  54.   comment: 'Manages users.'
  55. })
  56. export class App extends ApiController {
  57.   constructor(@Inject("Repository") repository) {
  58.     super()
  59.   }
  60.   @Route('/create-user', {
  61.     comment:     'Creates a new user.',
  62.     requestType:  CreateUserRequest,
  63.     responseType: CreateUserResponse,
  64.     middleware:   []
  65.   })
  66.   async createUser(request) {
  67.     return request
  68.   }
  69. }
  70.  
  71.  
  72. export class Host {
  73.   mount(controller) {
  74.     // todo:
  75.   }
  76.   listen(port) {
  77.     // todo:
  78.   }
  79. }
  80.  
  81. const host = new Host()
  82. host.mount(App)
  83. host.listen(5000)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement