@tsed/common 7.0.0-alpha.2 → 7.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (427) hide show
  1. package/lib/cjs/builder/PlatformBuilder.js +275 -0
  2. package/lib/cjs/builder/PlatformBuilder.js.map +1 -0
  3. package/lib/cjs/builder/PlatformControllerBuilder.js +85 -0
  4. package/lib/cjs/builder/PlatformControllerBuilder.js.map +1 -0
  5. package/lib/cjs/config/index.js +7 -0
  6. package/lib/cjs/config/index.js.map +1 -0
  7. package/lib/cjs/config/interfaces/ConverterSettings.js +3 -0
  8. package/lib/cjs/config/interfaces/ConverterSettings.js.map +1 -0
  9. package/lib/cjs/config/interfaces/EndpointDirectoriesSettings.js +3 -0
  10. package/lib/cjs/config/interfaces/EndpointDirectoriesSettings.js.map +1 -0
  11. package/lib/cjs/config/interfaces/PlatformLoggerSettings.js +3 -0
  12. package/lib/cjs/config/interfaces/PlatformLoggerSettings.js.map +1 -0
  13. package/lib/cjs/config/interfaces/PlatformMulterSettings.js +3 -0
  14. package/lib/cjs/config/interfaces/PlatformMulterSettings.js.map +1 -0
  15. package/lib/cjs/config/interfaces/PlatformStaticsSettings.js +3 -0
  16. package/lib/cjs/config/interfaces/PlatformStaticsSettings.js.map +1 -0
  17. package/lib/cjs/config/interfaces/index.js +8 -0
  18. package/lib/cjs/config/interfaces/index.js.map +1 -0
  19. package/lib/cjs/config/services/PlatformConfiguration.js +181 -0
  20. package/lib/cjs/config/services/PlatformConfiguration.js.map +1 -0
  21. package/lib/cjs/constants/routerOptions.js +5 -0
  22. package/lib/cjs/constants/routerOptions.js.map +1 -0
  23. package/lib/cjs/decorators/httpServer.js +32 -0
  24. package/lib/cjs/decorators/httpServer.js.map +1 -0
  25. package/lib/cjs/decorators/httpsServer.js +32 -0
  26. package/lib/cjs/decorators/httpsServer.js.map +1 -0
  27. package/lib/cjs/decorators/index.js +21 -0
  28. package/lib/cjs/decorators/index.js.map +1 -0
  29. package/lib/cjs/decorators/method/acceptMime.js +28 -0
  30. package/lib/cjs/decorators/method/acceptMime.js.map +1 -0
  31. package/lib/cjs/decorators/method/endpointFn.js +15 -0
  32. package/lib/cjs/decorators/method/endpointFn.js.map +1 -0
  33. package/lib/cjs/decorators/method/location.js +6 -0
  34. package/lib/cjs/decorators/method/location.js.map +1 -0
  35. package/lib/cjs/decorators/method/redirect.js +6 -0
  36. package/lib/cjs/decorators/method/redirect.js.map +1 -0
  37. package/lib/cjs/decorators/method/route.js +13 -0
  38. package/lib/cjs/decorators/method/route.js.map +1 -0
  39. package/lib/cjs/decorators/method/view.js +34 -0
  40. package/lib/cjs/decorators/method/view.js.map +1 -0
  41. package/lib/cjs/decorators/multer/index.js +7 -0
  42. package/lib/cjs/decorators/multer/index.js.map +1 -0
  43. package/lib/cjs/decorators/multer/multerFileSize.js +35 -0
  44. package/lib/cjs/decorators/multer/multerFileSize.js.map +1 -0
  45. package/lib/cjs/decorators/multer/multerOptions.js +52 -0
  46. package/lib/cjs/decorators/multer/multerOptions.js.map +1 -0
  47. package/lib/cjs/decorators/multer/multipartFile.js +78 -0
  48. package/lib/cjs/decorators/multer/multipartFile.js.map +1 -0
  49. package/lib/cjs/decorators/params/error.js +20 -0
  50. package/lib/cjs/decorators/params/error.js.map +1 -0
  51. package/lib/cjs/decorators/params/next.js +21 -0
  52. package/lib/cjs/decorators/params/next.js.map +1 -0
  53. package/lib/cjs/decorators/params/request.js +39 -0
  54. package/lib/cjs/decorators/params/request.js.map +1 -0
  55. package/lib/cjs/decorators/params/response.js +33 -0
  56. package/lib/cjs/decorators/params/response.js.map +1 -0
  57. package/lib/cjs/domain/AnyToPromiseWithCtx.js +27 -0
  58. package/lib/cjs/domain/AnyToPromiseWithCtx.js.map +1 -0
  59. package/lib/cjs/domain/ControllerProvider.js +51 -0
  60. package/lib/cjs/domain/ControllerProvider.js.map +1 -0
  61. package/lib/cjs/domain/EndpointMetadata.js +70 -0
  62. package/lib/cjs/domain/EndpointMetadata.js.map +1 -0
  63. package/lib/cjs/domain/HandlerMetadata.js +57 -0
  64. package/lib/cjs/domain/HandlerMetadata.js.map +1 -0
  65. package/lib/cjs/domain/PlatformContext.js +92 -0
  66. package/lib/cjs/domain/PlatformContext.js.map +1 -0
  67. package/lib/cjs/domain/PlatformRouteDetails.js +24 -0
  68. package/lib/cjs/domain/PlatformRouteDetails.js.map +1 -0
  69. package/lib/cjs/domain/index.js +10 -0
  70. package/lib/cjs/domain/index.js.map +1 -0
  71. package/lib/cjs/index.js +34 -0
  72. package/lib/cjs/index.js.map +1 -0
  73. package/lib/cjs/interfaces/AfterInit.js +3 -0
  74. package/lib/cjs/interfaces/AfterInit.js.map +1 -0
  75. package/lib/cjs/interfaces/AfterListen.js +3 -0
  76. package/lib/cjs/interfaces/AfterListen.js.map +1 -0
  77. package/lib/cjs/interfaces/AfterRoutesInit.js +3 -0
  78. package/lib/cjs/interfaces/AfterRoutesInit.js.map +1 -0
  79. package/lib/cjs/interfaces/BeforeInit.js +3 -0
  80. package/lib/cjs/interfaces/BeforeInit.js.map +1 -0
  81. package/lib/cjs/interfaces/BeforeListen.js +3 -0
  82. package/lib/cjs/interfaces/BeforeListen.js.map +1 -0
  83. package/lib/cjs/interfaces/BeforeRoutesInit.js +3 -0
  84. package/lib/cjs/interfaces/BeforeRoutesInit.js.map +1 -0
  85. package/lib/cjs/interfaces/HandlerType.js +17 -0
  86. package/lib/cjs/interfaces/HandlerType.js.map +1 -0
  87. package/lib/cjs/interfaces/IncomingEvent.js +3 -0
  88. package/lib/cjs/interfaces/IncomingEvent.js.map +1 -0
  89. package/lib/cjs/interfaces/OnReady.js +3 -0
  90. package/lib/cjs/interfaces/OnReady.js.map +1 -0
  91. package/lib/cjs/interfaces/OnRequest.js +3 -0
  92. package/lib/cjs/interfaces/OnRequest.js.map +1 -0
  93. package/lib/cjs/interfaces/OnResponse.js +3 -0
  94. package/lib/cjs/interfaces/OnResponse.js.map +1 -0
  95. package/lib/cjs/interfaces/OnRoutesInit.js +3 -0
  96. package/lib/cjs/interfaces/OnRoutesInit.js.map +1 -0
  97. package/lib/cjs/interfaces/PathType.js +3 -0
  98. package/lib/cjs/interfaces/PathType.js.map +1 -0
  99. package/lib/cjs/interfaces/PlatformAdapter.js +3 -0
  100. package/lib/cjs/interfaces/PlatformAdapter.js.map +1 -0
  101. package/lib/cjs/interfaces/PlatformRouteOptions.js +3 -0
  102. package/lib/cjs/interfaces/PlatformRouteOptions.js.map +1 -0
  103. package/lib/cjs/interfaces/ResponseErrorObject.js +3 -0
  104. package/lib/cjs/interfaces/ResponseErrorObject.js.map +1 -0
  105. package/lib/cjs/interfaces/Route.js +3 -0
  106. package/lib/cjs/interfaces/Route.js.map +1 -0
  107. package/lib/cjs/interfaces/index.js +21 -0
  108. package/lib/cjs/interfaces/index.js.map +1 -0
  109. package/lib/cjs/middlewares/PlatformAcceptMimesMiddleware.js +37 -0
  110. package/lib/cjs/middlewares/PlatformAcceptMimesMiddleware.js.map +1 -0
  111. package/lib/cjs/middlewares/PlatformMulterMiddleware.js +55 -0
  112. package/lib/cjs/middlewares/PlatformMulterMiddleware.js.map +1 -0
  113. package/lib/cjs/middlewares/__mock__/FakeCtrl.js +12 -0
  114. package/lib/cjs/middlewares/__mock__/FakeCtrl.js.map +1 -0
  115. package/lib/cjs/middlewares/bindEndpointMiddleware.js +13 -0
  116. package/lib/cjs/middlewares/bindEndpointMiddleware.js.map +1 -0
  117. package/lib/cjs/middlewares/index.js +7 -0
  118. package/lib/cjs/middlewares/index.js.map +1 -0
  119. package/lib/cjs/services/FakeRawDriver.js +26 -0
  120. package/lib/cjs/services/FakeRawDriver.js.map +1 -0
  121. package/lib/cjs/services/Platform.js +107 -0
  122. package/lib/cjs/services/Platform.js.map +1 -0
  123. package/lib/cjs/services/PlatformApplication.js +34 -0
  124. package/lib/cjs/services/PlatformApplication.js.map +1 -0
  125. package/lib/cjs/services/PlatformHandler.js +233 -0
  126. package/lib/cjs/services/PlatformHandler.js.map +1 -0
  127. package/lib/cjs/services/PlatformMiddlewaresChain.js +34 -0
  128. package/lib/cjs/services/PlatformMiddlewaresChain.js.map +1 -0
  129. package/lib/cjs/services/PlatformRequest.js +138 -0
  130. package/lib/cjs/services/PlatformRequest.js.map +1 -0
  131. package/lib/cjs/services/PlatformResponse.js +271 -0
  132. package/lib/cjs/services/PlatformResponse.js.map +1 -0
  133. package/lib/cjs/services/PlatformRouter.js +126 -0
  134. package/lib/cjs/services/PlatformRouter.js.map +1 -0
  135. package/lib/cjs/services/PlatformTest.js +166 -0
  136. package/lib/cjs/services/PlatformTest.js.map +1 -0
  137. package/lib/cjs/services/index.js +12 -0
  138. package/lib/cjs/services/index.js.map +1 -0
  139. package/lib/cjs/utils/createContext.js +38 -0
  140. package/lib/cjs/utils/createContext.js.map +1 -0
  141. package/lib/cjs/utils/createHandlerMetadata.js +49 -0
  142. package/lib/cjs/utils/createHandlerMetadata.js.map +1 -0
  143. package/lib/cjs/utils/createHttpServer.js +34 -0
  144. package/lib/cjs/utils/createHttpServer.js.map +1 -0
  145. package/lib/cjs/utils/createHttpsServer.js +34 -0
  146. package/lib/cjs/utils/createHttpsServer.js.map +1 -0
  147. package/lib/cjs/utils/createInjector.js +38 -0
  148. package/lib/cjs/utils/createInjector.js.map +1 -0
  149. package/lib/cjs/utils/getConfiguration.js +42 -0
  150. package/lib/cjs/utils/getConfiguration.js.map +1 -0
  151. package/lib/cjs/utils/getStaticsOptions.js +21 -0
  152. package/lib/cjs/utils/getStaticsOptions.js.map +1 -0
  153. package/lib/cjs/utils/index.js +11 -0
  154. package/lib/cjs/utils/index.js.map +1 -0
  155. package/lib/cjs/utils/listenServer.js +21 -0
  156. package/lib/cjs/utils/listenServer.js.map +1 -0
  157. package/lib/cjs/utils/mapReturnedResponse.js +15 -0
  158. package/lib/cjs/utils/mapReturnedResponse.js.map +1 -0
  159. package/lib/cjs/utils/printRoutes.js +36 -0
  160. package/lib/cjs/utils/printRoutes.js.map +1 -0
  161. package/lib/cjs/utils/setResponseHeaders.js +35 -0
  162. package/lib/cjs/utils/setResponseHeaders.js.map +1 -0
  163. package/lib/cjs/utils/useCtxHandler.js +15 -0
  164. package/lib/cjs/utils/useCtxHandler.js.map +1 -0
  165. package/lib/esm/builder/PlatformBuilder.js +271 -0
  166. package/lib/esm/builder/PlatformBuilder.js.map +1 -0
  167. package/lib/esm/builder/PlatformControllerBuilder.js +79 -0
  168. package/lib/esm/builder/PlatformControllerBuilder.js.map +1 -0
  169. package/lib/esm/config/index.js +4 -0
  170. package/lib/esm/config/index.js.map +1 -0
  171. package/lib/esm/config/interfaces/ConverterSettings.js +2 -0
  172. package/lib/esm/config/interfaces/ConverterSettings.js.map +1 -0
  173. package/lib/esm/config/interfaces/EndpointDirectoriesSettings.js +2 -0
  174. package/lib/esm/config/interfaces/EndpointDirectoriesSettings.js.map +1 -0
  175. package/lib/esm/config/interfaces/PlatformLoggerSettings.js +2 -0
  176. package/lib/esm/config/interfaces/PlatformLoggerSettings.js.map +1 -0
  177. package/lib/esm/config/interfaces/PlatformMulterSettings.js +2 -0
  178. package/lib/esm/config/interfaces/PlatformMulterSettings.js.map +1 -0
  179. package/lib/esm/config/interfaces/PlatformStaticsSettings.js +2 -0
  180. package/lib/esm/config/interfaces/PlatformStaticsSettings.js.map +1 -0
  181. package/lib/esm/config/interfaces/index.js +5 -0
  182. package/lib/esm/config/interfaces/index.js.map +1 -0
  183. package/lib/esm/config/services/PlatformConfiguration.js +178 -0
  184. package/lib/esm/config/services/PlatformConfiguration.js.map +1 -0
  185. package/lib/esm/constants/routerOptions.js +2 -0
  186. package/lib/esm/constants/routerOptions.js.map +1 -0
  187. package/lib/esm/decorators/httpServer.js +28 -0
  188. package/lib/esm/decorators/httpServer.js.map +1 -0
  189. package/lib/esm/decorators/httpsServer.js +28 -0
  190. package/lib/esm/decorators/httpsServer.js.map +1 -0
  191. package/lib/esm/decorators/index.js +18 -0
  192. package/lib/esm/decorators/index.js.map +1 -0
  193. package/lib/esm/decorators/method/acceptMime.js +24 -0
  194. package/lib/esm/decorators/method/acceptMime.js.map +1 -0
  195. package/lib/esm/decorators/method/endpointFn.js +11 -0
  196. package/lib/esm/decorators/method/endpointFn.js.map +1 -0
  197. package/lib/esm/decorators/method/location.js +2 -0
  198. package/lib/esm/decorators/method/location.js.map +1 -0
  199. package/lib/esm/decorators/method/redirect.js +2 -0
  200. package/lib/esm/decorators/method/redirect.js.map +1 -0
  201. package/lib/esm/decorators/method/route.js +2 -0
  202. package/lib/esm/decorators/method/route.js.map +1 -0
  203. package/lib/esm/decorators/method/view.js +30 -0
  204. package/lib/esm/decorators/method/view.js.map +1 -0
  205. package/lib/esm/decorators/multer/index.js +4 -0
  206. package/lib/esm/decorators/multer/index.js.map +1 -0
  207. package/lib/esm/decorators/multer/multerFileSize.js +31 -0
  208. package/lib/esm/decorators/multer/multerFileSize.js.map +1 -0
  209. package/lib/esm/decorators/multer/multerOptions.js +48 -0
  210. package/lib/esm/decorators/multer/multerOptions.js.map +1 -0
  211. package/lib/esm/decorators/multer/multipartFile.js +74 -0
  212. package/lib/esm/decorators/multer/multipartFile.js.map +1 -0
  213. package/lib/esm/decorators/params/error.js +16 -0
  214. package/lib/esm/decorators/params/error.js.map +1 -0
  215. package/lib/esm/decorators/params/next.js +17 -0
  216. package/lib/esm/decorators/params/next.js.map +1 -0
  217. package/lib/esm/decorators/params/request.js +34 -0
  218. package/lib/esm/decorators/params/request.js.map +1 -0
  219. package/lib/esm/decorators/params/response.js +28 -0
  220. package/lib/esm/decorators/params/response.js.map +1 -0
  221. package/lib/esm/domain/AnyToPromiseWithCtx.js +23 -0
  222. package/lib/esm/domain/AnyToPromiseWithCtx.js.map +1 -0
  223. package/lib/esm/domain/ControllerProvider.js +47 -0
  224. package/lib/esm/domain/ControllerProvider.js.map +1 -0
  225. package/lib/esm/domain/EndpointMetadata.js +67 -0
  226. package/lib/esm/domain/EndpointMetadata.js.map +1 -0
  227. package/lib/esm/domain/HandlerMetadata.js +53 -0
  228. package/lib/esm/domain/HandlerMetadata.js.map +1 -0
  229. package/lib/esm/domain/PlatformContext.js +88 -0
  230. package/lib/esm/domain/PlatformContext.js.map +1 -0
  231. package/lib/esm/domain/PlatformRouteDetails.js +20 -0
  232. package/lib/esm/domain/PlatformRouteDetails.js.map +1 -0
  233. package/lib/esm/domain/index.js +7 -0
  234. package/lib/esm/domain/index.js.map +1 -0
  235. package/lib/esm/index.js +28 -0
  236. package/lib/esm/index.js.map +1 -0
  237. package/lib/esm/interfaces/AfterInit.js +2 -0
  238. package/lib/esm/interfaces/AfterInit.js.map +1 -0
  239. package/lib/esm/interfaces/AfterListen.js +2 -0
  240. package/lib/esm/interfaces/AfterListen.js.map +1 -0
  241. package/lib/esm/interfaces/AfterRoutesInit.js +2 -0
  242. package/lib/esm/interfaces/AfterRoutesInit.js.map +1 -0
  243. package/lib/esm/interfaces/BeforeInit.js +2 -0
  244. package/lib/esm/interfaces/BeforeInit.js.map +1 -0
  245. package/lib/esm/interfaces/BeforeListen.js +2 -0
  246. package/lib/esm/interfaces/BeforeListen.js.map +1 -0
  247. package/lib/esm/interfaces/BeforeRoutesInit.js +2 -0
  248. package/lib/esm/interfaces/BeforeRoutesInit.js.map +1 -0
  249. package/lib/esm/interfaces/HandlerType.js +14 -0
  250. package/lib/esm/interfaces/HandlerType.js.map +1 -0
  251. package/lib/esm/interfaces/IncomingEvent.js +2 -0
  252. package/lib/esm/interfaces/IncomingEvent.js.map +1 -0
  253. package/lib/esm/interfaces/OnReady.js +2 -0
  254. package/lib/esm/interfaces/OnReady.js.map +1 -0
  255. package/lib/esm/interfaces/OnRequest.js +2 -0
  256. package/lib/esm/interfaces/OnRequest.js.map +1 -0
  257. package/lib/esm/interfaces/OnResponse.js +2 -0
  258. package/lib/esm/interfaces/OnResponse.js.map +1 -0
  259. package/lib/esm/interfaces/OnRoutesInit.js +2 -0
  260. package/lib/esm/interfaces/OnRoutesInit.js.map +1 -0
  261. package/lib/esm/interfaces/PathType.js +2 -0
  262. package/lib/esm/interfaces/PathType.js.map +1 -0
  263. package/lib/esm/interfaces/PlatformAdapter.js +2 -0
  264. package/lib/esm/interfaces/PlatformAdapter.js.map +1 -0
  265. package/lib/esm/interfaces/PlatformRouteOptions.js +2 -0
  266. package/lib/esm/interfaces/PlatformRouteOptions.js.map +1 -0
  267. package/lib/esm/interfaces/ResponseErrorObject.js +2 -0
  268. package/lib/esm/interfaces/ResponseErrorObject.js.map +1 -0
  269. package/lib/esm/interfaces/Route.js +2 -0
  270. package/lib/esm/interfaces/Route.js.map +1 -0
  271. package/lib/esm/interfaces/index.js +18 -0
  272. package/lib/esm/interfaces/index.js.map +1 -0
  273. package/lib/esm/middlewares/PlatformAcceptMimesMiddleware.js +34 -0
  274. package/lib/esm/middlewares/PlatformAcceptMimesMiddleware.js.map +1 -0
  275. package/lib/esm/middlewares/PlatformMulterMiddleware.js +52 -0
  276. package/lib/esm/middlewares/PlatformMulterMiddleware.js.map +1 -0
  277. package/lib/esm/middlewares/__mock__/FakeCtrl.js +9 -0
  278. package/lib/esm/middlewares/__mock__/FakeCtrl.js.map +1 -0
  279. package/lib/esm/middlewares/bindEndpointMiddleware.js +9 -0
  280. package/lib/esm/middlewares/bindEndpointMiddleware.js.map +1 -0
  281. package/lib/esm/middlewares/index.js +4 -0
  282. package/lib/esm/middlewares/index.js.map +1 -0
  283. package/lib/esm/services/FakeRawDriver.js +22 -0
  284. package/lib/esm/services/FakeRawDriver.js.map +1 -0
  285. package/lib/esm/services/Platform.js +104 -0
  286. package/lib/esm/services/Platform.js.map +1 -0
  287. package/lib/esm/services/PlatformApplication.js +31 -0
  288. package/lib/esm/services/PlatformApplication.js.map +1 -0
  289. package/lib/esm/services/PlatformHandler.js +230 -0
  290. package/lib/esm/services/PlatformHandler.js.map +1 -0
  291. package/lib/esm/services/PlatformMiddlewaresChain.js +31 -0
  292. package/lib/esm/services/PlatformMiddlewaresChain.js.map +1 -0
  293. package/lib/esm/services/PlatformRequest.js +135 -0
  294. package/lib/esm/services/PlatformRequest.js.map +1 -0
  295. package/lib/esm/services/PlatformResponse.js +268 -0
  296. package/lib/esm/services/PlatformResponse.js.map +1 -0
  297. package/lib/esm/services/PlatformRouter.js +123 -0
  298. package/lib/esm/services/PlatformRouter.js.map +1 -0
  299. package/lib/esm/services/PlatformTest.js +162 -0
  300. package/lib/esm/services/PlatformTest.js.map +1 -0
  301. package/lib/esm/services/index.js +9 -0
  302. package/lib/esm/services/index.js.map +1 -0
  303. package/lib/esm/utils/createContext.js +34 -0
  304. package/lib/esm/utils/createContext.js.map +1 -0
  305. package/lib/esm/utils/createHandlerMetadata.js +45 -0
  306. package/lib/esm/utils/createHandlerMetadata.js.map +1 -0
  307. package/lib/esm/utils/createHttpServer.js +29 -0
  308. package/lib/esm/utils/createHttpServer.js.map +1 -0
  309. package/lib/esm/utils/createHttpsServer.js +29 -0
  310. package/lib/esm/utils/createHttpsServer.js.map +1 -0
  311. package/lib/esm/utils/createInjector.js +34 -0
  312. package/lib/esm/utils/createInjector.js.map +1 -0
  313. package/lib/esm/utils/getConfiguration.js +38 -0
  314. package/lib/esm/utils/getConfiguration.js.map +1 -0
  315. package/lib/esm/utils/getStaticsOptions.js +17 -0
  316. package/lib/esm/utils/getStaticsOptions.js.map +1 -0
  317. package/lib/esm/utils/index.js +8 -0
  318. package/lib/esm/utils/index.js.map +1 -0
  319. package/lib/esm/utils/listenServer.js +17 -0
  320. package/lib/esm/utils/listenServer.js.map +1 -0
  321. package/lib/esm/utils/mapReturnedResponse.js +11 -0
  322. package/lib/esm/utils/mapReturnedResponse.js.map +1 -0
  323. package/lib/esm/utils/printRoutes.js +32 -0
  324. package/lib/esm/utils/printRoutes.js.map +1 -0
  325. package/lib/esm/utils/setResponseHeaders.js +31 -0
  326. package/lib/esm/utils/setResponseHeaders.js.map +1 -0
  327. package/lib/esm/utils/useCtxHandler.js +11 -0
  328. package/lib/esm/utils/useCtxHandler.js.map +1 -0
  329. package/lib/{builder → types/builder}/PlatformBuilder.d.ts +25 -30
  330. package/lib/types/builder/PlatformControllerBuilder.d.ts +17 -0
  331. package/lib/{config → types/config}/index.d.ts +0 -0
  332. package/lib/{config → types/config}/interfaces/ConverterSettings.d.ts +0 -0
  333. package/lib/{config → types/config}/interfaces/EndpointDirectoriesSettings.d.ts +0 -0
  334. package/lib/{config → types/config}/interfaces/PlatformLoggerSettings.d.ts +0 -0
  335. package/lib/{config → types/config}/interfaces/PlatformMulterSettings.d.ts +0 -0
  336. package/lib/{config → types/config}/interfaces/PlatformStaticsSettings.d.ts +1 -0
  337. package/lib/{config → types/config}/interfaces/index.d.ts +14 -1
  338. package/lib/{config → types/config}/services/PlatformConfiguration.d.ts +12 -11
  339. package/lib/{constants → types/constants}/routerOptions.d.ts +0 -0
  340. package/lib/{decorators → types/decorators}/httpServer.d.ts +1 -0
  341. package/lib/{decorators → types/decorators}/httpsServer.d.ts +1 -0
  342. package/lib/{decorators → types/decorators}/index.d.ts +1 -0
  343. package/lib/{decorators → types/decorators}/method/acceptMime.d.ts +0 -0
  344. package/lib/{decorators → types/decorators}/method/endpointFn.d.ts +1 -0
  345. package/lib/{decorators → types/decorators}/method/location.d.ts +0 -0
  346. package/lib/{decorators → types/decorators}/method/redirect.d.ts +0 -0
  347. package/lib/{decorators → types/decorators}/method/route.d.ts +0 -0
  348. package/lib/types/decorators/method/view.d.ts +25 -0
  349. package/lib/{decorators → types/decorators}/multer/index.d.ts +0 -0
  350. package/lib/{decorators → types/decorators}/multer/multerFileSize.d.ts +0 -0
  351. package/lib/{decorators → types/decorators}/multer/multerOptions.d.ts +0 -0
  352. package/lib/{decorators → types/decorators}/multer/multipartFile.d.ts +0 -0
  353. package/lib/{decorators → types/decorators}/params/error.d.ts +0 -0
  354. package/lib/{decorators → types/decorators}/params/next.d.ts +0 -0
  355. package/lib/{decorators → types/decorators}/params/request.d.ts +0 -0
  356. package/lib/{decorators → types/decorators}/params/response.d.ts +0 -0
  357. package/lib/{domain → types/domain}/AnyToPromiseWithCtx.d.ts +0 -0
  358. package/lib/types/domain/ControllerProvider.d.ts +24 -0
  359. package/lib/{domain → types/domain}/EndpointMetadata.d.ts +3 -41
  360. package/lib/{domain → types/domain}/HandlerMetadata.d.ts +2 -2
  361. package/lib/{domain → types/domain}/PlatformContext.d.ts +0 -0
  362. package/lib/{domain → types/domain}/PlatformRouteDetails.d.ts +4 -10
  363. package/lib/{domain → types/domain}/index.d.ts +0 -0
  364. package/lib/{index.d.ts → types/index.d.ts} +1 -3
  365. package/lib/{interfaces → types/interfaces}/AfterInit.d.ts +0 -0
  366. package/lib/{interfaces → types/interfaces}/AfterListen.d.ts +0 -0
  367. package/lib/{interfaces → types/interfaces}/AfterRoutesInit.d.ts +0 -0
  368. package/lib/{interfaces → types/interfaces}/BeforeInit.d.ts +0 -0
  369. package/lib/{interfaces → types/interfaces}/BeforeListen.d.ts +0 -0
  370. package/lib/{interfaces → types/interfaces}/BeforeRoutesInit.d.ts +0 -0
  371. package/lib/{interfaces → types/interfaces}/HandlerType.d.ts +0 -0
  372. package/lib/{interfaces → types/interfaces}/IncomingEvent.d.ts +0 -0
  373. package/lib/{interfaces → types/interfaces}/OnReady.d.ts +0 -0
  374. package/lib/{interfaces → types/interfaces}/OnRequest.d.ts +0 -0
  375. package/lib/{interfaces → types/interfaces}/OnResponse.d.ts +0 -0
  376. package/lib/{interfaces → types/interfaces}/OnRoutesInit.d.ts +0 -0
  377. package/lib/{interfaces → types/interfaces}/PathType.d.ts +0 -0
  378. package/lib/types/interfaces/PlatformAdapter.d.ts +19 -0
  379. package/lib/{interfaces → types/interfaces}/PlatformRouteOptions.d.ts +6 -4
  380. package/lib/{interfaces → types/interfaces}/ResponseErrorObject.d.ts +0 -0
  381. package/lib/{interfaces → types/interfaces}/Route.d.ts +0 -0
  382. package/lib/{interfaces → types/interfaces}/index.d.ts +1 -1
  383. package/lib/{middlewares → types/middlewares}/PlatformAcceptMimesMiddleware.d.ts +0 -0
  384. package/lib/{middlewares → types/middlewares}/PlatformMulterMiddleware.d.ts +0 -0
  385. package/lib/{middlewares/data → types/middlewares/__mock__}/FakeCtrl.d.ts +0 -0
  386. package/lib/{middlewares → types/middlewares}/bindEndpointMiddleware.d.ts +0 -0
  387. package/lib/{middlewares → types/middlewares}/index.d.ts +0 -0
  388. package/lib/{services → types/services}/FakeRawDriver.d.ts +0 -0
  389. package/lib/{services → types/services}/Platform.d.ts +12 -6
  390. package/lib/{services → types/services}/PlatformApplication.d.ts +0 -0
  391. package/lib/{services → types/services}/PlatformHandler.d.ts +0 -0
  392. package/lib/types/services/PlatformMiddlewaresChain.d.ts +6 -0
  393. package/lib/{services → types/services}/PlatformRequest.d.ts +2 -1
  394. package/lib/{services → types/services}/PlatformResponse.d.ts +4 -4
  395. package/lib/{services → types/services}/PlatformRouter.d.ts +3 -2
  396. package/lib/{services → types/services}/PlatformTest.d.ts +7 -6
  397. package/lib/{services → types/services}/index.d.ts +1 -0
  398. package/lib/{utils → types/utils}/createContext.d.ts +0 -0
  399. package/lib/{utils → types/utils}/createHandlerMetadata.d.ts +0 -0
  400. package/lib/types/utils/createHttpServer.d.ts +4 -0
  401. package/lib/types/utils/createHttpsServer.d.ts +4 -0
  402. package/lib/types/utils/createInjector.d.ts +7 -0
  403. package/lib/types/utils/getConfiguration.d.ts +2 -0
  404. package/lib/types/utils/getStaticsOptions.d.ts +5 -0
  405. package/lib/{utils → types/utils}/index.d.ts +0 -1
  406. package/lib/types/utils/listenServer.d.ts +7 -0
  407. package/lib/{utils → types/utils}/mapReturnedResponse.d.ts +0 -0
  408. package/lib/{utils → types/utils}/printRoutes.d.ts +0 -0
  409. package/lib/{utils → types/utils}/setResponseHeaders.d.ts +0 -0
  410. package/lib/{utils → types/utils}/useCtxHandler.d.ts +0 -0
  411. package/package.json +29 -28
  412. package/tsconfig.compile.esm.json +23 -0
  413. package/lib/PlatformModule.d.ts +0 -15
  414. package/lib/builder/PlatformControllerBuilder.d.ts +0 -19
  415. package/lib/domain/ControllerProvider.d.ts +0 -53
  416. package/lib/index.js +0 -3651
  417. package/lib/index.js.map +0 -1
  418. package/lib/index.modern.js +0 -3464
  419. package/lib/index.modern.js.map +0 -1
  420. package/lib/interfaces/PlatformRouterMethods.d.ts +0 -10
  421. package/lib/registries/ControllerRegistry.d.ts +0 -1
  422. package/lib/utils/createHttpServer.d.ts +0 -3
  423. package/lib/utils/createHttpsServer.d.ts +0 -3
  424. package/lib/utils/createInjector.d.ts +0 -2
  425. package/lib/utils/createPlatformApplication.d.ts +0 -2
  426. package/lib/utils/getControllerPath.d.ts +0 -2
  427. package/lib/utils/listenServer.d.ts +0 -10
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.modern.js","sources":["../src/config/services/PlatformConfiguration.ts","../src/middlewares/bindEndpointMiddleware.ts","../src/middlewares/PlatformAcceptMimesMiddleware.ts","../src/services/FakeRawDriver.ts","../src/domain/AnyToPromiseWithCtx.ts","../src/interfaces/HandlerType.ts","../src/domain/HandlerMetadata.ts","../src/domain/EndpointMetadata.ts","../src/utils/createHandlerMetadata.ts","../src/utils/setResponseHeaders.ts","../src/services/PlatformHandler.ts","../src/services/PlatformRouter.ts","../src/services/PlatformApplication.ts","../src/middlewares/PlatformMulterMiddleware.ts","../src/utils/useCtxHandler.ts","../src/builder/PlatformControllerBuilder.ts","../src/services/PlatformRequest.ts","../src/services/PlatformResponse.ts","../src/domain/PlatformContext.ts","../src/domain/PlatformRouteDetails.ts","../src/constants/routerOptions.ts","../src/domain/ControllerProvider.ts","../src/utils/getControllerPath.ts","../src/services/Platform.ts","../src/PlatformModule.ts","../src/utils/createInjector.ts","../src/utils/createPlatformApplication.ts","../src/decorators/httpServer.ts","../src/utils/listenServer.ts","../src/utils/createHttpServer.ts","../src/decorators/httpsServer.ts","../src/utils/createHttpsServer.ts","../src/utils/printRoutes.ts","../src/utils/createContext.ts","../src/builder/PlatformBuilder.ts","../src/decorators/multer/multerOptions.ts","../src/decorators/multer/multerFileSize.ts","../src/decorators/multer/multipartFile.ts","../src/decorators/method/endpointFn.ts","../src/decorators/method/acceptMime.ts","../src/decorators/params/response.ts","../src/decorators/params/request.ts","../src/decorators/params/next.ts","../src/decorators/params/error.ts","../src/utils/mapReturnedResponse.ts","../src/services/PlatformTest.ts","../src/registries/ControllerRegistry.ts"],"sourcesContent":["import {Env} from \"@tsed/core\";\nimport {DIConfiguration, Injectable, ProviderScope, ProviderType} from \"@tsed/di\";\nimport {$log} from \"@tsed/logger\";\nimport Https from \"https\";\nimport {EndpointDirectoriesSettings, PlatformLoggerSettings} from \"../interfaces\";\nimport {ConverterSettings} from \"../interfaces/ConverterSettings\";\n\nconst rootDir = process.cwd();\n\n/**\n * `PlatformConfiguration` contains all information about your Server configuration.\n */\n@Injectable({\n scope: ProviderScope.SINGLETON,\n global: true\n})\nexport class PlatformConfiguration extends DIConfiguration {\n constructor() {\n super({\n rootDir,\n env: (process.env.NODE_ENV as Env) || Env.DEV,\n httpPort: 8080,\n httpsPort: false,\n scopes: {\n [ProviderType.CONTROLLER]: ProviderScope.SINGLETON\n },\n logger: {\n debug: false,\n level: \"info\",\n logRequest: true,\n jsonIndentation: process.env.NODE_ENV === Env.PROD ? 0 : 2\n },\n errors: {\n headerName: \"errors\"\n },\n mount: {\n \"/rest\": \"${rootDir}/controllers/**/*.ts\"\n },\n exclude: [\"**/*.spec.ts\", \"**/*.spec.js\"],\n componentsScan: [\"${rootDir}/mvc/**/*.ts\", \"${rootDir}/services/**/*.ts\", \"${rootDir}/middlewares/**/*.ts\"]\n });\n }\n\n get version() {\n return this.getRaw(\"version\");\n }\n\n set version(v: string) {\n this.setRaw(\"version\", v);\n }\n\n get rootDir() {\n return this.getRaw(\"rootDir\");\n }\n\n set rootDir(value: string) {\n this.setRaw(\"rootDir\", value);\n }\n\n get port(): string | number | false {\n return this.httpPort;\n }\n\n set port(value: string | number | false) {\n this.httpPort = value;\n }\n\n get httpsOptions(): Https.ServerOptions {\n return this.getRaw(\"httpsOptions\");\n }\n\n set httpsOptions(value: Https.ServerOptions) {\n this.setRaw(\"httpsOptions\", value);\n }\n\n get httpPort(): string | number | false {\n return this.getRaw(\"httpPort\");\n }\n\n set httpPort(value: string | number | false) {\n this.setRaw(\"httpPort\", value);\n }\n\n get httpsPort(): string | number | false {\n return this.getRaw(\"httpsPort\");\n }\n\n set httpsPort(value: string | number | false) {\n this.setRaw(\"httpsPort\", value);\n }\n\n get env(): Env {\n return this.getRaw(\"env\");\n }\n\n set env(value: Env) {\n this.setRaw(\"env\", value);\n }\n\n get mount(): EndpointDirectoriesSettings {\n return this.get(\"mount\");\n }\n\n set mount(value: EndpointDirectoriesSettings) {\n this.setRaw(\"mount\", value);\n }\n\n get componentsScan(): string[] {\n return this.resolve(this.getRaw(\"componentsScan\"));\n }\n\n set componentsScan(value: string[]) {\n this.setRaw(\"componentsScan\", value);\n }\n\n get statics(): EndpointDirectoriesSettings {\n return this.getRaw(\"statics\") || this.getRaw(\"serveStatic\") || {};\n }\n\n set statics(value: EndpointDirectoriesSettings) {\n this.setRaw(\"statics\", value);\n }\n\n get acceptMimes(): string[] {\n return this.getRaw(\"acceptMimes\");\n }\n\n set acceptMimes(value: string[]) {\n this.setRaw(\"acceptMimes\", value || []);\n }\n\n get debug(): boolean {\n return this.logger.level === \"debug\";\n }\n\n set debug(debug: boolean) {\n this.logger = {...this.logger, level: debug ? \"debug\" : \"info\"};\n }\n\n get converter(): Partial<ConverterSettings> {\n return this.get(\"converter\") || {};\n }\n\n set converter(options: Partial<ConverterSettings>) {\n this.setRaw(\"converter\", options);\n }\n\n get logger(): Partial<PlatformLoggerSettings> {\n return this.get(\"logger\");\n }\n\n set logger(value: Partial<PlatformLoggerSettings>) {\n const logger = {...this.logger, ...value};\n logger.debug = logger.level === \"debug\";\n\n this.setRaw(\"logger\", logger);\n this.setRaw(\"debug\", logger.debug);\n\n if (logger.format) {\n $log.appenders.set(\"stdout\", {\n type: \"stdout\",\n levels: [\"info\", \"debug\"],\n layout: {\n type: \"pattern\",\n pattern: logger.format\n }\n });\n\n $log.appenders.set(\"stderr\", {\n levels: [\"trace\", \"fatal\", \"error\", \"warn\"],\n type: \"stderr\",\n layout: {\n type: \"pattern\",\n pattern: logger.format\n }\n });\n }\n }\n\n get exclude() {\n return this.get(\"exclude\");\n }\n\n set exclude(exclude: string[]) {\n this.setRaw(\"exclude\", exclude);\n }\n\n get additionalProperties() {\n return this.get(\"converter.additionalProperties\") === \"accept\";\n }\n\n /**\n *\n * @param addressPort\n * @returns {{address: string, port: number}}\n */\n private static buildAddressAndPort(addressPort: string | number): {address: string; port: number} {\n let address = \"0.0.0.0\";\n let port = addressPort;\n\n if (typeof addressPort === \"string\" && addressPort.indexOf(\":\") > -1) {\n [address, port] = addressPort.split(\":\");\n port = +port;\n }\n\n return {address, port: port as number};\n }\n\n /**\n *\n * @returns {string|number}\n */\n getHttpPort(): {address: string; port: number} {\n return PlatformConfiguration.buildAddressAndPort(this.getRaw(\"httpPort\"));\n }\n\n /**\n *\n * @param settings\n */\n setHttpPort(settings: {address: string; port: number}) {\n this.setRaw(\"httpPort\", `${settings.address}:${settings.port}`);\n }\n\n /**\n *\n * @returns {string|number}\n */\n getHttpsPort(): {address: string; port: number} {\n return PlatformConfiguration.buildAddressAndPort(this.getRaw(\"httpsPort\"));\n }\n\n /**\n *\n * @param settings\n */\n setHttpsPort(settings: {address: string; port: number}) {\n this.setRaw(\"httpsPort\", `${settings.address}:${settings.port}`);\n }\n}\n","import type {EndpointMetadata, PlatformContext} from \"../domain\";\n\n/**\n * @ignore\n */\nexport function bindEndpointMiddleware(endpoint: EndpointMetadata) {\n return (ctx: PlatformContext) => {\n ctx.endpoint = endpoint;\n };\n}\n","import {uniq} from \"@tsed/core\";\nimport {Constant} from \"@tsed/di\";\nimport {NotAcceptable} from \"@tsed/exceptions\";\nimport {Middleware, MiddlewareMethods} from \"@tsed/platform-middlewares\";\nimport {Context} from \"@tsed/platform-params\";\n\n/**\n * @middleware\n * @platform\n */\n@Middleware()\nexport class PlatformAcceptMimesMiddleware implements MiddlewareMethods {\n @Constant(\"acceptMimes\", [])\n acceptMimes: string[];\n\n public use(@Context() ctx: Context): void {\n const {endpoint, request} = ctx;\n const mimes = uniq((endpoint?.get(\"acceptMimes\") || []).concat(this.acceptMimes));\n\n if (mimes.length && !request.accepts(mimes)) {\n throw new NotAcceptable(mimes.join(\", \"));\n }\n }\n}\n","/**\n * @ignore\n */\nexport const createFakeRawDriver = () => {\n // istanbul ignore next\n function FakeRawDriver() {}\n\n // istanbul ignore next\n function use() {\n return this;\n }\n\n FakeRawDriver.use = use;\n FakeRawDriver.all = use;\n FakeRawDriver.get = use;\n FakeRawDriver.patch = use;\n FakeRawDriver.post = use;\n FakeRawDriver.put = use;\n FakeRawDriver.head = use;\n FakeRawDriver.delete = use;\n FakeRawDriver.options = use;\n\n return FakeRawDriver;\n};\n","import {AnyPromiseResult, AnyToPromise, AnyToPromiseStatus} from \"@tsed/core\";\nimport {PlatformContext} from \"./PlatformContext\";\n\n/**\n * @ignore\n */\nexport interface HandlerContextOptions {\n $ctx: PlatformContext;\n err?: any;\n}\n\nexport class AnyToPromiseWithCtx extends AnyToPromise {\n public $ctx: PlatformContext;\n public err: unknown;\n\n constructor({$ctx, err}: HandlerContextOptions) {\n super();\n this.$ctx = $ctx;\n this.err = err;\n }\n\n isDone(): boolean {\n const {$ctx} = this;\n\n if (!$ctx?.isDone()) {\n if ($ctx?.request.isAborted() || $ctx?.response.isDone()) {\n this.destroy();\n\n if (this.status === AnyToPromiseStatus.PENDING) {\n this.status = AnyToPromiseStatus.RESOLVED;\n }\n }\n }\n\n return super.isDone();\n }\n\n async call(cb: Function): Promise<AnyPromiseResult<any>> {\n return super.call(() => cb(this));\n }\n\n destroy() {\n // @ts-ignore\n delete this.$ctx;\n }\n\n isCanceledResponse(process: any) {\n return process === this.$ctx.getResponse();\n }\n}\n","/**\n * @ignore\n */\nexport enum HandlerType {\n CUSTOM = \"custom\",\n ENDPOINT = \"endpoint\",\n MIDDLEWARE = \"middleware\",\n ERR_MIDDLEWARE = \"err:middleware\",\n CTX_FN = \"context\",\n RAW_FN = \"raw:middleware\",\n RAW_ERR_FN = \"raw:err:middleware\"\n}\n","import {nameOf, Type} from \"@tsed/core\";\nimport {ProviderScope} from \"@tsed/di\";\nimport {ParamMetadata, ParamTypes} from \"@tsed/platform-params\";\nimport {JsonEntityStore} from \"@tsed/schema\";\nimport {HandlerType} from \"../interfaces/HandlerType\";\nimport {PlatformRouteOptions, PlatformRouteWithoutHandlers} from \"../interfaces/PlatformRouteOptions\";\n\nexport interface HandlerMetadataOptions {\n target: (Type<any> | Function) & {type?: HandlerType};\n routeOptions?: PlatformRouteWithoutHandlers;\n token?: Type<any>;\n propertyKey?: string | symbol;\n scope?: ProviderScope;\n type?: HandlerType;\n}\n\nexport class HandlerMetadata {\n readonly target: any;\n readonly token: Type<any>;\n readonly propertyKey: string | symbol;\n readonly injectable: boolean = false;\n readonly type: HandlerType = HandlerType.RAW_FN;\n readonly hasNextFunction: boolean = false;\n readonly routeOptions: Partial<PlatformRouteOptions>;\n readonly scope: ProviderScope;\n\n handler: any;\n\n constructor(options: HandlerMetadataOptions) {\n const {target, token, propertyKey, type, scope, routeOptions} = options;\n\n this.type = type || target.type || HandlerType.RAW_FN;\n this.scope = scope || ProviderScope.SINGLETON;\n this.routeOptions = routeOptions || {};\n const handler = propertyKey ? target.prototype[propertyKey] : target;\n\n if (propertyKey) {\n this.target = target;\n this.token = token!;\n this.propertyKey = propertyKey;\n this.hasNextFunction = this.hasParamType(ParamTypes.NEXT_FN);\n\n if (this.hasParamType(ParamTypes.ERR)) {\n this.type = HandlerType.ERR_MIDDLEWARE;\n }\n\n this.injectable = ParamMetadata.getParams(target as any, propertyKey).length > 0;\n } else {\n this.handler = handler;\n }\n\n if (!this.injectable) {\n if (handler.length === 4) {\n this.type = HandlerType.RAW_ERR_FN;\n }\n this.hasNextFunction = handler.length >= 3;\n }\n }\n\n get hasErrorParam() {\n return this.type === HandlerType.ERR_MIDDLEWARE || this.type === HandlerType.RAW_ERR_FN;\n }\n\n public getParams() {\n return ParamMetadata.getParams(this.target, this.propertyKey) || [];\n }\n\n public hasParamType(paramType: any): boolean {\n return this.getParams().findIndex((p) => p.paramType === paramType) > -1;\n }\n\n public isFinal() {\n return this.routeOptions?.isFinal || false;\n }\n\n toString() {\n return [this.target && nameOf(this.target), this.propertyKey].filter(Boolean).join(\".\");\n }\n}\n","import {classOf, DecoratorTypes, deepMerge, descriptorOf, isFunction, nameOf, prototypeOf, Store, Type} from \"@tsed/core\";\nimport {ParamMetadata} from \"@tsed/platform-params\";\nimport {getOperationsStores, JsonEntityComponent, JsonEntityStore, JsonEntityStoreOptions, JsonOperation} from \"@tsed/schema\";\n\nexport interface EndpointConstructorOptions extends JsonEntityStoreOptions {\n beforeMiddlewares?: Function[];\n middlewares?: Function[];\n afterMiddlewares?: Function[];\n}\n\nexport interface EndpointViewOptions {\n path: string;\n options: any;\n}\n\nexport interface EndpointRedirectOptions {\n status: number | undefined;\n url: string;\n}\n\n/**\n * EndpointMetadata contains metadata about a controller and his method.\n * Each annotation (@Get, @Body...) attached to a method are stored in a endpoint.\n * EndpointMetadata convert this metadata to an array which contain arguments to call an Express method.\n *\n * Example :\n *\n * @Controller(\"/my-path\")\n * provide MyClass {\n *\n * @Get(\"/\")\n * @Authenticated()\n * public myMethod(){}\n * }\n *\n */\n@JsonEntityComponent(DecoratorTypes.METHOD)\nexport class EndpointMetadata extends JsonEntityStore implements EndpointConstructorOptions {\n public beforeMiddlewares: any[] = [];\n public middlewares: any[] = [];\n public afterMiddlewares: any[] = [];\n\n constructor(options: EndpointConstructorOptions) {\n super({\n store: Store.fromMethod(options.target, options.propertyKey!),\n descriptor: descriptorOf(options.target, options.propertyKey!),\n ...options\n });\n\n const {beforeMiddlewares = [], middlewares = [], afterMiddlewares = []} = options;\n\n this.after(afterMiddlewares);\n this.before(beforeMiddlewares);\n this.use(middlewares);\n }\n\n get targetName(): string {\n return nameOf(this.token);\n }\n\n get params(): ParamMetadata[] {\n return (Array.from(this.children.values()) as unknown) as ParamMetadata[];\n }\n\n /**\n * Return the JsonOperation\n */\n get operation(): JsonOperation {\n return this._operation;\n }\n\n get operationPaths() {\n return this.operation.operationPaths;\n }\n\n get view(): EndpointViewOptions {\n return this.store.get(\"view\") as EndpointViewOptions;\n }\n\n set view(view: EndpointViewOptions) {\n this.store.set(\"view\", view);\n }\n\n get acceptMimes(): string[] {\n return this.store.get<string[]>(\"acceptMimes\", []);\n }\n\n set acceptMimes(mimes: string[]) {\n this.store.set(\"acceptMimes\", mimes);\n }\n\n /**\n * Get all endpoints from a given class and his parents.\n * @param {Type<any>} target\n * @returns {EndpointMetadata[]}\n */\n static getEndpoints(target: Type<any>): EndpointMetadata[] {\n const operations = getOperationsStores<EndpointMetadata>(target);\n\n return Array.from(operations.values()).map((endpoint) => {\n endpoint = endpoint.clone();\n endpoint.token = classOf(target);\n\n return endpoint;\n });\n }\n\n /**\n * Get an endpoint.\n * @param target\n * @param propertyKey\n * @param descriptor\n */\n static get(target: Type<any>, propertyKey: string | symbol, descriptor?: PropertyDescriptor): EndpointMetadata {\n descriptor = descriptor || descriptorOf(prototypeOf(target), propertyKey);\n\n return JsonEntityStore.from<EndpointMetadata>(prototypeOf(target), propertyKey, descriptor);\n }\n\n addOperationPath(method: string, path: string | RegExp, options: any = {}) {\n return this.operation.addOperationPath(method, path, options);\n }\n\n /**\n * Find the a value at the controller level. Let this value be extended or overridden by the endpoint itself.\n *\n * @param key\n * @returns {any}\n */\n get<T = any>(key: any): T {\n const ctrlValue = Store.from(this.target).get(key);\n\n return deepMerge<T>(ctrlValue, this.store.get(key));\n }\n\n /**\n * Append middlewares to the beforeMiddlewares list.\n * @param args\n * @returns {EndpointMetadata}\n */\n public before(args: Function[]): this {\n this.beforeMiddlewares = this.beforeMiddlewares.concat(args).filter(isFunction);\n\n return this;\n }\n\n /**\n * Append middlewares to the afterMiddlewares list.\n * @param args\n * @returns {EndpointMetadata}\n */\n public after(args: Function[]): this {\n this.afterMiddlewares = this.afterMiddlewares.concat(args).filter(isFunction);\n\n return this;\n }\n\n /**\n * Store all arguments collected via Annotation.\n * @param args\n */\n public use(args: Function[]) {\n this.middlewares = this.middlewares.concat(args).filter(isFunction);\n\n return this;\n }\n\n public clone() {\n const endpoint = new EndpointMetadata({\n ...this,\n target: this.target,\n propertyKey: this.propertyKey,\n descriptor: this.descriptor,\n store: this.store,\n children: this.children\n });\n\n endpoint.collectionType = this.collectionType;\n endpoint._type = this._type;\n endpoint._operation = this.operation;\n endpoint._schema = this._schema;\n endpoint.middlewares = [...this.middlewares];\n endpoint.afterMiddlewares = [...this.afterMiddlewares];\n endpoint.beforeMiddlewares = [...this.beforeMiddlewares];\n\n return endpoint;\n }\n}\n","import {InjectorService} from \"@tsed/di\";\nimport {EndpointMetadata} from \"../domain/EndpointMetadata\";\nimport {HandlerMetadata, HandlerMetadataOptions} from \"../domain/HandlerMetadata\";\nimport {HandlerType} from \"../interfaces/HandlerType\";\nimport {PlatformRouteWithoutHandlers} from \"../interfaces/PlatformRouteOptions\";\n\nfunction isMetadata(input: any) {\n return input instanceof HandlerMetadata;\n}\n\n/**\n * @ignore\n */\nexport function createHandlerMetadata(\n injector: InjectorService,\n obj: any | EndpointMetadata,\n routeOptions: PlatformRouteWithoutHandlers = {}\n): HandlerMetadata {\n if (isMetadata(obj)) {\n return obj as HandlerMetadata;\n }\n\n let options: HandlerMetadataOptions;\n\n if (obj instanceof EndpointMetadata) {\n const provider = injector.getProvider(obj.token)!;\n\n options = {\n token: provider.token,\n target: provider.useClass,\n scope: provider.scope,\n type: HandlerType.ENDPOINT,\n propertyKey: obj.propertyKey\n };\n } else {\n const provider = injector.getProvider(obj);\n\n if (provider) {\n options = {\n token: provider.token,\n target: provider.useClass,\n scope: provider.scope,\n type: HandlerType.MIDDLEWARE,\n propertyKey: \"use\"\n };\n } else {\n options = {\n target: obj\n };\n }\n }\n\n options.routeOptions = routeOptions;\n\n return new HandlerMetadata(options);\n}\n","import {JsonHeader} from \"@tsed/schema\";\nimport {PlatformContext} from \"../domain/PlatformContext\";\nimport {HeaderValue} from \"../services/PlatformResponse\";\n\nfunction mergeHeaders(specHeaders: Record<string, JsonHeader & {example: string}>, headers: Record<string, HeaderValue>) {\n return Object.entries(specHeaders).reduce((headers, [key, item]) => {\n key = key.toLowerCase();\n return {\n ...headers,\n [key]: headers[key] === undefined ? String(item.example) : headers[key]\n };\n }, headers);\n}\n\n/**\n * @ignore\n */\nexport function setResponseHeaders(ctx: PlatformContext) {\n const {response, endpoint} = ctx;\n const {operation} = endpoint;\n\n if (response.isDone()) {\n return;\n }\n\n if (!response.hasStatus()) {\n // apply status only if the isn't already modified\n response.status(operation.getStatus());\n }\n\n const statusCode = response.statusCode;\n const headers = operation.getHeadersOf(response.statusCode);\n const mergedHeaders = mergeHeaders(headers, response.getHeaders());\n\n response.setHeaders(mergedHeaders);\n\n if (operation.isRedirection(statusCode)) {\n response.redirect(statusCode, String(mergedHeaders[\"location\"]));\n }\n}\n","import {AnyToPromiseStatus, isFunction, isStream} from \"@tsed/core\";\nimport {Inject, Injectable, InjectorService, Provider, ProviderScope} from \"@tsed/di\";\nimport {$log} from \"@tsed/logger\";\nimport {ArgScope, HandlerWithScope, PlatformParams} from \"@tsed/platform-params\";\nimport {PlatformResponseFilter} from \"@tsed/platform-response-filter\";\nimport {AnyToPromiseWithCtx} from \"../domain/AnyToPromiseWithCtx\";\nimport {EndpointMetadata} from \"../domain/EndpointMetadata\";\nimport {HandlerMetadata} from \"../domain/HandlerMetadata\";\nimport {PlatformContext} from \"../domain/PlatformContext\";\nimport {HandlerType} from \"../interfaces/HandlerType\";\nimport {PlatformRouteWithoutHandlers} from \"../interfaces/PlatformRouteOptions\";\nimport {createHandlerMetadata} from \"../utils/createHandlerMetadata\";\nimport {setResponseHeaders} from \"../utils/setResponseHeaders\";\n\nexport interface OnRequestOptions {\n $ctx: PlatformContext;\n metadata: HandlerMetadata;\n handler: HandlerWithScope;\n next?: any;\n err?: any;\n\n [key: string]: any;\n}\n\n/**\n * Platform Handler abstraction layer. Wrap original class method to a pure platform handler (Express, Koa, etc...).\n * @platform\n */\n@Injectable({\n scope: ProviderScope.SINGLETON\n})\nexport class PlatformHandler {\n @Inject()\n protected responseFilter: PlatformResponseFilter;\n\n constructor(protected injector: InjectorService, protected params: PlatformParams) {}\n\n /**\n * Create a native middleware based on the given metadata and return an instance of AnyToPromiseWithCtx\n * @param input\n * @param options\n */\n createHandler(input: EndpointMetadata | HandlerMetadata | any, options: PlatformRouteWithoutHandlers = {}) {\n return this.createRawHandler(createHandlerMetadata(this.injector, input, options));\n }\n\n /**\n * Create injectable handler from the given provider\n * @param provider\n * @param propertyKey\n */\n createCustomHandler(provider: Provider, propertyKey: string) {\n const handler = this.compileHandler(\n new HandlerMetadata({\n token: provider.provide,\n target: provider.useClass,\n type: HandlerType.CUSTOM,\n scope: provider.scope,\n propertyKey\n })\n );\n\n return async ($ctx: PlatformContext, next?: any) =>\n handler({\n $ctx,\n next\n });\n }\n\n /**\n * Send the response to the consumer.\n * @param data\n * @param ctx\n * @protected\n */\n async flush(data: any, ctx: PlatformContext) {\n const {response} = ctx;\n\n if (!response.isDone()) {\n data = await this.responseFilter.serialize(data, ctx);\n data = await this.responseFilter.transform(data, ctx);\n response.body(data);\n }\n }\n\n compileHandler(metadata: HandlerMetadata) {\n if (metadata.type === HandlerType.CTX_FN) {\n return async (scope: Record<string, any>) => {\n // @ts-ignore\n return this.onCtxRequest({\n ...scope,\n handler: () => metadata.handler(scope.$ctx),\n metadata\n });\n };\n }\n\n const promise = this.params.compileHandler<PlatformContext>({\n token: metadata.token,\n propertyKey: metadata.propertyKey,\n getCustomArgs: metadata.injectable ? undefined : this.getDefaultArgs(metadata)\n });\n\n return async (scope: Record<string, any>) => {\n const handler = await promise;\n // @ts-ignore\n return this.onRequest({\n ...scope,\n handler,\n metadata\n });\n };\n }\n\n protected async onCtxRequest(requestOptions: OnRequestOptions): Promise<any> {\n await requestOptions.handler(requestOptions);\n\n return this.next(requestOptions);\n }\n\n /**\n * Call handler when a request his handle\n * @param requestOptions\n */\n protected async onRequest(requestOptions: OnRequestOptions): Promise<any> {\n const {$ctx, metadata, err, handler} = requestOptions;\n // istanbul ignore next\n if (!$ctx) {\n $log.error({\n name: \"HEADERS_SENT\",\n message: `An endpoint is called but the response is already send to the client. The call comes from the handler: ${metadata.toString()}`\n });\n return;\n }\n\n const resolver = new AnyToPromiseWithCtx({$ctx, err});\n\n return this.injector.runInContext($ctx, async () => {\n try {\n const {state, data, status, headers} = await resolver.call(handler);\n\n if (state === AnyToPromiseStatus.RESOLVED) {\n if (status) {\n $ctx.response.status(status);\n }\n\n if (headers) {\n $ctx.response.setHeaders(headers);\n }\n\n if (data !== undefined) {\n $ctx.data = data;\n }\n\n // Can be canceled by the handler itself\n return await this.onSuccess($ctx.data, requestOptions);\n }\n } catch (er) {\n return this.onError(er, requestOptions);\n }\n });\n }\n\n protected async onError(er: Error, requestOptions: OnRequestOptions) {\n const {next, $ctx, metadata} = requestOptions;\n $ctx.data = er;\n\n if (!next) {\n throw er;\n }\n\n // istanbul ignore next\n if (!$ctx?.response?.isHeadersSent || $ctx.response.isHeadersSent()) {\n $log.warn({\n name: \"HEADERS_SENT\",\n message: `An error was caught after the headers were sent to the client. The error comes from the handler: ${metadata.toString()}`,\n stack: er.stack,\n origin: er,\n request_id: $ctx.id\n });\n\n return;\n }\n\n return next && next(er);\n }\n\n /**\n * Manage success scenario\n * @param data\n * @param requestOptions\n * @protected\n */\n protected async onSuccess(data: any, requestOptions: OnRequestOptions) {\n const {metadata, $ctx, next} = requestOptions;\n\n // TODO see this control is necessary\n // istanbul ignore next\n if ($ctx.request.isAborted() || $ctx.response.isDone()) {\n return;\n }\n\n // set headers each times that an endpoint is called\n if (metadata.type === HandlerType.ENDPOINT) {\n this.setHeaders($ctx);\n }\n\n // call returned middleware\n if (isFunction(data) && !isStream(data)) {\n return this.callReturnedMiddleware(data, $ctx, next);\n }\n\n if (metadata.isFinal()) {\n return this.flush(data, $ctx);\n }\n\n return this.next(requestOptions);\n }\n\n /**\n * Call the returned middleware by the handler.\n * @param middleware\n * @param ctx\n * @param next\n * @protected\n */\n protected callReturnedMiddleware(middleware: any, ctx: PlatformContext, next: any) {\n return middleware(ctx.getRequest(), ctx.getResponse(), next);\n }\n\n /**\n * create Raw handler\n * @param metadata\n */\n protected createRawHandler(metadata: HandlerMetadata) {\n if ([HandlerType.RAW_ERR_FN, HandlerType.RAW_FN].includes(metadata.type)) {\n return metadata.handler;\n }\n\n const handler = this.compileHandler(metadata);\n\n return async (request: any, response: any, next: any) => {\n return handler({\n next,\n $ctx: request.$ctx\n });\n };\n }\n\n /**\n * Set response headers\n * @param ctx\n * @protected\n */\n protected setHeaders(ctx: PlatformContext) {\n return setResponseHeaders(ctx);\n }\n\n protected next(requestOptions: OnRequestOptions) {\n const {$ctx, next} = requestOptions;\n\n return !$ctx.response.isDone() && next && next();\n }\n\n protected getDefaultArgs(metadata: HandlerMetadata) {\n return async (scope: ArgScope<PlatformContext>) =>\n [\n metadata.hasErrorParam && scope.err,\n scope.$ctx.request.request,\n scope.$ctx.response.response,\n metadata.hasNextFunction && scope.next\n ].filter(Boolean);\n }\n}\n","import {Inject, Injectable, InjectorService, PathType, ProviderScope} from \"@tsed/di\";\nimport {promisify} from \"util\";\nimport {PlatformMulter, PlatformMulterSettings, PlatformStaticsOptions} from \"../config\";\nimport {PlatformRouteWithoutHandlers, PlatformRouteOptions} from \"../interfaces\";\nimport {createFakeRawDriver} from \"./FakeRawDriver\";\nimport {PlatformHandler} from \"./PlatformHandler\";\n\n/**\n * @ignore\n */\nexport const PLATFORM_ROUTER_OPTIONS = Symbol.for(\"PlatformRouterOptions\");\n\ndeclare global {\n namespace TsED {\n // @ts-ignore\n export interface Router {}\n }\n}\n\n/**\n * Platform Router abstraction layer.\n * @platform\n */\n@Injectable({\n scope: ProviderScope.INSTANCE\n})\nexport class PlatformRouter<Router = TsED.Router> {\n rawRouter: Router;\n raw: any;\n\n @Inject()\n injector: InjectorService;\n\n constructor(protected platformHandler: PlatformHandler) {\n this.rawRouter = this.raw = PlatformRouter.createRawRouter();\n }\n\n /**\n * Create a new instance of PlatformRouter\n * @param injector\n * @param routerOptions\n */\n static create(injector: InjectorService, routerOptions: any = {}) {\n const locals = new Map();\n locals.set(PLATFORM_ROUTER_OPTIONS, routerOptions);\n\n return injector.invoke<PlatformRouter>(PlatformRouter, locals);\n }\n\n protected static createRawRouter(): any {\n return createFakeRawDriver();\n }\n\n callback(): any {\n return this.raw;\n }\n\n getRouter(): Router {\n return this.rawRouter;\n }\n\n use(...handlers: any[]) {\n // @ts-ignore\n this.getRouter().use(...this.mapHandlers(handlers));\n\n return this;\n }\n\n addRoute(options: PlatformRouteOptions) {\n const {method, path, handlers, isFinal} = options;\n\n // @ts-ignore\n this.getRouter()[method](path, ...this.mapHandlers(handlers, {method, path, isFinal}));\n\n return this;\n }\n\n all(path: PathType, ...handlers: any[]) {\n return this.addRoute({method: \"all\", path, handlers, isFinal: true});\n }\n\n get(path: PathType, ...handlers: any[]) {\n return this.addRoute({method: \"get\", path, handlers, isFinal: true});\n }\n\n post(path: PathType, ...handlers: any[]) {\n return this.addRoute({method: \"post\", path, handlers, isFinal: true});\n }\n\n put(path: PathType, ...handlers: any[]) {\n return this.addRoute({method: \"put\", path, handlers, isFinal: true});\n }\n\n delete(path: PathType, ...handlers: any[]) {\n return this.addRoute({method: \"delete\", path, handlers, isFinal: true});\n }\n\n patch(path: PathType, ...handlers: any[]) {\n return this.addRoute({method: \"patch\", path, handlers, isFinal: true});\n }\n\n head(path: PathType, ...handlers: any[]) {\n return this.addRoute({method: \"head\", path, handlers, isFinal: true});\n }\n\n options(path: PathType, ...handlers: any[]) {\n return this.addRoute({method: \"options\", path, handlers, isFinal: true});\n }\n\n statics(path: string, options: PlatformStaticsOptions): this {\n return this;\n }\n\n multer(options: PlatformMulterSettings): PlatformMulter {\n const m = require(\"multer\")(options);\n\n const makePromise = (multer: any, name: string) => {\n // istanbul ignore next\n if (!multer[name]) return;\n\n const fn = multer[name];\n\n multer[name] = function apply(...args: any[]) {\n const middleware = Reflect.apply(fn, this, args);\n\n return (req: any, res: any) => promisify(middleware)(req, res);\n };\n };\n\n makePromise(m, \"any\");\n makePromise(m, \"array\");\n makePromise(m, \"fields\");\n makePromise(m, \"none\");\n makePromise(m, \"single\");\n\n return m;\n }\n\n protected mapHandlers(handlers: any[], options: PlatformRouteWithoutHandlers = {}): any[] {\n return handlers.reduce((list, handler, index) => {\n if (typeof handler === \"string\") {\n return list.concat(handler);\n }\n\n if (handler instanceof PlatformRouter) {\n return list.concat(handler.callback());\n }\n\n return list.concat(\n this.platformHandler.createHandler(handler, {\n ...options,\n isFinal: options.isFinal ? index === handlers.length - 1 : false\n })\n );\n }, []);\n }\n}\n","import {Injectable, ProviderScope} from \"@tsed/di\";\nimport {createFakeRawDriver} from \"./FakeRawDriver\";\nimport {PlatformHandler} from \"./PlatformHandler\";\nimport {PlatformRouter} from \"./PlatformRouter\";\n\ndeclare global {\n namespace TsED {\n // @ts-ignore\n export interface Application {}\n }\n}\n\n/**\n * `PlatformApplication` is used to provide all routes collected by annotation `@Controller`.\n *\n * @platform\n */\n@Injectable({\n scope: ProviderScope.SINGLETON\n})\nexport class PlatformApplication<App = TsED.Application, Router = TsED.Router> extends PlatformRouter<Router> {\n raw: App;\n rawApp: App;\n rawRouter: Router;\n\n constructor(platformHandler: PlatformHandler) {\n super(platformHandler);\n this.rawApp = this.raw = PlatformApplication.createRawApp() as any;\n }\n\n protected static createRawApp(): any {\n return createFakeRawDriver();\n }\n\n getApp(): App {\n return this.raw;\n }\n}\n","import {Constant, Inject} from \"@tsed/di\";\nimport {Exception} from \"@tsed/exceptions\";\nimport {Middleware, MiddlewareMethods} from \"@tsed/platform-middlewares\";\nimport {Context} from \"@tsed/platform-params\";\nimport {PlatformMulterField, PlatformMulterSettings} from \"../config\";\nimport {PlatformApplication} from \"../services/PlatformApplication\";\n\nexport interface MulterInputOptions {\n fields: PlatformMulterField[];\n}\n\n/**\n * @middleware\n */\n@Middleware()\nexport class PlatformMulterMiddleware implements MiddlewareMethods {\n @Constant(\"multer\", {})\n settings: PlatformMulterSettings;\n\n @Inject()\n app: PlatformApplication;\n\n async use(@Context() ctx: Context) {\n try {\n const {fields, options = {}} = ctx.endpoint.get(PlatformMulterMiddleware);\n const settings: PlatformMulterSettings = {\n ...this.settings,\n ...options\n };\n\n /* istanbul ignore next */\n if (settings.storage) {\n delete settings.dest;\n }\n\n const middleware = this.app.multer(settings).fields(this.getFields({fields}));\n\n return await middleware(ctx.getRequest(), ctx.getResponse());\n } catch (er) {\n throw er.code ? new Exception(er.code, `${er.message} ${er.field || \"\"}`.trim()) : er;\n }\n }\n\n protected getFields(conf: MulterInputOptions) {\n return conf.fields.map(({name, maxCount}) => ({name, maxCount}));\n }\n}\n","import {PlatformContext} from \"../domain/PlatformContext\";\nimport {HandlerType} from \"../interfaces/HandlerType\";\n\nexport type PlatformCtxHandler = ($ctx: PlatformContext) => any | Promise<any>;\n\n/**\n * Create Ts.ED context handler\n * @param fn\n * @ignore\n */\nexport function useCtxHandler(fn: PlatformCtxHandler & {type?: HandlerType}) {\n fn.type = HandlerType.CTX_FN;\n\n return fn;\n}\n","import {Type} from \"@tsed/core\";\nimport {InjectorService} from \"@tsed/di\";\nimport {ParamMetadata, ParamTypes} from \"@tsed/platform-params\";\nimport {JsonMethodPath, OperationMethods} from \"@tsed/schema\";\nimport {EndpointMetadata} from \"../domain/EndpointMetadata\";\nimport {ControllerProvider} from \"../domain/ControllerProvider\";\nimport {PlatformRouterMethods} from \"../interfaces/PlatformRouterMethods\";\nimport {bindEndpointMiddleware} from \"../middlewares/bindEndpointMiddleware\";\nimport {PlatformAcceptMimesMiddleware} from \"../middlewares/PlatformAcceptMimesMiddleware\";\nimport {PlatformMulterMiddleware} from \"../middlewares/PlatformMulterMiddleware\";\nimport {PlatformRouter} from \"../services/PlatformRouter\";\nimport {useCtxHandler} from \"../utils/useCtxHandler\";\n\n/**\n * @ignore\n */\nfunction formatMethod(method: string | undefined) {\n return (method === OperationMethods.CUSTOM ? \"use\" : method || \"use\").toLowerCase();\n}\n\n/**\n * @ignore\n */\nexport class PlatformControllerBuilder {\n constructor(private provider: ControllerProvider) {}\n\n /**\n *\n * @returns {any}\n */\n public build(injector: InjectorService): PlatformRouterMethods {\n const {\n middlewares: {useBefore}\n } = this.provider;\n\n // Controller lifecycle\n this.buildMiddlewares(useBefore) // Controller before-middleware\n .buildEndpoints() // All endpoints and his middlewares\n .buildChildrenCtrls(injector); // Children controllers\n\n return this.provider.getRouter();\n }\n\n private buildEndpoints() {\n const {endpoints} = this.provider;\n const operationPaths: Map<string, JsonMethodPath> = new Map();\n const getKey = (method: string, path: any) => `${method}-${path}`;\n\n const updateFinalRouteState = (key: string) => {\n if (operationPaths.has(key)) {\n operationPaths.get(key)!.isFinal = false;\n }\n };\n\n const setFinalRoute = (key: string, operationPath: JsonMethodPath) => {\n operationPaths.set(key, operationPath);\n operationPath.isFinal = true;\n };\n\n endpoints.forEach(({operation}) => {\n operation?.operationPaths.forEach((operationPath) => {\n if (operationPath.method !== OperationMethods.CUSTOM) {\n const key = getKey(operationPath.method, operationPath.path);\n updateFinalRouteState(key);\n updateFinalRouteState(getKey(OperationMethods.ALL, operationPath.path));\n\n setFinalRoute(key, operationPath);\n }\n });\n });\n\n endpoints.forEach((endpoint) => {\n this.buildEndpoint(endpoint);\n });\n\n return this;\n }\n\n private buildEndpoint(endpoint: EndpointMetadata) {\n const {beforeMiddlewares, middlewares: mldwrs, afterMiddlewares, operation} = endpoint;\n const {\n middlewares: {use, useAfter}\n } = this.provider;\n\n const router = this.provider.getRouter<PlatformRouter>();\n // Endpoint lifecycle\n let handlers: any[] = [];\n\n const hasFiles = [...endpoint.children.values()].find((item: ParamMetadata) => item.paramType === ParamTypes.FILES);\n\n handlers = handlers\n .concat(useCtxHandler(bindEndpointMiddleware(endpoint)))\n .concat(PlatformAcceptMimesMiddleware)\n .concat(hasFiles && PlatformMulterMiddleware)\n .concat(use) // Controller use-middlewares\n .concat(beforeMiddlewares) // Endpoint before-middlewares\n // .concat(endpoint.cache && PlatformCacheMiddleware)\n .concat(mldwrs) // Endpoint middlewares\n .concat(endpoint) // Endpoint metadata\n .concat(afterMiddlewares) // Endpoint after-middlewares\n .concat(useAfter) // Controller after middlewares (equivalent to afterEach)\n .filter((item: any) => !!item);\n\n // Add handlers to the router\n operation?.operationPaths.forEach(({path, method, isFinal}) => {\n router.addRoute({\n method: formatMethod(method),\n path,\n handlers,\n isFinal\n });\n });\n\n if (!operation?.operationPaths.size) {\n router.use(...handlers);\n }\n }\n\n private buildChildrenCtrls(injector: InjectorService) {\n const {children} = this.provider;\n const router = this.provider.getRouter<PlatformRouter>();\n\n children.forEach((child: Type<any>) => {\n const provider = injector.getProvider(child) as ControllerProvider;\n\n /* istanbul ignore next */\n if (!provider) {\n throw new Error(\"Controller component not found in the ControllerRegistry\");\n }\n\n new PlatformControllerBuilder(provider).build(injector);\n\n router.use(provider.path, provider.getRouter<PlatformRouter>());\n });\n }\n\n private buildMiddlewares(middlewares: any[]) {\n const router = this.provider.getRouter<PlatformRouter>();\n\n middlewares\n .filter((o) => typeof o === \"function\")\n .forEach((middleware: any) => {\n router.use(middleware);\n });\n\n return this;\n }\n}\n","import {Injectable, ProviderScope, Scope} from \"@tsed/di\";\nimport {IncomingHttpHeaders, IncomingMessage} from \"http\";\nimport type {PlatformContext} from \"../domain/PlatformContext\";\nimport {IncomingEvent} from \"../interfaces/IncomingEvent\";\nimport type {PlatformResponse} from \"./PlatformResponse\";\n\ndeclare global {\n namespace TsED {\n // @ts-ignore\n export interface Request {\n id: string;\n $ctx: PlatformContext;\n }\n }\n}\n\n/**\n * Platform Request abstraction layer.\n * @platform\n */\n@Injectable()\n@Scope(ProviderScope.INSTANCE)\nexport class PlatformRequest<T extends {[key: string]: any} = any> {\n public raw: T;\n\n /**\n * The current @@PlatformResponse@@.\n */\n public response: PlatformResponse;\n\n constructor({request}: IncomingEvent) {\n this.raw = request as any;\n }\n\n get secure(): boolean {\n return this.raw.secure;\n }\n\n get host(): string {\n return this.get(\"host\");\n }\n\n get protocol(): string {\n return this.raw.protocol;\n }\n\n /**\n * Get the url of the request.\n *\n * Is equivalent of `express.response.originalUrl || express.response.url`.\n */\n get url(): string {\n return this.raw.originalUrl || this.raw.url;\n }\n\n get headers(): IncomingHttpHeaders {\n return this.raw.headers;\n }\n\n get method(): string {\n return this.raw.method;\n }\n\n /**\n * Contains key-value pairs of data submitted in the request body. By default, it is `undefined`, and is populated when you use\n * `body-parsing` middleware such as `express.json()` or `express.urlencoded()`.\n */\n get body(): any {\n return this.raw.body;\n }\n\n get rawBody(): any {\n return this.raw.rawBody;\n }\n\n /**\n * When using `cookie-parser` middleware, this property is an object that contains cookies sent by the request.\n * If the request contains no cookies, it defaults to `{}`.\n */\n get cookies(): {[key: string]: any} {\n return this.raw.cookies;\n }\n\n /**\n * This property is an object containing properties mapped to the named route `parameters`.\n * For example, if you have the route `/user/:name`, then the `name` property is available as `req.params.name`.\n * This object defaults to `{}`.\n */\n get params(): {[key: string]: any} {\n return this.raw.params;\n }\n\n /**\n * This property is an object containing a property for each query string parameter in the route.\n * When query parser is set to disabled, it is an empty object `{}`, otherwise it is the result of the configured query parser.\n */\n get query(): {[key: string]: any} {\n return this.raw.query;\n }\n\n /**\n * This property is an object containing a property for each session attributes set by any code.\n * It require to install a middleware like express-session to work.\n */\n get session(): {[key: string]: any} {\n return this.raw.session as any;\n }\n\n get files() {\n return this.raw.files;\n }\n\n /**\n * Return the original request framework instance\n */\n get request() {\n return this.getRequest();\n }\n\n /**\n * Return the original request node.js instance\n */\n get req() {\n return this.getReq();\n }\n\n /**\n * Returns the HTTP request header specified by field. The match is case-insensitive.\n *\n * ```typescript\n * request.get('Content-Type') // => \"text/plain\"\n * ```\n *\n * @param name\n */\n get(name: string) {\n return this.raw.get(name);\n }\n\n /**\n * Checks if the specified content types are acceptable, based on the request’s Accept HTTP header field. The method returns the best match, or if none of the specified content types is acceptable, returns false (in which case, the application should respond with 406 \"Not Acceptable\").\n *\n * The type value may be a single MIME type string (such as “application/json”), an extension name such as “json”, a comma-delimited list, or an array. For a list or array, the method returns the best match (if any).\n *\n * @param mime\n */\n accepts(mime: string): string | false;\n\n accepts(mime: string[]): string[] | false;\n\n accepts(mime?: string | string[]): string | string[] | false {\n // @ts-ignore\n return this.raw.accepts(mime);\n }\n\n isAborted() {\n return this.raw.aborted;\n }\n\n destroy() {\n // @ts-ignore\n delete this.raw;\n // @ts-ignore\n delete this.response;\n }\n\n /**\n * Return the Framework response object (express, koa, etc...)\n */\n getRequest<Req = T>(): Req {\n return this.raw as any;\n }\n\n /**\n * Return the Node.js response object\n */\n getReq(): IncomingMessage {\n return this.raw as any;\n }\n}\n","import {isBoolean, isNumber, isStream, isString} from \"@tsed/core\";\nimport {Injectable, ProviderScope, Scope} from \"@tsed/di\";\nimport {PlatformViews} from \"@tsed/platform-views\";\nimport {ServerResponse} from \"http\";\nimport {IncomingEvent} from \"../interfaces/IncomingEvent\";\nimport type {PlatformRequest} from \"./PlatformRequest\";\n\nconst onFinished = require(\"on-finished\");\n\ndeclare global {\n namespace TsED {\n // @ts-ignore\n export interface Response {\n // req: any;\n }\n }\n}\n\nexport type HeaderValue = Array<boolean | number | string> | boolean | number | string;\n\n/**\n * Platform Response abstraction layer.\n * @platform\n */\n@Injectable()\n@Scope(ProviderScope.INSTANCE)\nexport class PlatformResponse<T extends Record<string, any> = any> {\n platformViews: PlatformViews;\n\n /**\n * The current @@PlatformRequest@@.\n */\n public request: PlatformRequest;\n\n data: any;\n\n raw: T;\n\n constructor({response}: IncomingEvent) {\n this.raw = response as any;\n }\n\n /**\n * Get the current statusCode\n */\n get statusCode() {\n return this.raw.statusCode;\n }\n\n /**\n * An object that contains response local variables scoped to the request, and therefore available only to the view(s) rendered during that request / response cycle (if any). Otherwise, this property is identical to app.locals.\n *\n * This property is useful for exposing request-level information such as the request path name, authenticated user, user settings, and so on.\n */\n get locals() {\n return this.raw.locals;\n }\n\n /**\n * Return the original response framework instance\n */\n get response() {\n return this.getResponse();\n }\n\n /**\n * Return the original response node.js instance\n */\n get res() {\n return this.getRes();\n }\n\n static onFinished(res: any, cb: Function) {\n onFinished(res, cb);\n }\n\n /**\n * Returns the HTTP response header specified by field. The match is case-insensitive.\n *\n * ```typescript\n * response.get('Content-Type') // => \"text/plain\"\n * ```\n *\n * @param name\n */\n get(name: string) {\n return this.raw.get(name);\n }\n\n getHeaders(): Record<string, HeaderValue> {\n return this.raw.getHeaders();\n }\n\n /**\n * Return the Framework response object (express, koa, etc...)\n */\n getResponse<Res = T>(): Res {\n return this.raw as any;\n }\n\n /**\n * Return the Node.js response object\n */\n getRes(): ServerResponse {\n return this.raw as any;\n }\n\n hasStatus() {\n return this.statusCode !== 200;\n }\n\n /**\n * Sets the HTTP status for the response.\n *\n * @param status\n */\n status(status: number) {\n this.raw.status(status);\n\n return this;\n }\n\n /**\n * Set header `field` to `val`, or pass\n * an object of header fields.\n *\n * Examples:\n * ```typescript\n * response.setHeaders({ Accept: 'text/plain', 'X-API-Key': 'tobi' });\n * ```\n *\n * Aliased as `res.header()`.\n */\n setHeaders(headers: Record<string, HeaderValue>) {\n // apply headers\n Object.entries(headers).forEach(([key, item]) => {\n this.setHeader(key, item);\n });\n\n return this;\n }\n\n setHeader(key: string, item: any) {\n if (key.toLowerCase() === \"location\") {\n return this.location(String(item));\n }\n\n this.raw.set(key, item);\n\n return this;\n }\n\n /**\n * Set `Content-Type` response header with `type` through `mime.lookup()`\n * when it does not contain \"/\", or set the Content-Type to `type` otherwise.\n *\n * Examples:\n *\n * res.type('.html');\n * res.type('html');\n * res.type('json');\n * res.type('application/json');\n * res.type('png');\n */\n contentType(contentType: string) {\n this.raw.contentType(contentType);\n\n return this;\n }\n\n contentLength(length: number) {\n this.setHeader(\"Content-Length\", length);\n return this;\n }\n\n getContentLength() {\n if (this.get(\"Content-Length\")) {\n return parseInt(this.get(\"Content-Length\"), 10) || 0;\n }\n }\n\n getContentType() {\n return (this.get(\"Content-Type\") || \"\").split(\";\")[0];\n }\n\n /**\n * Sets the HTTP response Content-Disposition header field to “attachment”.\n * If a filename is given, then it sets the Content-Type based on the extension name via res.type(), and sets the Content-Disposition “filename=” parameter.\n *\n * ```typescript\n * res.attachment()\n * // Content-Disposition: attachment\n *\n * res.attachment('path/to/logo.png')\n * // Content-Disposition: attachment; filename=\"logo.png\"\n * // Content-Type: image/png\n * ```\n *\n * @param filename\n */\n attachment(filename: string) {\n this.raw.attachment(filename);\n return this;\n }\n\n /**\n * Redirects to the URL derived from the specified path, with specified status, a positive integer that corresponds to an [HTTP status code](http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html).\n * If not specified, status defaults to `302 Found`.\n *\n * @param status\n * @param url\n */\n redirect(status: number, url: string) {\n this.raw.redirect(status, url);\n\n return this;\n }\n\n /**\n * Sets the response Location HTTP header to the specified path parameter.\n *\n * @param location\n */\n location(location: string) {\n this.raw.location(location);\n\n return this;\n }\n\n /**\n * Stream the given data.\n *\n * @param data\n */\n stream(data: ReadableStream | any) {\n data.pipe(this.raw);\n\n return this;\n }\n\n /**\n * Renders a view and sends the rendered HTML string to the client.\n *\n * @param path\n * @param options\n */\n async render(path: string, options: any = {}) {\n return this.platformViews.render(path, {\n ...this.locals,\n ...options\n });\n }\n\n /**\n * Send any data to your consumer.\n *\n * This method accept a ReadableStream, a plain object, boolean, string, number, null and undefined data.\n * It choose the better way to send the data.\n *\n * @param data\n */\n body(data: any) {\n this.data = data;\n\n if (data === undefined) {\n this.raw.send();\n\n return this;\n }\n\n if (isStream(data)) {\n this.stream(data);\n\n return this;\n }\n\n if (Buffer.isBuffer(data)) {\n if (!this.getContentType()) {\n this.contentType(\"application/octet-stream\");\n }\n\n this.contentLength(data.length);\n this.raw.send(data);\n\n return this;\n }\n\n if (isBoolean(data) || isNumber(data) || isString(data) || data === null) {\n this.raw.send(data);\n\n return this;\n }\n\n this.raw.json(data);\n\n return this;\n }\n\n getBody() {\n return this.data;\n }\n\n /**\n * Add a listener to handler the end of the request/response.\n * @param cb\n */\n onEnd(cb: Function): this {\n PlatformResponse.onFinished(this.getRes(), cb);\n\n return this;\n }\n\n isDone(): boolean {\n if (!this.raw) {\n return true;\n }\n\n const res = this.getRes();\n\n return Boolean(this.isHeadersSent() || res.writableEnded || res.writableFinished);\n }\n\n destroy() {\n // @ts-ignore\n delete this.raw;\n delete this.data;\n // @ts-ignore\n delete this.request;\n }\n\n isHeadersSent() {\n return this.getRes().headersSent;\n }\n}\n","import {ContextMethods, DIContext, DIContextOptions} from \"@tsed/di\";\nimport {IncomingMessage, ServerResponse} from \"http\";\nimport {EndpointMetadata} from \"./EndpointMetadata\";\nimport {PlatformApplication} from \"../services/PlatformApplication\";\nimport {PlatformRequest} from \"../services/PlatformRequest\";\nimport {PlatformResponse} from \"../services/PlatformResponse\";\n\ndeclare global {\n namespace TsED {\n export interface Context extends PlatformContext {}\n }\n}\n\nexport interface PlatformContextOptions extends DIContextOptions {\n event: {\n response?: ServerResponse;\n request?: IncomingMessage;\n };\n ignoreUrlPatterns?: any[];\n endpoint?: EndpointMetadata;\n}\n\nexport class PlatformContext extends DIContext implements ContextMethods {\n /**\n * The current @@EndpointMetadata@@ resolved by Ts.ED during the request.\n */\n public endpoint: EndpointMetadata;\n /**\n * The data return by the previous endpoint if you use multiple handler on the same route. By default data is empty.\n */\n public data: any;\n /**\n * The current @@PlatformResponse@@.\n */\n public response: PlatformResponse;\n /**\n * The current @@PlatformRequest@@.\n */\n public request: PlatformRequest;\n\n private ignoreUrlPatterns: RegExp[] = [];\n\n constructor({\n event,\n endpoint,\n ignoreUrlPatterns = [],\n ResponseKlass = PlatformResponse,\n RequestKlass = PlatformRequest,\n ...options\n }: PlatformContextOptions) {\n super({\n ...options,\n ignoreLog: () => {\n return this.ignoreUrlPatterns.find((reg) => !!this.url.match(reg));\n }\n });\n\n endpoint && (this.endpoint = endpoint);\n\n this.ignoreUrlPatterns = ignoreUrlPatterns.map((pattern: string | RegExp) =>\n typeof pattern === \"string\" ? new RegExp(pattern, \"gi\") : pattern\n );\n\n this.response = new ResponseKlass(event);\n this.request = new RequestKlass(event);\n\n this.response.request = this.request;\n this.request.response = this.response;\n\n this.request.request.$ctx = this;\n this.request.request.id = this.id;\n this.logger.url = this.url;\n\n this.container.set(PlatformResponse, this.response);\n this.container.set(PlatformRequest, this.request);\n this.container.set(PlatformContext, this);\n\n this.response.setHeader(\"x-request-id\", this.id);\n }\n\n get url() {\n return this.request.url;\n }\n\n get app() {\n return this.injector.get<PlatformApplication>(PlatformApplication)!;\n }\n\n async destroy() {\n await super.destroy();\n\n delete this.request?.request?.$ctx;\n\n this.response.destroy();\n this.request.destroy();\n\n // @ts-ignore\n delete this.endpoint;\n // @ts-ignore\n delete this.response;\n // @ts-ignore\n delete this.request;\n }\n\n isDone() {\n return !this.request || !this.response;\n }\n\n /**\n * Return the framework request instance (Express, Koa, etc...)\n */\n getRequest<Req = any>(): Req {\n return this.request.getRequest<Req>();\n }\n\n /**\n * Return the framework response instance (Express, Koa, etc...)\n */\n getResponse<Res = any>(): Res {\n return this.response.getResponse<Res>();\n }\n\n /**\n * Get Node.js request\n */\n getReq(): IncomingMessage {\n return this.request.getReq();\n }\n\n /**\n * Get Node.js response\n */\n getRes(): ServerResponse {\n return this.response.getRes();\n }\n\n /**\n * Return the original application instance.\n */\n getApp<T = any>(): T {\n return this.app.getApp() as any;\n }\n}\n","import {ParamTypes} from \"@tsed/platform-params\";\nimport {EndpointMetadata} from \"./EndpointMetadata\";\nimport {ControllerProvider} from \"./ControllerProvider\";\n\nexport interface PlatformRouterDetailsOptions {\n provider: ControllerProvider;\n endpoint: EndpointMetadata;\n method: string;\n url: string;\n}\n\nexport class PlatformRouteDetails {\n readonly method: string;\n readonly url: string;\n readonly rawBody: boolean;\n readonly endpoint: EndpointMetadata;\n readonly provider: ControllerProvider;\n\n constructor({provider, endpoint, method, url}: PlatformRouterDetailsOptions) {\n this.provider = provider;\n this.endpoint = endpoint;\n this.method = method;\n this.url = url;\n this.rawBody = !!endpoint.params.find((param) => param.paramType === ParamTypes.RAW_BODY);\n }\n\n get name() {\n return `${this.endpoint.targetName}.${this.methodClassName}()`;\n }\n\n get className() {\n return this.endpoint.targetName;\n }\n\n get methodClassName() {\n return String(this.endpoint.propertyKey);\n }\n\n get parameters() {\n return this.endpoint.params;\n }\n\n toJSON() {\n return {\n method: this.method,\n name: this.name,\n url: this.url,\n className: this.className,\n methodClassName: this.methodClassName,\n parameters: this.parameters,\n rawBody: this.rawBody\n };\n }\n}\n","export const ROUTER_OPTIONS = Symbol.for(\"ROUTER_OPTIONS\");\n","import {ControllerMiddlewares, Provider, ProviderType, TokenProvider} from \"@tsed/di\";\nimport {JsonEntityStore} from \"@tsed/schema\";\nimport {ROUTER_OPTIONS} from \"../constants/routerOptions\";\nimport {PlatformRouterMethods} from \"../interfaces/PlatformRouterMethods\";\nimport {EndpointMetadata} from \"./EndpointMetadata\";\n\nexport class ControllerProvider<T = any> extends Provider<T> {\n readonly entity: JsonEntityStore;\n private router: PlatformRouterMethods;\n\n constructor(provide: TokenProvider, options: Partial<Provider> = {}) {\n super(provide, options);\n this.type = ProviderType.CONTROLLER;\n this.entity = JsonEntityStore.from(provide);\n }\n\n get path() {\n return this.entity.path;\n }\n\n set path(path: string) {\n this.entity.path = path;\n }\n\n /**\n *\n * @returns {EndpointMetadata[]}\n */\n get endpoints(): EndpointMetadata[] {\n return EndpointMetadata.getEndpoints(this.provide);\n }\n\n get children(): TokenProvider[] {\n return this.store.get(\"childrenControllers\", []);\n }\n\n /**\n *\n * @returns {ControllerProvider}\n */\n get parent(): TokenProvider | undefined {\n return this.store.get(\"parentController\");\n }\n\n /**\n *\n */\n get routerOptions(): any {\n return this.store.get(ROUTER_OPTIONS) || ({} as any);\n }\n\n /**\n *\n * @param value\n */\n set routerOptions(value: any) {\n this.store.set(ROUTER_OPTIONS, value);\n }\n\n /**\n *\n * @returns {any[]}\n */\n get middlewares(): ControllerMiddlewares {\n return Object.assign(\n {\n use: [],\n useAfter: [],\n useBefore: []\n },\n this.store.get(\"middlewares\", {})\n );\n }\n\n /**\n *\n * @param middlewares\n */\n set middlewares(middlewares: ControllerMiddlewares) {\n const mdlwrs = this.middlewares;\n const concat = (key: string, a: any, b: any) => (a[key] = a[key].concat(b[key]));\n\n Object.keys(middlewares).forEach((key: string) => {\n concat(key, mdlwrs, middlewares);\n });\n this.store.set(\"middlewares\", mdlwrs);\n }\n\n /**\n *\n * @returns {boolean}\n */\n public hasChildren(): boolean {\n return !!this.children.length;\n }\n\n /**\n *\n * @returns {boolean}\n */\n public hasParent(): boolean {\n return !!this.store.get(\"parentController\");\n }\n\n public getRouter<T extends PlatformRouterMethods = any>(): T {\n return this.router as any;\n }\n\n public setRouter(router: PlatformRouterMethods) {\n this.router = router;\n\n return this;\n }\n}\n","import {ControllerProvider} from \"../domain/ControllerProvider\";\n\nexport function getControllerPath(basePath: string, provider: ControllerProvider): string {\n return (basePath === provider.path ? provider.path : (basePath || \"\") + provider.path).replace(/\\/\\//gi, \"/\");\n}\n","import {Injectable, InjectorService, ProviderScope, ProviderType, TokenProvider} from \"@tsed/di\";\nimport {ControllerProvider, EndpointMetadata, PlatformRouteDetails} from \"../domain\";\nimport {Route, RouteController} from \"../interfaces/Route\";\nimport {getControllerPath} from \"../utils/getControllerPath\";\nimport {PlatformApplication} from \"./PlatformApplication\";\n\n/**\n * `Platform` is used to provide all routes collected by annotation `@Controller`.\n *\n * @platform\n */\n@Injectable({\n scope: ProviderScope.SINGLETON\n})\nexport class Platform {\n #routes: PlatformRouteDetails[] = [];\n #controllers: RouteController[] = [];\n\n constructor(readonly injector: InjectorService, readonly platformApplication: PlatformApplication) {}\n\n get app() {\n return this.platformApplication;\n }\n\n get routes(): PlatformRouteDetails[] {\n return this.#routes;\n }\n\n public addRoutes(routes: Route[]) {\n routes.forEach((routeSettings) => {\n this.addRoute(routeSettings.route, routeSettings.token);\n });\n }\n\n public addRoute(endpoint: string, token: TokenProvider) {\n const {injector} = this;\n\n if (injector.hasProvider(token)) {\n const provider: ControllerProvider = injector.getProvider(token)! as any;\n\n if (provider.type === ProviderType.CONTROLLER) {\n const route = getControllerPath(endpoint, provider);\n if (!provider.hasParent()) {\n const routes = this.buildRoutes(route, provider);\n\n this.#routes.push(...routes);\n this.#controllers.push({\n route,\n provider\n });\n\n this.app.use(route, ...[].concat(provider.getRouter().callback()));\n }\n }\n }\n\n return this;\n }\n\n /**\n * Get all routes built by TsExpressDecorators and mounted on Express application.\n * @returns {PlatformRouteDetails[]}\n */\n public getRoutes(): PlatformRouteDetails[] {\n return this.#routes;\n }\n\n public getMountedControllers(): RouteController[] {\n return this.#controllers;\n }\n\n /**\n *\n * @param ctrl\n * @param endpointUrl\n */\n private buildRoutes(endpointUrl: string, ctrl: ControllerProvider): PlatformRouteDetails[] {\n const {injector} = this;\n\n let routes: PlatformRouteDetails[] = [];\n\n routes = ctrl.children\n .map((ctrl) => injector.getProvider(ctrl))\n .reduce((routes: PlatformRouteDetails[], provider: ControllerProvider) => {\n return routes.concat(this.buildRoutes(`${endpointUrl}${provider.path}`, provider));\n }, routes);\n\n ctrl.endpoints.forEach((endpoint: EndpointMetadata) => {\n endpoint.operationPaths.forEach(({path, method}) => {\n if (method) {\n routes.push(\n new PlatformRouteDetails({\n provider: ctrl,\n endpoint,\n method,\n url: `${endpointUrl}${path || \"\"}`.replace(/\\/\\//gi, \"/\")\n })\n );\n }\n });\n });\n\n return routes;\n }\n}\n","import {InjectorService, Module, ProviderType} from \"@tsed/di\";\nimport {PlatformControllerBuilder} from \"./builder/PlatformControllerBuilder\";\nimport {ControllerProvider} from \"./domain/ControllerProvider\";\nimport {Route} from \"./interfaces/Route\";\nimport {Platform} from \"./services/Platform\";\nimport {PlatformRouter} from \"./services/PlatformRouter\";\n\n/**\n * @ignore\n */\n@Module({\n imports: [InjectorService, Platform]\n})\nexport class PlatformModule {\n constructor(protected injector: InjectorService, protected platform: Platform) {\n this.createRoutersFromControllers();\n }\n\n /**\n * Create routers from the collected controllers\n */\n public createRoutersFromControllers() {\n const {injector} = this;\n\n return injector\n .getProviders(ProviderType.CONTROLLER)\n .map((provider: ControllerProvider) => {\n provider.setRouter(PlatformRouter.create(injector, provider.routerOptions));\n\n if (!provider.hasParent()) {\n return new PlatformControllerBuilder(provider as ControllerProvider).build(injector);\n }\n })\n .filter(Boolean);\n }\n\n public $$loadRoutes() {\n const routes = this.injector.settings.get<Route[]>(\"routes\");\n\n this.platform.addRoutes(routes);\n }\n}\n","import {GlobalProviders, InjectorService, setLoggerLevel} from \"@tsed/di\";\nimport {$log} from \"@tsed/logger\";\nimport {PlatformConfiguration} from \"../config/services/PlatformConfiguration\";\n\n$log.name = \"TSED\";\n\nexport function createInjector(settings: Partial<TsED.Configuration> = {}) {\n const injector = new InjectorService();\n injector.settings = createSettingsService(injector);\n injector.logger = $log;\n injector.settings.set(settings);\n\n setLoggerLevel(injector);\n\n return injector;\n}\n\nfunction createSettingsService(injector: InjectorService): PlatformConfiguration & TsED.Configuration {\n const provider = GlobalProviders.get(PlatformConfiguration)!.clone();\n\n provider.instance = injector.invoke<PlatformConfiguration>(provider.useClass);\n injector.addProvider(PlatformConfiguration, provider);\n\n return provider.instance as any;\n}\n","import {InjectorService} from \"@tsed/di\";\nimport {PlatformApplication} from \"../services/PlatformApplication\";\n\nexport function createPlatformApplication(injector: InjectorService): void {\n injector.forkProvider(PlatformApplication);\n}\n","import {Type} from \"@tsed/core\";\nimport {Inject} from \"@tsed/di\";\nimport Http from \"http\";\n\n/**\n * Inject the Http.Server instance.\n *\n * ### Example\n *\n * ```typescript\n * import {HttpServer, Service} from \"@tsed/common\";\n *\n * @Service()\n * export default class OtherService {\n * constructor(@HttpServer httpServer: HttpServer) {}\n * }\n * ```\n *\n * > Note: TypeScript transform and store `HttpServer` as `Function` type in the metadata. So to inject a factory, you must use the `@Inject(type)` decorator.\n *\n * @param {Type<any>} target\n * @param {string} targetKey\n * @param {TypedPropertyDescriptor<Function> | number} descriptor\n * @returns {any}\n * @decorator\n */\nexport function HttpServer(target: Type<any>, targetKey: string, descriptor: TypedPropertyDescriptor<Function> | number) {\n return Inject(HttpServer)(target, targetKey, descriptor);\n}\n\nexport type HttpServer = Http.Server;\n","import Http from \"http\";\nimport Https from \"https\";\n\nexport function listenServer(\n http: Http.Server | Https.Server,\n settings: {address: string | number; port: number}\n): Promise<{address: string; port: number}> {\n const {address, port} = settings;\n\n const promise = new Promise((resolve, reject) => {\n http.on(\"listening\", resolve);\n http.on(\"error\", reject);\n }).then(() => {\n const port = (http.address() as any).port;\n\n return {address: settings.address as string, port};\n });\n\n http.listen(port, address as any);\n\n return promise;\n}\n","import {InjectorService, ProviderScope, registerProvider} from \"@tsed/di\";\nimport Http from \"http\";\nimport {PlatformApplication} from \"../services/PlatformApplication\";\nimport {HttpServer} from \"../decorators/httpServer\";\nimport {listenServer} from \"./listenServer\";\n\nexport function createHttpServer(injector: InjectorService): void {\n injector.forkProvider(HttpServer);\n}\n\nregisterProvider({\n provide: HttpServer,\n deps: [PlatformApplication],\n scope: ProviderScope.SINGLETON,\n global: true,\n useFactory(platformApplication: PlatformApplication) {\n return Http.createServer(platformApplication.callback());\n }\n});\n\nexport async function listenHttpServer(injector: InjectorService) {\n const {settings} = injector;\n const server = injector.get<HttpServer>(HttpServer);\n\n if (settings.httpPort !== false && server) {\n const {address, port} = settings.getHttpPort();\n injector.logger.debug(`Start server on http://${address}:${port}`);\n\n const options = await listenServer(server, {address, port});\n settings.setHttpPort(options);\n\n injector.logger.info(`Listen server on http://${options.address}:${options.port}`);\n }\n}\n","import {Type} from \"@tsed/core\";\nimport {Inject} from \"@tsed/di\";\nimport Https from \"https\";\n\n/**\n * Inject the Https.Server instance.\n *\n * ### Example\n *\n * ```typescript\n * import {HttpsServer, Service} from \"@tsed/common\";\n *\n * @Service()\n * export default class OtherService {\n * constructor(@HttpsServer httpServer: HttpServer) {}\n * }\n * ```\n *\n * > Note: TypeScript transform and store `HttpsServer` as `Function` type in the metadata. So to inject a factory, you must use the `@Inject(type)` decorator.\n *\n * @param {Type<any>} target\n * @param {string} targetKey\n * @param {TypedPropertyDescriptor<Function> | number} descriptor\n * @returns {any}\n * @decorator\n */\nexport function HttpsServer(target: Type<any>, targetKey: string, descriptor: TypedPropertyDescriptor<Function> | number) {\n return Inject(HttpsServer)(target, targetKey, descriptor);\n}\n\nexport type HttpsServer = Https.Server;\n","import {Configuration, InjectorService, ProviderScope, registerProvider} from \"@tsed/di\";\nimport Https from \"https\";\nimport {PlatformApplication} from \"../services/PlatformApplication\";\nimport {HttpsServer} from \"../decorators/httpsServer\";\nimport {listenServer} from \"./listenServer\";\n\nexport function createHttpsServer(injector: InjectorService): void {\n injector.forkProvider(HttpsServer);\n}\n\nregisterProvider({\n provide: HttpsServer,\n deps: [PlatformApplication, Configuration],\n scope: ProviderScope.SINGLETON,\n global: true,\n useFactory(platformApplication: PlatformApplication, settings: Configuration) {\n const options = settings.httpsOptions!;\n\n return Https.createServer(options, platformApplication.callback());\n }\n});\n\nexport async function listenHttpsServer(injector: InjectorService) {\n const {settings} = injector;\n const server = injector.get<HttpsServer>(HttpsServer);\n\n if (settings.httpsPort !== false && server) {\n const {address, port} = settings.getHttpsPort();\n injector.logger.debug(`Start server on https://${address}:${port}`);\n\n const options = await listenServer(server, {address, port});\n settings.setHttpsPort(options);\n\n injector.logger.info(`Listen server on https://${options.address}:${options.port}`);\n }\n}\n","import {$log, colorize} from \"@tsed/logger\";\nimport {PlatformRouteDetails} from \"../domain/PlatformRouteDetails\";\n\nexport function printRoutes(routes: PlatformRouteDetails[]) {\n const mapColor: {[key: string]: string} = {\n GET: \"green\",\n POST: \"yellow\",\n PUT: \"blue\",\n DELETE: \"red\",\n PATCH: \"magenta\",\n ALL: \"cyan\"\n };\n\n const list = routes.map((route) => {\n const obj = route.toJSON();\n const method = obj.method.toUpperCase();\n\n obj.method = {\n length: method.length,\n toString: () => {\n return colorize(method, mapColor[method]);\n }\n } as any;\n\n return obj;\n });\n\n const str = $log.drawTable(list, {\n padding: 1,\n header: {\n method: \"Method\",\n url: \"Endpoint\",\n name: \"Class method\"\n }\n });\n\n return \"\\n\" + str.trim();\n}\n","import {InjectorService} from \"@tsed/di\";\nimport {PlatformContext} from \"../domain/PlatformContext\";\nimport {PlatformRequest} from \"../services/PlatformRequest\";\nimport {PlatformResponse} from \"../services/PlatformResponse\";\nimport {IncomingEvent} from \"../interfaces/IncomingEvent\";\nimport {PlatformViews} from \"@tsed/platform-views\";\n\nconst uuidv4 = require(\"uuid\").v4;\nconst defaultReqIdBuilder = (req: any) => req.get(\"x-request-id\") || uuidv4().replace(/-/gi, \"\");\n\n/**\n * Create the TsED context to wrap request, response, injector, etc...\n * @param injector\n * @ignore\n */\nexport function createContext(injector: InjectorService) {\n const ResponseKlass = injector.getProvider(PlatformResponse)?.useClass;\n const RequestKlass = injector.getProvider(PlatformRequest)?.useClass;\n const platformViews = injector.get<PlatformViews>(PlatformViews)!;\n const {reqIdBuilder = defaultReqIdBuilder, ...loggerOptions} = injector.settings.logger || {};\n\n return async (event: IncomingEvent): Promise<PlatformContext> => {\n const ctx = new PlatformContext({\n event,\n id: reqIdBuilder(event.request),\n logger: injector.logger,\n ...loggerOptions,\n injector,\n ResponseKlass,\n RequestKlass\n });\n\n ctx.response.platformViews = platformViews;\n\n ctx.response.onEnd(async () => {\n await ctx.emit(\"$onResponse\", ctx);\n await ctx.destroy();\n });\n\n await ctx.emit(\"$onRequest\", ctx);\n\n return ctx;\n };\n}\n","import {classOf, constructorOf, nameOf, toMap, Type} from \"@tsed/core\";\nimport {Container, createContainer, getConfiguration, InjectorService, IProvider, setLoggerLevel} from \"@tsed/di\";\nimport {importProviders} from \"@tsed/components-scan\";\nimport {PerfLogger} from \"@tsed/perf\";\nimport {getMiddlewaresForHook} from \"@tsed/platform-middlewares\";\nimport {PlatformModule} from \"../PlatformModule\";\nimport {Platform} from \"../services/Platform\";\nimport {PlatformApplication} from \"../services/PlatformApplication\";\nimport {PlatformHandler} from \"../services/PlatformHandler\";\nimport {PlatformRequest} from \"../services/PlatformRequest\";\nimport {PlatformResponse} from \"../services/PlatformResponse\";\nimport {PlatformRouter} from \"../services/PlatformRouter\";\n\nimport {\n createHttpServer,\n createHttpsServer,\n createInjector,\n createPlatformApplication,\n listenHttpServer,\n listenHttpsServer,\n printRoutes\n} from \"../utils\";\n\nconst SKIP_HOOKS = [\"$beforeInit\", \"$afterInit\", \"$onInit\", \"$onMountingMiddlewares\"];\n\n/**\n * @ignore\n */\nexport interface PlatformType<T = any> extends Type<T> {\n providers: IProvider[];\n}\n\nconst {bind, start, end, log} = PerfLogger.get(\"bootstrap\");\n\n/**\n * @ignore\n */\nexport interface PlatformBootstrap {\n bootstrap(module: Type<any>, settings?: Partial<TsED.Configuration>): Promise<PlatformBuilder>;\n}\n\n/**\n * @platform\n */\nexport abstract class PlatformBuilder<App = TsED.Application, Router = TsED.Router> {\n static currentPlatform: Type<PlatformBuilder<any, any>> & PlatformBootstrap;\n readonly name: string = \"\";\n protected startedAt = new Date();\n protected locals: Container;\n #rootModule: any;\n #injector: InjectorService;\n #providers: Map<Type, IProvider>;\n\n constructor({name, providers}: {name: string; providers: IProvider[]}) {\n this.name = name;\n this.#providers = toMap<any, IProvider>(providers, \"provide\");\n\n this.locals = new Container();\n\n this.useProvider(PlatformHandler, this.#providers.get(PlatformHandler))\n .useProvider(PlatformResponse, this.#providers.get(PlatformResponse))\n .useProvider(PlatformRequest, this.#providers.get(PlatformRequest))\n .useProvider(PlatformRouter, this.#providers.get(PlatformRouter))\n .useProvider(PlatformApplication, this.#providers.get(PlatformApplication))\n .useProvider(Platform, this.#providers.get(Platform));\n }\n\n get injector(): InjectorService {\n return this.#injector;\n }\n\n get rootModule(): any {\n return this.#rootModule;\n }\n\n get app(): PlatformApplication<App, Router> {\n return this.injector.get<PlatformApplication<App, Router>>(PlatformApplication)!;\n }\n\n get platform() {\n return this.injector.get<Platform>(Platform)!;\n }\n\n /**\n * Return the settings configured by the decorator @@Configuration@@.\n *\n * ```typescript\n * @Configuration({\n * rootDir: Path.resolve(__dirname),\n * port: 8000,\n * httpsPort: 8080,\n * mount: {\n * \"/rest\": \"${rootDir}/controllers/**\\/*.js\"\n * }\n * })\n * export class Server {\n * $onInit(){\n * console.log(this.settings); // {rootDir, port, httpsPort,...}\n * }\n * }\n * ```\n *\n * @returns {PlatformConfiguration}\n */\n get settings() {\n return this.injector.settings;\n }\n\n get logger() {\n return this.injector.logger;\n }\n\n get disableBootstrapLog() {\n return this.settings.logger?.disableBootstrapLog;\n }\n\n static build<T extends PlatformBuilder<any, any>>(platformBuildClass: PlatformType<T>): T {\n return new platformBuildClass({\n name: nameOf(platformBuildClass).replace(\"Platform\", \"\").toLowerCase(),\n providers: platformBuildClass.providers\n });\n }\n\n log(...data: any[]) {\n return this.disableBootstrapLog && this.logger.info(...data);\n }\n\n /**\n * Add classes to the components list\n * @param classes\n */\n public addComponents(classes: any | any[]) {\n this.settings.componentsScan = this.settings.componentsScan.concat(classes);\n\n return this;\n }\n\n /**\n * Add classes decorated by @@Controller@@ to components container.\n *\n * ### Example\n *\n * ```typescript\n * @Controller('/ctrl')\n * class MyController{\n * }\n *\n * platform.addControllers('/rest', [MyController])\n * ```\n *\n * ::: tip\n * If the MyController class isn't decorated, the class will be ignored.\n * :::\n *\n * @param {string} endpoint\n * @param {any[]} controllers\n */\n public addControllers(endpoint: string, controllers: any | string | (any | string)[]) {\n this.settings.mount[endpoint] = (this.settings.mount[endpoint] || []).concat(controllers);\n }\n\n public async runLifecycle() {\n setLoggerLevel(this.injector);\n\n await this.importProviders();\n await this.loadInjector();\n\n this.useContext();\n this.useRouter();\n\n await this.loadRoutes();\n await this.logRoutes();\n }\n\n async loadInjector() {\n const {injector} = this;\n await this.callHook(\"$beforeInit\");\n\n this.log(\"Build providers\");\n const container = createContainer(constructorOf(this.rootModule));\n\n await injector.load(container, PlatformModule);\n\n this.log(\"Settings and injector loaded\");\n\n await this.callHook(\"$afterInit\");\n }\n\n async listen() {\n await this.callHook(\"$beforeListen\");\n\n await this.listenServers();\n\n await this.callHook(\"$afterListen\");\n\n await this.ready();\n end();\n }\n\n async stop() {\n await this.callHook(\"$onDestroy\");\n return this.injector.destroy();\n }\n\n public async ready() {\n const {startedAt} = this;\n\n await this.callHook(\"$onReady\");\n await this.injector.emit(\"$onServerReady\");\n\n this.log(`Started in ${new Date().getTime() - startedAt.getTime()} ms`);\n }\n\n async callHook(hook: string, ...args: any[]) {\n const {injector, rootModule} = this;\n log(hook);\n\n if (!this.disableBootstrapLog) {\n injector.logger.info(`\\x1B[1mCall hook ${hook}\\x1B[22m`);\n }\n\n // call hook for the Server\n if (hook in rootModule) {\n await rootModule[hook](...args);\n }\n\n // Load middlewares for the given hook\n this.loadMiddlewaresFor(hook);\n\n // call hooks added by providers\n if (!SKIP_HOOKS.includes(hook)) {\n await injector.emit(hook);\n }\n }\n\n async loadStatics(): Promise<void> {\n const {settings} = this;\n\n if (settings.statics) {\n Object.entries(settings.statics).forEach(([path, items]) => {\n [].concat(items as any).forEach((options) => {\n const opts =\n typeof options === \"string\"\n ? {\n root: options\n }\n : options;\n\n this.platform.app.statics(path, opts);\n });\n });\n }\n }\n\n useProvider(token: Type<any>, settings?: Partial<IProvider>) {\n this.locals.addProvider(token, settings);\n\n return this;\n }\n\n protected async importProviders() {\n this.injector.logger.debug(\"Scan components\");\n\n const providers = await importProviders(this.injector.settings, [\"imports\", \"mount\", \"componentsScan\"]);\n const routes = providers.filter((provider) => !!provider.route).map(({route, token}) => ({route, token}));\n\n this.settings.set(\"routes\", routes);\n }\n\n /**\n * Load middlewares from configuration for the given hook\n * @param hook\n * @protected\n */\n protected loadMiddlewaresFor(hook: string): void {\n return getMiddlewaresForHook(hook, this.settings, \"$beforeRoutesInit\").forEach(({use}) => {\n this.app.use(use);\n });\n }\n\n protected useRouter(): this {\n return this;\n }\n\n protected useContext(): this {\n return this;\n }\n\n protected async bootstrap(module: Type<any>, settings: Partial<TsED.Configuration> = {}) {\n // istanbul ignore next\n if (settings.logger?.perf) {\n start();\n bind(this);\n settings.logger = {\n ...settings.logger,\n level: \"off\"\n };\n }\n\n this.createInjector(module, {\n ...settings,\n PLATFORM_NAME: this.name\n });\n this.createRootModule(module);\n\n await this.runLifecycle();\n\n return this;\n }\n\n protected async listenServers(): Promise<void> {\n await Promise.all([listenHttpServer(this.injector), listenHttpsServer(this.injector)]);\n }\n\n protected async logRoutes() {\n const {logger, platform} = this;\n\n if (!this.settings.logger?.disableRoutesSummary && !this.disableBootstrapLog) {\n logger.info(\"Routes mounted :\");\n logger.info(printRoutes(await this.injector.alterAsync(\"$logRoutes\", platform.getRoutes())));\n }\n }\n\n protected async loadRoutes() {\n // istanbul ignore next\n if (this.settings.logger?.level !== \"off\") {\n const {PlatformLogMiddleware} = await import(\"@tsed/platform-log-middleware\");\n this.app.use(PlatformLogMiddleware);\n }\n\n this.log(\"Load routes\");\n await this.callHook(\"$beforeRoutesInit\");\n\n await this.callHook(\"$$loadRoutes\");\n\n await this.callHook(\"$onRoutesInit\");\n\n await this.loadStatics();\n\n await this.callHook(\"$afterRoutesInit\");\n }\n\n protected createInjector(module: Type<any>, settings: any) {\n const configuration = getConfiguration(module, settings);\n\n this.#injector = createInjector(configuration);\n\n // configure locals providers\n this.locals.forEach((provider) => {\n this.injector.addProvider(provider.token, provider);\n });\n\n createPlatformApplication(this.injector);\n createHttpsServer(this.injector);\n createHttpServer(this.injector);\n }\n\n protected createRootModule(module: Type<any>) {\n this.#rootModule = this.injector.invoke(module);\n\n this.injector.delete(constructorOf(this.#rootModule));\n this.injector.delete(classOf(this.#rootModule));\n }\n}\n","import {StoreMerge} from \"@tsed/core\";\nimport {PlatformMulterSettings} from \"../../config/interfaces/PlatformMulterSettings\";\nimport {PlatformMulterMiddleware} from \"../../middlewares/PlatformMulterMiddleware\";\n\n/**\n * Define multer option for all MultipartFile\n *\n * ```typescript\n * import {Controller, Post, PlatformMulterFile, MultipartFile, MulterOptions} from \"@tsed/common\";\n *\n * @Controller('/')\n * class MyCtrl {\n * @Post('/file')\n * private uploadFile(@MultipartFile(\"file1\") file: PlatformMulterFile) {\n *\n * }\n *\n * @Post('/file')\n * @MulterOptions({dest: \"/other-dir\"})\n * private uploadFile(@MultipartFile(\"file1\") file: PlatformMulterFile) {\n *\n * }\n *\n * @Post('/file2')\n * @MulterOptions({dest: \"/other-dir\"})\n * private uploadFile(@MultipartFile(\"file1\") file: PlatformMulterFile, @MultipartFile(\"file2\") file2: PlatformMulterFile) {\n *\n * }\n *\n * @Post('/files')\n * private uploadFile(@MultipartFile(\"file1\") files: PlatformMulterFile[]) {\n *\n * }\n * }\n * ```\n *\n * See the tutorial on the [multer configuration](/tutorials/multer.md).\n *\n * @param {multer.Options} options\n * @returns {(target: any, propertyKey: string, descriptor: PropertyDescriptor) => PropertyDescriptor}\n * @decorator\n * @multer\n */\nexport function MulterOptions(options: PlatformMulterSettings): MethodDecorator {\n return (target: any, propertyKey: string, descriptor: PropertyDescriptor) => {\n StoreMerge(PlatformMulterMiddleware, {options})(target, propertyKey, descriptor);\n\n return descriptor;\n };\n}\n","import {MulterOptions} from \"./multerOptions\";\n\n/**\n * Define file size limit.\n *\n * ```typescript\n * import {Controller, Post} from \"@tsed/common\";\n * import {MulterOptions, MultipartFile} from \"@tsed/common\";\n * import {Multer} from \"@types/multer\";\n *\n * type MulterFile = Express.Multer.File;\n *\n * @Controller('/')\n * class MyCtrl {\n * @Post('/file2')\n * @MulterFileSize(1024) // (Ko). Applied for all fields\n * private uploadFile(@MultipartFile(\"file1\") file: MulterFile, @MultipartFile(\"file2\") file2: MulterFile) {\n *\n * }\n * }\n * ```\n *\n * > See the tutorial on the [multer configuration](/tutorials/multer.md).\n * @param fileSize\n * @returns {(target: any, propertyKey: string, descriptor: PropertyDescriptor) => PropertyDescriptor}\n * @decorator\n * @multer\n */\nexport function MulterFileSize(fileSize: number): MethodDecorator {\n return MulterOptions({limits: {fileSize}});\n}\n","import {DecoratorParameters, Metadata, StoreMerge, useDecorators, useMethodDecorators} from \"@tsed/core\";\nimport {ParamTypes, UseParam} from \"@tsed/platform-params\";\nimport {Consumes, Returns} from \"@tsed/schema\";\nimport {PlatformMulterFile} from \"../../config/interfaces/PlatformMulterSettings\";\nimport {MulterInputOptions, PlatformMulterMiddleware} from \"../../middlewares/PlatformMulterMiddleware\";\n\nfunction mapOptions(name: string, maxCount: number | undefined): MulterInputOptions {\n return {\n fields: [\n {\n name,\n maxCount\n }\n ]\n };\n}\n\n/**\n * Define a parameter as Multipart file.\n *\n * ```typescript\n * import {Controller, Post} from \"@tsed/common\";\n * import {MulterOptions, MultipartFile} from \"@tsed/common\";\n * import {Multer} from \"@types/multer\";\n *\n * type MulterFile = Express.Multer.File;\n *\n * @Controller('/')\n * class MyCtrl {\n * @Post('/file')\n * private uploadFile(@MultipartFile(\"file1\") file: MulterFile) {\n *\n * }\n *\n * @Post('/file')\n * @MulterOptions({dest: \"/other-dir\"})\n * private uploadFile(@MultipartFile(\"file1\") file: MulterFile) {\n *\n * }\n *\n * @Post('/file2')\n * @MulterOptions({dest: \"/other-dir\"})\n * private uploadFile(@MultipartFile(\"file1\") file: MulterFile, @MultipartFile(\"file2\") file2: MulterFile) {\n *\n * }\n *\n * @Post('/files')\n * private uploadFile(@MultipartFile(\"file1\") files: MulterFile[]) {\n *\n * }\n * }\n * ```\n *\n * > See the tutorial on the [multer configuration](/tutorials/multer.md).\n *\n * @param name\n * @param maxCount\n * @returns Function\n * @decorator\n * @input\n */\nexport function MultipartFile(name: string, maxCount?: number): ParameterDecorator {\n return (...args: DecoratorParameters): void => {\n const [target, propertyKey, index] = args;\n const multiple = Metadata.getParamTypes(target, propertyKey)[index as number] === Array;\n\n name = (typeof name === \"object\" ? undefined : name)!;\n\n const expression = [name, !multiple && \"0\"].filter(Boolean).join(\".\");\n\n const decorators = useDecorators(\n useMethodDecorators(\n Returns(400).Description(\n `<File too long | Too many parts | Too many files | Field name too long | Field value too long | Too many fields | Unexpected field> [fieldName] Example: File too long file1`\n ),\n Consumes(\"multipart/form-data\"),\n StoreMerge(PlatformMulterMiddleware, mapOptions(name, maxCount))\n ),\n UseParam({\n paramType: ParamTypes.FILES,\n dataPath: \"$ctx.request.files\",\n expression,\n useValidation: true\n })\n );\n\n decorators(...args);\n };\n}\n\nexport type MultipartFile = PlatformMulterFile;\n","import {DecoratorParameters} from \"@tsed/core\";\nimport {JsonEntityFn} from \"@tsed/schema\";\nimport {EndpointMetadata} from \"../../domain\";\n\n/**\n *\n * @param fn\n * @decorator\n */\nexport function EndpointFn(fn: (endpoint: EndpointMetadata, parameters: DecoratorParameters) => void): MethodDecorator {\n return JsonEntityFn<EndpointMetadata>(fn) as any;\n}\n","import {useDecorators} from \"@tsed/core\";\nimport {Produces} from \"@tsed/schema\";\nimport {EndpointFn} from \"./endpointFn\";\n\n/**\n * Set a mime list which are acceptable and checks if the specified content types are acceptable, based on the request’s Accept HTTP header field.\n *\n * ```typescript\n * @Controller('/mypath')\n * export class MyCtrl {\n *\n * @Get('/')\n * @AcceptMime('application/json')\n * public getResource(){}\n * }\n * ```\n *\n * @param mimes\n * @decorator\n * @operation\n * @response\n */\nexport function AcceptMime(...mimes: string[]): Function {\n return useDecorators(\n Produces(...mimes),\n EndpointFn((endpoint) => {\n endpoint.acceptMimes = mimes;\n })\n );\n}\n","import {isClass, Metadata, nameOf} from \"@tsed/core\";\nimport {ParamTypes, UseParam} from \"@tsed/platform-params\";\nimport {ServerResponse} from \"http\";\n\nfunction getParamType(target: Object, propertyKey: string | symbol, parameterIndex: number) {\n const type = Metadata.getOwnParamTypes(target, propertyKey)[parameterIndex];\n\n if (isClass(type)) {\n if (nameOf(type) === \"PlatformResponse\") {\n return {paramType: ParamTypes.PLATFORM_RESPONSE, dataPath: \"$ctx.response\"};\n }\n\n if (type === ServerResponse) {\n return {paramType: ParamTypes.NODE_RESPONSE, dataPath: \"$ctx.response.res\"};\n }\n }\n\n return {paramType: ParamTypes.RESPONSE, dataPath: \"$ctx.response.response\"};\n}\n\n/**\n * Response service.\n *\n * @decorator\n * @operation\n * @input\n * @response\n */\nexport function Response(): ParameterDecorator;\nexport function Response(): ParameterDecorator {\n return Res();\n}\n\n/**\n * Request service.\n *\n * @alias Response\n * @decorator\n * @operation\n * @input\n * @response\n */\nexport function Res(): ParameterDecorator;\nexport function Res(): ParameterDecorator {\n return (target, propertyKey, parameterIndex) => {\n const {paramType, dataPath} = getParamType(target, propertyKey, parameterIndex);\n UseParam({\n paramType,\n dataPath\n })(target, propertyKey, parameterIndex);\n };\n}\n\n/**\n * Response service.\n *\n * @decorator\n * @operation\n * @input\n * @response\n */\nexport interface Response extends TsED.Response {}\n\n/**\n * Response service.\n *\n * @alias Response\n * @decorator\n * @operation\n * @input\n * @response\n */\nexport interface Res extends Response {}\n","import {isClass, Metadata, nameOf, Type} from \"@tsed/core\";\nimport {IncomingMessage} from \"http\";\nimport {mapParamsOptions, ParamOptions, ParamTypes, UseParam} from \"@tsed/platform-params\";\n\nfunction getParamType(target: Object, propertyKey: string | symbol, parameterIndex: number) {\n const type = Metadata.getOwnParamTypes(target, propertyKey)[parameterIndex];\n\n if (isClass(type)) {\n if (nameOf(type) === \"PlatformRequest\") {\n return {paramType: ParamTypes.PLATFORM_REQUEST, dataPath: \"$ctx.request\"};\n }\n\n if (type === IncomingMessage) {\n return {paramType: ParamTypes.NODE_REQUEST, dataPath: \"$ctx.request.req\"};\n }\n }\n\n return {paramType: ParamTypes.REQUEST, dataPath: \"$ctx.request.request\"};\n}\n\n/**\n * Request service.\n *\n * @decorator\n * @operation\n * @input\n */\nexport function Request(expression: string, useType: Type<any>): ParameterDecorator;\nexport function Request(expression: string): ParameterDecorator;\nexport function Request(useType: Type<any>): ParameterDecorator;\nexport function Request(options: ParamOptions<any>): ParameterDecorator;\nexport function Request(): ParameterDecorator;\nexport function Request(...args: any[]): ParameterDecorator {\n // @ts-ignore\n return Req(...args);\n}\n\n/**\n * Request service.\n *\n * @alias Request\n * @decorator\n * @operation\n * @input\n */\nexport function Req(expression: string, useType: Type<any>): ParameterDecorator;\nexport function Req(expression: string): ParameterDecorator;\nexport function Req(useType: Type<any>): ParameterDecorator;\nexport function Req(options: Partial<ParamOptions>): ParameterDecorator;\nexport function Req(): ParameterDecorator;\nexport function Req(...args: any[]): ParameterDecorator {\n const {expression, useType, useConverter = false, useValidation = false} = mapParamsOptions(args);\n\n return (target, propertyKey, parameterIndex) => {\n const {paramType, dataPath} = getParamType(target, propertyKey, parameterIndex);\n\n UseParam({\n paramType,\n dataPath,\n expression,\n useType,\n useConverter,\n useValidation\n })(target, propertyKey, parameterIndex);\n };\n}\n\n/**\n * Request service.\n *\n * @decorator\n * @operation\n * @input\n */\nexport interface Request extends TsED.Request {}\n\n/**\n * Request service.\n *\n * @alias Request\n * @decorator\n * @operation\n * @input\n */\nexport interface Req extends Request {}\n","import {ParamTypes, UseParam} from \"@tsed/platform-params\";\n\n/**\n * Get the Next function (for express application and middleware).\n *\n * @decorator\n * @operation\n * @input\n */\nexport function Next(): ParameterDecorator {\n return UseParam({\n paramType: ParamTypes.NEXT_FN,\n dataPath: \"next\",\n useConverter: false,\n useValidation: false\n });\n}\n\ndeclare global {\n namespace TsED {\n export interface NextFunction extends Function {}\n }\n}\n/**\n * Get the Next function (for express application and middleware).\n *\n * @decorator\n * @operation\n * @input\n */\nexport type Next = TsED.NextFunction;\n","import {ParamTypes, UseParam} from \"@tsed/platform-params\";\n\n/**\n * @returns {Function}\n * @decorator\n * @operation\n * @input\n */\nexport function Err(): Function {\n return UseParam({\n paramType: ParamTypes.ERR,\n dataPath: \"err\",\n useValidation: false,\n useConverter: false\n });\n}\n","/**\n * @ignore\n */\nexport function mapReturnedResponse({use, collection, ...options}: any): any {\n return {\n ...options,\n type: options.type || use,\n collectionType: options.collectionType || collection\n };\n}\n","import {Type} from \"@tsed/core\";\nimport {createContainer, DITest, InjectorService} from \"@tsed/di\";\nimport {PlatformBuilder, PlatformType} from \"../builder/PlatformBuilder\";\nimport {PlatformContext, PlatformContextOptions} from \"../domain/PlatformContext\";\nimport {PlatformModule} from \"../PlatformModule\";\nimport {createInjector} from \"../utils/createInjector\";\nimport {PlatformApplication} from \"./PlatformApplication\";\nimport {PlatformViews} from \"@tsed/platform-views\";\n\n/**\n * @platform\n */\nexport class PlatformTest extends DITest {\n public static platformBuilder: Type<PlatformBuilder<any, any>>;\n\n static async create(options: Partial<TsED.Configuration> = {}) {\n DITest.injector = PlatformTest.createInjector(options);\n const container = createContainer();\n\n await DITest.injector.load(container, PlatformModule);\n }\n\n /**\n * Create a new injector with the right default services\n */\n static createInjector(settings: any = {}): InjectorService {\n return createInjector(DITest.configure(settings));\n }\n\n /**\n * Load the server silently without listening port and configure it on test profile.\n * @decorator\n * @param mod\n * @param settings\n * @returns {Promise<void>}\n */\n static bootstrap(mod: any, settings: Partial<TsED.Configuration & {listen: boolean}> = {}): () => Promise<void> {\n return async function before(): Promise<void> {\n let instance: any;\n const platform: PlatformType = settings.platform || PlatformTest.platformBuilder;\n\n /* istanbul ignore next */\n if (!platform) {\n throw new Error(\n \"Platform type is not specified. Have you added at least `import @tsed/platform-express` (or equivalent) on your Server.ts ?\"\n );\n }\n\n // @ts-ignore\n instance = await PlatformBuilder.build(platform).bootstrap(mod, DITest.configure(settings));\n\n if (!settings.listen) {\n await instance.callHook(\"$beforeListen\");\n await instance.callHook(\"$afterListen\");\n await instance.ready();\n } else {\n await instance.listen();\n }\n\n // used by inject method\n DITest.injector = instance.injector;\n };\n }\n\n /**\n * It injects services into the test function where you can alter, spy on, and manipulate them.\n *\n * The inject function has two parameters\n *\n * * an array of Service dependency injection tokens,\n * * a test function whose parameters correspond exactly to each item in the injection token array.\n *\n * @param targets\n * @param func\n */\n static inject<T>(targets: any[], func: (...args: any[]) => Promise<T> | T): () => Promise<T> {\n return async (): Promise<T> => {\n if (!DITest.hasInjector()) {\n await PlatformTest.create();\n }\n\n const injector: InjectorService = DITest.injector;\n const deps = [];\n\n for (const target of targets) {\n deps.push(injector.has(target) ? injector.get(target) : await injector.invoke(target));\n }\n\n return await func(...deps);\n };\n }\n\n /**\n * Return the raw application (express or koa).\n * Use this callback with SuperTest.\n *\n * ```typescript\n * let request: SuperTest.SuperTest<SuperTest.Test>;\n * beforeEach(PlatformTest.bootstrap(Server, {\n * mount: {\n * \"/rest\": [ProductsController]\n * }\n * }));\n * beforeEach(() => {\n * request = SuperTest(PlatformTest.callback());\n * });\n * ```\n */\n static callback() {\n return DITest.injector.get<PlatformApplication>(PlatformApplication)?.callback();\n }\n\n static createRequest(options: any = {}): any {\n return {\n headers: {},\n get(key: string) {\n return this.headers[key.toLowerCase()];\n },\n accepts(mime?: string | string[]) {\n return require(\"accepts\")(this).types([].concat(mime as never));\n },\n ...options\n };\n }\n\n static createResponse(options: any = {}): any {\n return {\n headers: {},\n locals: {},\n statusCode: 200,\n status(code: number) {\n this.statusCode = code;\n return this;\n },\n contentType(content: string) {\n this.set(\"content-type\", content);\n },\n contentLength(content: number) {\n this.set(\"content-length\", content);\n },\n redirect(status: number, path: string) {\n this.statusCode = status;\n this.set(\"location\", path);\n },\n location(path: string) {\n this.set(\"location\", path);\n },\n get(key: string) {\n return this.headers[key.toLowerCase()];\n },\n getHeaders() {\n return this.headers;\n },\n set(key: string, value: any) {\n this.headers[key.toLowerCase()] = value;\n return this;\n },\n send(data: any) {\n this.data = data;\n },\n json(data: any) {\n this.data = data;\n },\n ...options\n };\n }\n\n static createRequestContext(options: Partial<PlatformContextOptions & any> = {}) {\n const event = {\n request: options?.request?.request || options?.event?.request || PlatformTest.createRequest(),\n response: options?.response?.response || options?.event?.response || PlatformTest.createResponse()\n };\n\n const ctx = new PlatformContext({\n id: \"id\",\n injector: DITest.injector,\n logger: DITest.injector.logger,\n url: \"/\",\n ...options,\n event\n });\n\n ctx.response.platformViews = PlatformTest.get<PlatformViews>(PlatformViews);\n\n return ctx;\n }\n}\n","import {GlobalProviders, ProviderType} from \"@tsed/di\";\nimport {ControllerProvider} from \"../domain/ControllerProvider\";\nimport {PlatformRouter} from \"../services/PlatformRouter\";\n\nGlobalProviders.createRegistry(ProviderType.CONTROLLER, ControllerProvider, {\n onInvoke(provider: ControllerProvider, locals: any) {\n locals.set(PlatformRouter, provider.getRouter());\n }\n});\n"],"names":["rootDir","process","cwd","PlatformConfiguration","DIConfiguration","constructor","env","NODE_ENV","Env","DEV","httpPort","httpsPort","scopes","ProviderType","CONTROLLER","ProviderScope","SINGLETON","logger","debug","level","logRequest","jsonIndentation","PROD","errors","headerName","mount","exclude","componentsScan","version","getRaw","v","setRaw","value","port","httpsOptions","get","resolve","statics","acceptMimes","converter","options","format","$log","appenders","set","type","levels","layout","pattern","additionalProperties","buildAddressAndPort","addressPort","address","indexOf","split","getHttpPort","PlatformConfiguration_1","setHttpPort","settings","getHttpsPort","setHttpsPort","Injectable","scope","global","bindEndpointMiddleware","endpoint","ctx","PlatformAcceptMimesMiddleware","use","request","mimes","uniq","concat","length","accepts","NotAcceptable","join","__decorate","Constant","__param","Context","Middleware","createFakeRawDriver","FakeRawDriver","all","patch","post","put","head","delete","AnyToPromiseWithCtx","AnyToPromise","$ctx","err","isDone","isAborted","response","destroy","status","AnyToPromiseStatus","PENDING","RESOLVED","call","cb","isCanceledResponse","getResponse","HandlerType","HandlerMetadata","RAW_FN","target","token","propertyKey","routeOptions","handler","prototype","hasNextFunction","hasParamType","ParamTypes","NEXT_FN","ERR","ERR_MIDDLEWARE","injectable","ParamMetadata","getParams","RAW_ERR_FN","hasErrorParam","paramType","findIndex","p","isFinal","toString","nameOf","filter","Boolean","EndpointMetadata","JsonEntityStore","store","Store","fromMethod","descriptor","descriptorOf","beforeMiddlewares","middlewares","afterMiddlewares","after","before","targetName","params","Array","from","children","values","operation","_operation","operationPaths","view","getEndpoints","operations","getOperationsStores","map","clone","classOf","prototypeOf","addOperationPath","method","path","key","ctrlValue","deepMerge","args","isFunction","EndpointMetadata_1","collectionType","_type","_schema","JsonEntityComponent","DecoratorTypes","METHOD","isMetadata","input","createHandlerMetadata","injector","obj","provider","getProvider","useClass","ENDPOINT","MIDDLEWARE","mergeHeaders","specHeaders","headers","Object","entries","reduce","item","toLowerCase","undefined","String","example","setResponseHeaders","hasStatus","getStatus","statusCode","getHeadersOf","mergedHeaders","getHeaders","setHeaders","isRedirection","redirect","PlatformHandler","createHandler","createRawHandler","createCustomHandler","compileHandler","provide","CUSTOM","next","flush","data","responseFilter","serialize","transform","body","metadata","CTX_FN","onCtxRequest","promise","getCustomArgs","getDefaultArgs","onRequest","requestOptions","error","name","message","resolver","runInContext","state","onSuccess","er","onError","isHeadersSent","warn","stack","origin","request_id","id","isStream","callReturnedMiddleware","middleware","getRequest","includes","Inject","PlatformResponseFilter","InjectorService","PlatformParams","PLATFORM_ROUTER_OPTIONS","Symbol","for","PlatformRouter","platformHandler","rawRouter","raw","PlatformRouter_1","createRawRouter","create","routerOptions","locals","Map","invoke","callback","getRouter","handlers","mapHandlers","addRoute","multer","m","require","makePromise","fn","apply","Reflect","req","res","promisify","list","index","INSTANCE","PlatformApplication","rawApp","PlatformApplication_1","createRawApp","getApp","PlatformMulterMiddleware","fields","PlatformMulterMiddleware_1","storage","dest","app","getFields","code","Exception","field","trim","conf","maxCount","useCtxHandler","formatMethod","OperationMethods","PlatformControllerBuilder","build","useBefore","buildMiddlewares","buildEndpoints","buildChildrenCtrls","endpoints","getKey","updateFinalRouteState","has","setFinalRoute","operationPath","forEach","ALL","buildEndpoint","mldwrs","useAfter","router","hasFiles","find","FILES","size","child","Error","o","PlatformRequest","secure","host","protocol","url","originalUrl","rawBody","cookies","query","session","files","getReq","mime","aborted","Scope","onFinished","PlatformResponse","getRes","setHeader","location","contentType","contentLength","getContentLength","parseInt","getContentType","attachment","filename","stream","pipe","render","platformViews","send","Buffer","isBuffer","isBoolean","isNumber","isString","json","getBody","onEnd","PlatformResponse_1","writableEnded","writableFinished","headersSent","PlatformContext","DIContext","event","ignoreUrlPatterns","ResponseKlass","RequestKlass","ignoreLog","reg","match","RegExp","container","PlatformRouteDetails","param","RAW_BODY","methodClassName","className","parameters","toJSON","ROUTER_OPTIONS","ControllerProvider","Provider","entity","parent","assign","mdlwrs","a","b","keys","hasChildren","hasParent","setRouter","getControllerPath","basePath","replace","Platform","platformApplication","routes","addRoutes","routeSettings","route","hasProvider","buildRoutes","push","getRoutes","getMountedControllers","endpointUrl","ctrl","PlatformModule","platform","createRoutersFromControllers","getProviders","$$loadRoutes","Module","imports","createInjector","createSettingsService","setLoggerLevel","GlobalProviders","instance","addProvider","createPlatformApplication","forkProvider","HttpServer","targetKey","listenServer","http","Promise","reject","on","then","listen","createHttpServer","registerProvider","deps","useFactory","Http","createServer","listenHttpServer","server","info","HttpsServer","createHttpsServer","Configuration","Https","listenHttpsServer","printRoutes","mapColor","GET","POST","PUT","DELETE","PATCH","toUpperCase","colorize","str","drawTable","padding","header","uuidv4","v4","defaultReqIdBuilder","createContext","PlatformViews","reqIdBuilder","loggerOptions","emit","SKIP_HOOKS","bind","start","end","log","PerfLogger","PlatformBuilder","providers","Date","toMap","Container","useProvider","rootModule","disableBootstrapLog","platformBuildClass","addComponents","classes","addControllers","controllers","runLifecycle","importProviders","loadInjector","useContext","useRouter","loadRoutes","logRoutes","callHook","createContainer","constructorOf","load","listenServers","ready","stop","startedAt","getTime","hook","loadMiddlewaresFor","loadStatics","items","opts","root","getMiddlewaresForHook","bootstrap","module","perf","PLATFORM_NAME","createRootModule","disableRoutesSummary","alterAsync","PlatformLogMiddleware","configuration","getConfiguration","MulterOptions","StoreMerge","MulterFileSize","fileSize","limits","mapOptions","MultipartFile","multiple","Metadata","getParamTypes","expression","decorators","useDecorators","useMethodDecorators","Returns","Description","Consumes","UseParam","dataPath","useValidation","EndpointFn","JsonEntityFn","AcceptMime","Produces","getParamType","parameterIndex","getOwnParamTypes","isClass","PLATFORM_RESPONSE","ServerResponse","NODE_RESPONSE","RESPONSE","Response","Res","PLATFORM_REQUEST","IncomingMessage","NODE_REQUEST","REQUEST","Request","Req","useType","useConverter","mapParamsOptions","Next","Err","mapReturnedResponse","collection","PlatformTest","DITest","configure","mod","platformBuilder","inject","targets","func","hasInjector","createRequest","types","createResponse","content","createRequestContext","createRegistry","onInvoke"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOA,MAAMA,OAAO,GAAGC,OAAO,CAACC,GAAR,EAAhB;AAEA;;;;IAOaC,qBAAqB,6BAAlC,MAAaA,qBAAb,SAA2CC,eAA3C;AACEC,EAAAA;AACE,UAAM;AACJL,MAAAA,OADI;AAEJM,MAAAA,GAAG,EAAGL,OAAO,CAACK,GAAR,CAAYC,QAAZ,IAAgCC,GAAG,CAACC,GAFtC;AAGJC,MAAAA,QAAQ,EAAE,IAHN;AAIJC,MAAAA,SAAS,EAAE,KAJP;AAKJC,MAAAA,MAAM,EAAE;AACN,SAACC,YAAY,CAACC,UAAd,GAA2BC,aAAa,CAACC;AADnC,OALJ;AAQJC,MAAAA,MAAM,EAAE;AACNC,QAAAA,KAAK,EAAE,KADD;AAENC,QAAAA,KAAK,EAAE,MAFD;AAGNC,QAAAA,UAAU,EAAE,IAHN;AAINC,QAAAA,eAAe,EAAEpB,OAAO,CAACK,GAAR,CAAYC,QAAZ,KAAyBC,GAAG,CAACc,IAA7B,GAAoC,CAApC,GAAwC;AAJnD,OARJ;AAcJC,MAAAA,MAAM,EAAE;AACNC,QAAAA,UAAU,EAAE;AADN,OAdJ;AAiBJC,MAAAA,KAAK,EAAE;AACL,iBAAS;AADJ,OAjBH;AAoBJC,MAAAA,OAAO,EAAE,CAAC,cAAD,EAAiB,cAAjB,CApBL;AAqBJC,MAAAA,cAAc,EAAE,CAAC,wBAAD,EAA2B,6BAA3B,EAA0D,gCAA1D;AArBZ,KAAN;AAuBD;;AAEU,MAAPC,OAAO;AACT,WAAO,KAAKC,MAAL,CAAY,SAAZ,CAAP;AACD;;AAEU,MAAPD,OAAO,CAACE,CAAD;AACT,SAAKC,MAAL,CAAY,SAAZ,EAAuBD,CAAvB;AACD;;AAEU,MAAP9B,OAAO;AACT,WAAO,KAAK6B,MAAL,CAAY,SAAZ,CAAP;AACD;;AAEU,MAAP7B,OAAO,CAACgC,KAAD;AACT,SAAKD,MAAL,CAAY,SAAZ,EAAuBC,KAAvB;AACD;;AAEO,MAAJC,IAAI;AACN,WAAO,KAAKvB,QAAZ;AACD;;AAEO,MAAJuB,IAAI,CAACD,KAAD;AACN,SAAKtB,QAAL,GAAgBsB,KAAhB;AACD;;AAEe,MAAZE,YAAY;AACd,WAAO,KAAKL,MAAL,CAAY,cAAZ,CAAP;AACD;;AAEe,MAAZK,YAAY,CAACF,KAAD;AACd,SAAKD,MAAL,CAAY,cAAZ,EAA4BC,KAA5B;AACD;;AAEW,MAARtB,QAAQ;AACV,WAAO,KAAKmB,MAAL,CAAY,UAAZ,CAAP;AACD;;AAEW,MAARnB,QAAQ,CAACsB,KAAD;AACV,SAAKD,MAAL,CAAY,UAAZ,EAAwBC,KAAxB;AACD;;AAEY,MAATrB,SAAS;AACX,WAAO,KAAKkB,MAAL,CAAY,WAAZ,CAAP;AACD;;AAEY,MAATlB,SAAS,CAACqB,KAAD;AACX,SAAKD,MAAL,CAAY,WAAZ,EAAyBC,KAAzB;AACD;;AAEM,MAAH1B,GAAG;AACL,WAAO,KAAKuB,MAAL,CAAY,KAAZ,CAAP;AACD;;AAEM,MAAHvB,GAAG,CAAC0B,KAAD;AACL,SAAKD,MAAL,CAAY,KAAZ,EAAmBC,KAAnB;AACD;;AAEQ,MAALP,KAAK;AACP,WAAO,KAAKU,GAAL,CAAS,OAAT,CAAP;AACD;;AAEQ,MAALV,KAAK,CAACO,KAAD;AACP,SAAKD,MAAL,CAAY,OAAZ,EAAqBC,KAArB;AACD;;AAEiB,MAAdL,cAAc;AAChB,WAAO,KAAKS,OAAL,CAAa,KAAKP,MAAL,CAAY,gBAAZ,CAAb,CAAP;AACD;;AAEiB,MAAdF,cAAc,CAACK,KAAD;AAChB,SAAKD,MAAL,CAAY,gBAAZ,EAA8BC,KAA9B;AACD;;AAEU,MAAPK,OAAO;AACT,WAAO,KAAKR,MAAL,CAAY,SAAZ,KAA0B,KAAKA,MAAL,CAAY,aAAZ,CAA1B,IAAwD,EAA/D;AACD;;AAEU,MAAPQ,OAAO,CAACL,KAAD;AACT,SAAKD,MAAL,CAAY,SAAZ,EAAuBC,KAAvB;AACD;;AAEc,MAAXM,WAAW;AACb,WAAO,KAAKT,MAAL,CAAY,aAAZ,CAAP;AACD;;AAEc,MAAXS,WAAW,CAACN,KAAD;AACb,SAAKD,MAAL,CAAY,aAAZ,EAA2BC,KAAK,IAAI,EAApC;AACD;;AAEQ,MAALd,KAAK;AACP,WAAO,KAAKD,MAAL,CAAYE,KAAZ,KAAsB,OAA7B;AACD;;AAEQ,MAALD,KAAK,CAACA,KAAD;AACP,SAAKD,MAAL,gBAAkB,KAAKA,MAAvB;AAA+BE,MAAAA,KAAK,EAAED,KAAK,GAAG,OAAH,GAAa;AAAxD;AACD;;AAEY,MAATqB,SAAS;AACX,WAAO,KAAKJ,GAAL,CAAS,WAAT,KAAyB,EAAhC;AACD;;AAEY,MAATI,SAAS,CAACC,OAAD;AACX,SAAKT,MAAL,CAAY,WAAZ,EAAyBS,OAAzB;AACD;;AAES,MAANvB,MAAM;AACR,WAAO,KAAKkB,GAAL,CAAS,QAAT,CAAP;AACD;;AAES,MAANlB,MAAM,CAACe,KAAD;AACR,UAAMf,MAAM,gBAAO,KAAKA,MAAZ,EAAuBe,KAAvB,CAAZ;;AACAf,IAAAA,MAAM,CAACC,KAAP,GAAeD,MAAM,CAACE,KAAP,KAAiB,OAAhC;AAEA,SAAKY,MAAL,CAAY,QAAZ,EAAsBd,MAAtB;AACA,SAAKc,MAAL,CAAY,OAAZ,EAAqBd,MAAM,CAACC,KAA5B;;AAEA,QAAID,MAAM,CAACwB,MAAX,EAAmB;AACjBC,MAAAA,IAAI,CAACC,SAAL,CAAeC,GAAf,CAAmB,QAAnB,EAA6B;AAC3BC,QAAAA,IAAI,EAAE,QADqB;AAE3BC,QAAAA,MAAM,EAAE,CAAC,MAAD,EAAS,OAAT,CAFmB;AAG3BC,QAAAA,MAAM,EAAE;AACNF,UAAAA,IAAI,EAAE,SADA;AAENG,UAAAA,OAAO,EAAE/B,MAAM,CAACwB;AAFV;AAHmB,OAA7B;AASAC,MAAAA,IAAI,CAACC,SAAL,CAAeC,GAAf,CAAmB,QAAnB,EAA6B;AAC3BE,QAAAA,MAAM,EAAE,CAAC,OAAD,EAAU,OAAV,EAAmB,OAAnB,EAA4B,MAA5B,CADmB;AAE3BD,QAAAA,IAAI,EAAE,QAFqB;AAG3BE,QAAAA,MAAM,EAAE;AACNF,UAAAA,IAAI,EAAE,SADA;AAENG,UAAAA,OAAO,EAAE/B,MAAM,CAACwB;AAFV;AAHmB,OAA7B;AAQD;AACF;;AAEU,MAAPf,OAAO;AACT,WAAO,KAAKS,GAAL,CAAS,SAAT,CAAP;AACD;;AAEU,MAAPT,OAAO,CAACA,OAAD;AACT,SAAKK,MAAL,CAAY,SAAZ,EAAuBL,OAAvB;AACD;;AAEuB,MAApBuB,oBAAoB;AACtB,WAAO,KAAKd,GAAL,CAAS,gCAAT,MAA+C,QAAtD;AACD;AAED;;;;;;;AAKkC,SAAnBe,mBAAmB,CAACC,WAAD;AAChC,QAAIC,OAAO,GAAG,SAAd;AACA,QAAInB,IAAI,GAAGkB,WAAX;;AAEA,QAAI,OAAOA,WAAP,KAAuB,QAAvB,IAAmCA,WAAW,CAACE,OAAZ,CAAoB,GAApB,IAA2B,CAAC,CAAnE,EAAsE;AACpE,OAACD,OAAD,EAAUnB,IAAV,IAAkBkB,WAAW,CAACG,KAAZ,CAAkB,GAAlB,CAAlB;AACArB,MAAAA,IAAI,GAAG,CAACA,IAAR;AACD;;AAED,WAAO;AAACmB,MAAAA,OAAD;AAAUnB,MAAAA,IAAI,EAAEA;AAAhB,KAAP;AACD;AAED;;;;;;AAIAsB,EAAAA,WAAW;AACT,WAAOC,uBAAqB,CAACN,mBAAtB,CAA0C,KAAKrB,MAAL,CAAY,UAAZ,CAA1C,CAAP;AACD;AAED;;;;;;AAIA4B,EAAAA,WAAW,CAACC,QAAD;AACT,SAAK3B,MAAL,CAAY,UAAZ,KAA2B2B,QAAQ,CAACN,WAAWM,QAAQ,CAACzB,MAAxD;AACD;AAED;;;;;;AAIA0B,EAAAA,YAAY;AACV,WAAOH,uBAAqB,CAACN,mBAAtB,CAA0C,KAAKrB,MAAL,CAAY,WAAZ,CAA1C,CAAP;AACD;AAED;;;;;;AAIA+B,EAAAA,YAAY,CAACF,QAAD;AACV,SAAK3B,MAAL,CAAY,WAAZ,KAA4B2B,QAAQ,CAACN,WAAWM,QAAQ,CAACzB,MAAzD;AACD;;;AA9NU9B,qBAAqB,yCAJjC0D,UAAU,CAAC;AACVC,EAAAA,KAAK,EAAE/C,aAAa,CAACC,SADX;AAEV+C,EAAAA,MAAM,EAAE;AAFE,CAAD,yCAIE5D,sBAAA;;ACdb;;;SAGgB6D,uBAAuBC;AACrC,SAAQC,GAAD;AACLA,IAAAA,GAAG,CAACD,QAAJ,GAAeA,QAAf;AACD,GAFD;AAGD;;ACHD;;;;;IAKaE,6BAA6B,GAA1C,MAAaA,6BAAb;AAISC,EAAAA,GAAG,CAAYF,GAAZ;AACR,UAAM;AAACD,MAAAA,QAAD;AAAWI,MAAAA;AAAX,QAAsBH,GAA5B;AACA,UAAMI,KAAK,GAAGC,IAAI,CAAC,CAAC,CAAAN,QAAQ,QAAR,YAAAA,QAAQ,CAAE9B,GAAV,CAAc,aAAd,MAAgC,EAAjC,EAAqCqC,MAArC,CAA4C,KAAKlC,WAAjD,CAAD,CAAlB;;AAEA,QAAIgC,KAAK,CAACG,MAAN,IAAgB,CAACJ,OAAO,CAACK,OAAR,CAAgBJ,KAAhB,CAArB,EAA6C;AAC3C,YAAM,IAAIK,aAAJ,CAAkBL,KAAK,CAACM,IAAN,CAAW,IAAX,CAAlB,CAAN;AACD;AACF;;;;AATDC,YADCC,QAAQ,CAAC,aAAD,EAAgB,EAAhB,qGACT;;AAEAD,YAAYE,WAAAC,OAAO,oLAAnB;;AAJWb,6BAA6B,eADzCc,UAAU,KACEd,8BAAA;;ACXb;;;AAGO,MAAMe,mBAAmB,GAAG;AACjC;AACA,WAASC,aAAT;;;AAGA,WAASf,GAAT;AACE,WAAO,IAAP;AACD;;AAEDe,EAAAA,aAAa,CAACf,GAAd,GAAoBA,GAApB;AACAe,EAAAA,aAAa,CAACC,GAAd,GAAoBhB,GAApB;AACAe,EAAAA,aAAa,CAAChD,GAAd,GAAoBiC,GAApB;AACAe,EAAAA,aAAa,CAACE,KAAd,GAAsBjB,GAAtB;AACAe,EAAAA,aAAa,CAACG,IAAd,GAAqBlB,GAArB;AACAe,EAAAA,aAAa,CAACI,GAAd,GAAoBnB,GAApB;AACAe,EAAAA,aAAa,CAACK,IAAd,GAAqBpB,GAArB;AACAe,EAAAA,aAAa,CAACM,MAAd,GAAuBrB,GAAvB;AACAe,EAAAA,aAAa,CAAC3C,OAAd,GAAwB4B,GAAxB;AAEA,SAAOe,aAAP;AACD,CApBM;;MCQMO,4BAA4BC;AAIvCtF,EAAAA,YAAY;AAACuF,IAAAA,IAAD;AAAOC,IAAAA;AAAP;AACV;AACA,SAAKD,IAAL,GAAYA,IAAZ;AACA,SAAKC,GAAL,GAAWA,GAAX;AACD;;AAEDC,EAAAA,MAAM;AACJ,UAAM;AAACF,MAAAA;AAAD,QAAS,IAAf;;AAEA,QAAI,EAACA,IAAD,YAACA,IAAI,CAAEE,MAAN,EAAD,CAAJ,EAAqB;AACnB,UAAIF,IAAI,QAAJ,IAAAA,IAAI,CAAEvB,OAAN,CAAc0B,SAAd,MAA6BH,IAA7B,YAA6BA,IAAI,CAAEI,QAAN,CAAeF,MAAf,EAAjC,EAA0D;AACxD,aAAKG,OAAL;;AAEA,YAAI,KAAKC,MAAL,KAAgBC,kBAAkB,CAACC,OAAvC,EAAgD;AAC9C,eAAKF,MAAL,GAAcC,kBAAkB,CAACE,QAAjC;AACD;AACF;AACF;;AAED,WAAO,MAAMP,MAAN,EAAP;AACD;;AAES,QAAJQ,IAAI,CAACC,EAAD;AACR,WAAO,MAAMD,IAAN,CAAW,MAAMC,EAAE,CAAC,IAAD,CAAnB,CAAP;AACD;;AAEDN,EAAAA,OAAO;AACL;AACA,WAAO,KAAKL,IAAZ;AACD;;AAEDY,EAAAA,kBAAkB,CAACvG,OAAD;AAChB,WAAOA,OAAO,KAAK,KAAK2F,IAAL,CAAUa,WAAV,EAAnB;AACD;;;;AChDH;;;IAGYC;;AAAZ,WAAYA;AACVA,EAAAA,qBAAA,WAAA;AACAA,EAAAA,uBAAA,aAAA;AACAA,EAAAA,yBAAA,eAAA;AACAA,EAAAA,6BAAA,mBAAA;AACAA,EAAAA,qBAAA,YAAA;AACAA,EAAAA,qBAAA,mBAAA;AACAA,EAAAA,yBAAA,uBAAA;AACD,CARD,EAAYA,WAAW,KAAXA,WAAW,KAAA,CAAvB;;MCaaC;AAYXtG,EAAAA,YAAYmC;AARH,mBAAA,GAAsB,KAAtB;AACA,aAAA,GAAoBkE,WAAW,CAACE,MAAhC;AACA,wBAAA,GAA2B,KAA3B;AAOP,UAAM;AAACC,MAAAA,MAAD;AAASC,MAAAA,KAAT;AAAgBC,MAAAA,WAAhB;AAA6BlE,MAAAA,IAA7B;AAAmCiB,MAAAA,KAAnC;AAA0CkD,MAAAA;AAA1C,QAA0DxE,OAAhE;AAEA,SAAKK,IAAL,GAAYA,IAAI,IAAIgE,MAAM,CAAChE,IAAf,IAAuB6D,WAAW,CAACE,MAA/C;AACA,SAAK9C,KAAL,GAAaA,KAAK,IAAI/C,aAAa,CAACC,SAApC;AACA,SAAKgG,YAAL,GAAoBA,YAAY,IAAI,EAApC;AACA,UAAMC,OAAO,GAAGF,WAAW,GAAGF,MAAM,CAACK,SAAP,CAAiBH,WAAjB,CAAH,GAAmCF,MAA9D;;AAEA,QAAIE,WAAJ,EAAiB;AACf,WAAKF,MAAL,GAAcA,MAAd;AACA,WAAKC,KAAL,GAAaA,KAAb;AACA,WAAKC,WAAL,GAAmBA,WAAnB;AACA,WAAKI,eAAL,GAAuB,KAAKC,YAAL,CAAkBC,UAAU,CAACC,OAA7B,CAAvB;;AAEA,UAAI,KAAKF,YAAL,CAAkBC,UAAU,CAACE,GAA7B,CAAJ,EAAuC;AACrC,aAAK1E,IAAL,GAAY6D,WAAW,CAACc,cAAxB;AACD;;AAED,WAAKC,UAAL,GAAkBC,aAAa,CAACC,SAAd,CAAwBd,MAAxB,EAAuCE,WAAvC,EAAoDtC,MAApD,GAA6D,CAA/E;AACD,KAXD,MAWO;AACL,WAAKwC,OAAL,GAAeA,OAAf;AACD;;AAED,QAAI,CAAC,KAAKQ,UAAV,EAAsB;AACpB,UAAIR,OAAO,CAACxC,MAAR,KAAmB,CAAvB,EAA0B;AACxB,aAAK5B,IAAL,GAAY6D,WAAW,CAACkB,UAAxB;AACD;;AACD,WAAKT,eAAL,GAAuBF,OAAO,CAACxC,MAAR,IAAkB,CAAzC;AACD;AACF;;AAEgB,MAAboD,aAAa;AACf,WAAO,KAAKhF,IAAL,KAAc6D,WAAW,CAACc,cAA1B,IAA4C,KAAK3E,IAAL,KAAc6D,WAAW,CAACkB,UAA7E;AACD;;AAEMD,EAAAA,SAAS;AACd,WAAOD,aAAa,CAACC,SAAd,CAAwB,KAAKd,MAA7B,EAAqC,KAAKE,WAA1C,KAA0D,EAAjE;AACD;;AAEMK,EAAAA,YAAY,CAACU,SAAD;AACjB,WAAO,KAAKH,SAAL,GAAiBI,SAAjB,CAA4BC,CAAD,IAAOA,CAAC,CAACF,SAAF,KAAgBA,SAAlD,IAA+D,CAAC,CAAvE;AACD;;AAEMG,EAAAA,OAAO;;;AACZ,WAAO,4BAAKjB,YAAL,wCAAmBiB,OAAnB,KAA8B,KAArC;AACD;;AAEDC,EAAAA,QAAQ;AACN,WAAO,CAAC,KAAKrB,MAAL,IAAesB,MAAM,CAAC,KAAKtB,MAAN,CAAtB,EAAqC,KAAKE,WAA1C,EAAuDqB,MAAvD,CAA8DC,OAA9D,EAAuEzD,IAAvE,CAA4E,GAA5E,CAAP;AACD;;;;;ACzDH;;;;;;;;;;;;;;;;;IAiBa0D,gBAAgB,wBAA7B,MAAaA,gBAAb,SAAsCC,eAAtC;AAKElI,EAAAA,YAAYmC;AACV;AACEgG,MAAAA,KAAK,EAAEC,KAAK,CAACC,UAAN,CAAiBlG,OAAO,CAACqE,MAAzB,EAAiCrE,OAAO,CAACuE,WAAzC,CADT;AAEE4B,MAAAA,UAAU,EAAEC,YAAY,CAACpG,OAAO,CAACqE,MAAT,EAAiBrE,OAAO,CAACuE,WAAzB;AAF1B,OAGKvE,OAHL;AALK,0BAAA,GAA2B,EAA3B;AACA,oBAAA,GAAqB,EAArB;AACA,yBAAA,GAA0B,EAA1B;AASL,UAAM;AAACqG,MAAAA,iBAAiB,GAAG,EAArB;AAAyBC,MAAAA,WAAW,GAAG,EAAvC;AAA2CC,MAAAA,gBAAgB,GAAG;AAA9D,QAAoEvG,OAA1E;AAEA,SAAKwG,KAAL,CAAWD,gBAAX;AACA,SAAKE,MAAL,CAAYJ,iBAAZ;AACA,SAAKzE,GAAL,CAAS0E,WAAT;AACD;;AAEa,MAAVI,UAAU;AACZ,WAAOf,MAAM,CAAC,KAAKrB,KAAN,CAAb;AACD;;AAES,MAANqC,MAAM;AACR,WAAQC,KAAK,CAACC,IAAN,CAAW,KAAKC,QAAL,CAAcC,MAAd,EAAX,CAAR;AACD;AAED;;;;;AAGa,MAATC,SAAS;AACX,WAAO,KAAKC,UAAZ;AACD;;AAEiB,MAAdC,cAAc;AAChB,WAAO,KAAKF,SAAL,CAAeE,cAAtB;AACD;;AAEO,MAAJC,IAAI;AACN,WAAO,KAAKnB,KAAL,CAAWrG,GAAX,CAAe,MAAf,CAAP;AACD;;AAEO,MAAJwH,IAAI,CAACA,IAAD;AACN,SAAKnB,KAAL,CAAW5F,GAAX,CAAe,MAAf,EAAuB+G,IAAvB;AACD;;AAEc,MAAXrH,WAAW;AACb,WAAO,KAAKkG,KAAL,CAAWrG,GAAX,CAAyB,aAAzB,EAAwC,EAAxC,CAAP;AACD;;AAEc,MAAXG,WAAW,CAACgC,KAAD;AACb,SAAKkE,KAAL,CAAW5F,GAAX,CAAe,aAAf,EAA8B0B,KAA9B;AACD;AAED;;;;;;;AAKmB,SAAZsF,YAAY,CAAC/C,MAAD;AACjB,UAAMgD,UAAU,GAAGC,mBAAmB,CAAmBjD,MAAnB,CAAtC;AAEA,WAAOuC,KAAK,CAACC,IAAN,CAAWQ,UAAU,CAACN,MAAX,EAAX,EAAgCQ,GAAhC,CAAqC9F,QAAD;AACzCA,MAAAA,QAAQ,GAAGA,QAAQ,CAAC+F,KAAT,EAAX;AACA/F,MAAAA,QAAQ,CAAC6C,KAAT,GAAiBmD,OAAO,CAACpD,MAAD,CAAxB;AAEA,aAAO5C,QAAP;AACD,KALM,CAAP;AAMD;AAED;;;;;;;;AAMU,SAAH9B,GAAG,CAAC0E,MAAD,EAAoBE,WAApB,EAAkD4B,UAAlD;AACRA,IAAAA,UAAU,GAAGA,UAAU,IAAIC,YAAY,CAACsB,WAAW,CAACrD,MAAD,CAAZ,EAAsBE,WAAtB,CAAvC;AAEA,WAAOwB,eAAe,CAACc,IAAhB,CAAuCa,WAAW,CAACrD,MAAD,CAAlD,EAA4DE,WAA5D,EAAyE4B,UAAzE,CAAP;AACD;;AAEDwB,EAAAA,gBAAgB,CAACC,MAAD,EAAiBC,IAAjB,EAAwC7H,UAAe,EAAvD;AACd,WAAO,KAAKgH,SAAL,CAAeW,gBAAf,CAAgCC,MAAhC,EAAwCC,IAAxC,EAA8C7H,OAA9C,CAAP;AACD;AAED;;;;;;;;AAMAL,EAAAA,GAAG,CAAUmI,GAAV;AACD,UAAMC,SAAS,GAAG9B,KAAK,CAACY,IAAN,CAAW,KAAKxC,MAAhB,EAAwB1E,GAAxB,CAA4BmI,GAA5B,CAAlB;AAEA,WAAOE,SAAS,CAAID,SAAJ,EAAe,KAAK/B,KAAL,CAAWrG,GAAX,CAAemI,GAAf,CAAf,CAAhB;AACD;AAED;;;;;;;AAKOrB,EAAAA,MAAM,CAACwB,IAAD;AACX,SAAK5B,iBAAL,GAAyB,KAAKA,iBAAL,CAAuBrE,MAAvB,CAA8BiG,IAA9B,EAAoCrC,MAApC,CAA2CsC,UAA3C,CAAzB;AAEA,WAAO,IAAP;AACD;AAED;;;;;;;AAKO1B,EAAAA,KAAK,CAACyB,IAAD;AACV,SAAK1B,gBAAL,GAAwB,KAAKA,gBAAL,CAAsBvE,MAAtB,CAA6BiG,IAA7B,EAAmCrC,MAAnC,CAA0CsC,UAA1C,CAAxB;AAEA,WAAO,IAAP;AACD;AAED;;;;;;AAIOtG,EAAAA,GAAG,CAACqG,IAAD;AACR,SAAK3B,WAAL,GAAmB,KAAKA,WAAL,CAAiBtE,MAAjB,CAAwBiG,IAAxB,EAA8BrC,MAA9B,CAAqCsC,UAArC,CAAnB;AAEA,WAAO,IAAP;AACD;;AAEMV,EAAAA,KAAK;AACV,UAAM/F,QAAQ,GAAG,IAAI0G,kBAAJ,cACZ,IADY;AAEf9D,MAAAA,MAAM,EAAE,KAAKA,MAFE;AAGfE,MAAAA,WAAW,EAAE,KAAKA,WAHH;AAIf4B,MAAAA,UAAU,EAAE,KAAKA,UAJF;AAKfH,MAAAA,KAAK,EAAE,KAAKA,KALG;AAMfc,MAAAA,QAAQ,EAAE,KAAKA;AANA,OAAjB;AASArF,IAAAA,QAAQ,CAAC2G,cAAT,GAA0B,KAAKA,cAA/B;AACA3G,IAAAA,QAAQ,CAAC4G,KAAT,GAAiB,KAAKA,KAAtB;AACA5G,IAAAA,QAAQ,CAACwF,UAAT,GAAsB,KAAKD,SAA3B;AACAvF,IAAAA,QAAQ,CAAC6G,OAAT,GAAmB,KAAKA,OAAxB;AACA7G,IAAAA,QAAQ,CAAC6E,WAAT,GAAuB,CAAC,GAAG,KAAKA,WAAT,CAAvB;AACA7E,IAAAA,QAAQ,CAAC8E,gBAAT,GAA4B,CAAC,GAAG,KAAKA,gBAAT,CAA5B;AACA9E,IAAAA,QAAQ,CAAC4E,iBAAT,GAA6B,CAAC,GAAG,KAAKA,iBAAT,CAA7B;AAEA,WAAO5E,QAAP;AACD;;;AArJUqE,gBAAgB,oCAD5ByC,mBAAmB,CAACC,cAAc,CAACC,MAAhB,+CACP3C,iBAAA;;AC/Bb,SAAS4C,UAAT,CAAoBC,KAApB;AACE,SAAOA,KAAK,YAAYxE,eAAxB;AACD;AAED;;;;;SAGgByE,sBACdC,UACAC,KACAtE,eAA6C;AAE7C,MAAIkE,UAAU,CAACI,GAAD,CAAd,EAAqB;AACnB,WAAOA,GAAP;AACD;;AAED,MAAI9I,OAAJ;;AAEA,MAAI8I,GAAG,YAAYhD,gBAAnB,EAAqC;AACnC,UAAMiD,QAAQ,GAAGF,QAAQ,CAACG,WAAT,CAAqBF,GAAG,CAACxE,KAAzB,CAAjB;AAEAtE,IAAAA,OAAO,GAAG;AACRsE,MAAAA,KAAK,EAAEyE,QAAQ,CAACzE,KADR;AAERD,MAAAA,MAAM,EAAE0E,QAAQ,CAACE,QAFT;AAGR3H,MAAAA,KAAK,EAAEyH,QAAQ,CAACzH,KAHR;AAIRjB,MAAAA,IAAI,EAAE6D,WAAW,CAACgF,QAJV;AAKR3E,MAAAA,WAAW,EAAEuE,GAAG,CAACvE;AALT,KAAV;AAOD,GAVD,MAUO;AACL,UAAMwE,QAAQ,GAAGF,QAAQ,CAACG,WAAT,CAAqBF,GAArB,CAAjB;;AAEA,QAAIC,QAAJ,EAAc;AACZ/I,MAAAA,OAAO,GAAG;AACRsE,QAAAA,KAAK,EAAEyE,QAAQ,CAACzE,KADR;AAERD,QAAAA,MAAM,EAAE0E,QAAQ,CAACE,QAFT;AAGR3H,QAAAA,KAAK,EAAEyH,QAAQ,CAACzH,KAHR;AAIRjB,QAAAA,IAAI,EAAE6D,WAAW,CAACiF,UAJV;AAKR5E,QAAAA,WAAW,EAAE;AALL,OAAV;AAOD,KARD,MAQO;AACLvE,MAAAA,OAAO,GAAG;AACRqE,QAAAA,MAAM,EAAEyE;AADA,OAAV;AAGD;AACF;;AAED9I,EAAAA,OAAO,CAACwE,YAAR,GAAuBA,YAAvB;AAEA,SAAO,IAAIL,eAAJ,CAAoBnE,OAApB,CAAP;AACD;;ACnDD,SAASoJ,YAAT,CAAsBC,WAAtB,EAAmFC,OAAnF;AACE,SAAOC,MAAM,CAACC,OAAP,CAAeH,WAAf,EAA4BI,MAA5B,CAAmC,CAACH,OAAD,EAAU,CAACxB,GAAD,EAAM4B,IAAN,CAAV;AACxC5B,IAAAA,GAAG,GAAGA,GAAG,CAAC6B,WAAJ,EAAN;AACA,wBACKL,OADL;AAEE,OAACxB,GAAD,GAAOwB,OAAO,CAACxB,GAAD,CAAP,KAAiB8B,SAAjB,GAA6BC,MAAM,CAACH,IAAI,CAACI,OAAN,CAAnC,GAAoDR,OAAO,CAACxB,GAAD;AAFpE;AAID,GANM,EAMJwB,OANI,CAAP;AAOD;AAED;;;;;SAGgBS,mBAAmBrI;AACjC,QAAM;AAAC8B,IAAAA,QAAD;AAAW/B,IAAAA;AAAX,MAAuBC,GAA7B;AACA,QAAM;AAACsF,IAAAA;AAAD,MAAcvF,QAApB;;AAEA,MAAI+B,QAAQ,CAACF,MAAT,EAAJ,EAAuB;AACrB;AACD;;AAED,MAAI,CAACE,QAAQ,CAACwG,SAAT,EAAL,EAA2B;AACzB;AACAxG,IAAAA,QAAQ,CAACE,MAAT,CAAgBsD,SAAS,CAACiD,SAAV,EAAhB;AACD;;AAED,QAAMC,UAAU,GAAG1G,QAAQ,CAAC0G,UAA5B;AACA,QAAMZ,OAAO,GAAGtC,SAAS,CAACmD,YAAV,CAAuB3G,QAAQ,CAAC0G,UAAhC,CAAhB;AACA,QAAME,aAAa,GAAGhB,YAAY,CAACE,OAAD,EAAU9F,QAAQ,CAAC6G,UAAT,EAAV,CAAlC;AAEA7G,EAAAA,QAAQ,CAAC8G,UAAT,CAAoBF,aAApB;;AAEA,MAAIpD,SAAS,CAACuD,aAAV,CAAwBL,UAAxB,CAAJ,EAAyC;AACvC1G,IAAAA,QAAQ,CAACgH,QAAT,CAAkBN,UAAlB,EAA8BL,MAAM,CAACO,aAAa,CAAC,UAAD,CAAd,CAApC;AACD;AACF;;ACfD;;;;;IAOaK,eAAe,GAA5B,MAAaA,eAAb;AAIE5M,EAAAA,YAAsBgL,UAAqClC;AAArC,iBAAA,GAAAkC,QAAA;AAAqC,eAAA,GAAAlC,MAAA;AAA0B;AAErF;;;;;;;AAKA+D,EAAAA,aAAa,CAAC/B,KAAD,EAAkD3I,UAAwC,EAA1F;AACX,WAAO,KAAK2K,gBAAL,CAAsB/B,qBAAqB,CAAC,KAAKC,QAAN,EAAgBF,KAAhB,EAAuB3I,OAAvB,CAA3C,CAAP;AACD;AAED;;;;;;;AAKA4K,EAAAA,mBAAmB,CAAC7B,QAAD,EAAqBxE,WAArB;AACjB,UAAME,OAAO,GAAG,KAAKoG,cAAL,CACd,IAAI1G,eAAJ,CAAoB;AAClBG,MAAAA,KAAK,EAAEyE,QAAQ,CAAC+B,OADE;AAElBzG,MAAAA,MAAM,EAAE0E,QAAQ,CAACE,QAFC;AAGlB5I,MAAAA,IAAI,EAAE6D,WAAW,CAAC6G,MAHA;AAIlBzJ,MAAAA,KAAK,EAAEyH,QAAQ,CAACzH,KAJE;AAKlBiD,MAAAA;AALkB,KAApB,CADc,CAAhB;AAUA,WAAO,gBAAOnB,IAAP,EAA8B4H,IAA9B;AAAA,aACLvG,OAAO,CAAC;AACNrB,QAAAA,IADM;AAEN4H,QAAAA;AAFM,OAAD,CADF;AAAA,KAAP;AAKD;AAED;;;;;;;;AAMW,QAALC,KAAK,CAACC,IAAD,EAAYxJ,GAAZ;AACT,UAAM;AAAC8B,MAAAA;AAAD,QAAa9B,GAAnB;;AAEA,QAAI,CAAC8B,QAAQ,CAACF,MAAT,EAAL,EAAwB;AACtB4H,MAAAA,IAAI,GAAG,MAAM,KAAKC,cAAL,CAAoBC,SAApB,CAA8BF,IAA9B,EAAoCxJ,GAApC,CAAb;AACAwJ,MAAAA,IAAI,GAAG,MAAM,KAAKC,cAAL,CAAoBE,SAApB,CAA8BH,IAA9B,EAAoCxJ,GAApC,CAAb;AACA8B,MAAAA,QAAQ,CAAC8H,IAAT,CAAcJ,IAAd;AACD;AACF;;AAEDL,EAAAA,cAAc,CAACU,QAAD;;;AACZ,QAAIA,QAAQ,CAAClL,IAAT,KAAkB6D,WAAW,CAACsH,MAAlC,EAA0C;AACxC,aAAO,gBAAOlK,KAAP;AACL;AACA,eAAO,KAAI,CAACmK,YAAL,cACFnK,KADE;AAELmD,UAAAA,OAAO,EAAE,MAAM8G,QAAQ,CAAC9G,OAAT,CAAiBnD,KAAK,CAAC8B,IAAvB,CAFV;AAGLmI,UAAAA;AAHK,WAAP;AAKD,OAPD;AAQD;;AAED,UAAMG,OAAO,GAAG,KAAK/E,MAAL,CAAYkE,cAAZ,CAA4C;AAC1DvG,MAAAA,KAAK,EAAEiH,QAAQ,CAACjH,KAD0C;AAE1DC,MAAAA,WAAW,EAAEgH,QAAQ,CAAChH,WAFoC;AAG1DoH,MAAAA,aAAa,EAAEJ,QAAQ,CAACtG,UAAT,GAAsB2E,SAAtB,GAAkC,KAAKgC,cAAL,CAAoBL,QAApB;AAHS,KAA5C,CAAhB;AAMA,WAAO,gBAAOjK,KAAP;AACL,YAAMmD,OAAO,GAAG,MAAMiH,OAAtB;;AAEA,aAAO,KAAI,CAACG,SAAL,cACFvK,KADE;AAELmD,QAAAA,OAFK;AAGL8G,QAAAA;AAHK,SAAP;AAKD,KARD;AASD;;AAE2B,QAAZE,YAAY,CAACK,cAAD;AAC1B,UAAMA,cAAc,CAACrH,OAAf,CAAuBqH,cAAvB,CAAN;AAEA,WAAO,KAAKd,IAAL,CAAUc,cAAV,CAAP;AACD;AAED;;;;;;AAIyB,QAATD,SAAS,CAACC,cAAD;;;AACvB,UAAM;AAAC1I,MAAAA,IAAD;AAAOmI,MAAAA,QAAP;AAAiBlI,MAAAA,GAAjB;AAAsBoB,MAAAA;AAAtB,QAAiCqH,cAAvC;;AAEA,QAAI,CAAC1I,IAAL,EAAW;AACTlD,MAAAA,IAAI,CAAC6L,KAAL,CAAW;AACTC,QAAAA,IAAI,EAAE,cADG;AAETC,QAAAA,OAAO,4GAA4GV,QAAQ,CAAC7F,QAAT;AAF1G,OAAX;AAIA;AACD;;AAED,UAAMwG,QAAQ,GAAG,IAAIhJ,mBAAJ,CAAwB;AAACE,MAAAA,IAAD;AAAOC,MAAAA;AAAP,KAAxB,CAAjB;AAEA,WAAO,KAAKwF,QAAL,CAAcsD,YAAd,CAA2B/I,IAA3B,EAAiC;AACtC,UAAI;AACF,cAAM;AAACgJ,UAAAA,KAAD;AAAQlB,UAAAA,IAAR;AAAcxH,UAAAA,MAAd;AAAsB4F,UAAAA;AAAtB,YAAiC,MAAM4C,QAAQ,CAACpI,IAAT,CAAcW,OAAd,CAA7C;;AAEA,YAAI2H,KAAK,KAAKzI,kBAAkB,CAACE,QAAjC,EAA2C;AACzC,cAAIH,MAAJ,EAAY;AACVN,YAAAA,IAAI,CAACI,QAAL,CAAcE,MAAd,CAAqBA,MAArB;AACD;;AAED,cAAI4F,OAAJ,EAAa;AACXlG,YAAAA,IAAI,CAACI,QAAL,CAAc8G,UAAd,CAAyBhB,OAAzB;AACD;;AAED,cAAI4B,IAAI,KAAKtB,SAAb,EAAwB;AACtBxG,YAAAA,IAAI,CAAC8H,IAAL,GAAYA,IAAZ;AACD,WAXwC;;;AAczC,iBAAO,MAAM,MAAI,CAACmB,SAAL,CAAejJ,IAAI,CAAC8H,IAApB,EAA0BY,cAA1B,CAAb;AACD;AACF,OAnBD,CAmBE,OAAOQ,EAAP,EAAW;AACX,eAAO,MAAI,CAACC,OAAL,CAAaD,EAAb,EAAiBR,cAAjB,CAAP;AACD;AACF,KAvBM,CAAP;AAwBD;;AAEsB,QAAPS,OAAO,CAACD,EAAD,EAAYR,cAAZ;;;AACrB,UAAM;AAACd,MAAAA,IAAD;AAAO5H,MAAAA,IAAP;AAAamI,MAAAA;AAAb,QAAyBO,cAA/B;AACA1I,IAAAA,IAAI,CAAC8H,IAAL,GAAYoB,EAAZ;;AAEA,QAAI,CAACtB,IAAL,EAAW;AACT,YAAMsB,EAAN;AACD;;;AAGD,QAAI,EAAClJ,IAAD,8BAACA,IAAI,CAAEI,QAAP,aAAC,eAAgBgJ,aAAjB,KAAkCpJ,IAAI,CAACI,QAAL,CAAcgJ,aAAd,EAAtC,EAAqE;AACnEtM,MAAAA,IAAI,CAACuM,IAAL,CAAU;AACRT,QAAAA,IAAI,EAAE,cADE;AAERC,QAAAA,OAAO,sGAAsGV,QAAQ,CAAC7F,QAAT,IAFrG;AAGRgH,QAAAA,KAAK,EAAEJ,EAAE,CAACI,KAHF;AAIRC,QAAAA,MAAM,EAAEL,EAJA;AAKRM,QAAAA,UAAU,EAAExJ,IAAI,CAACyJ;AALT,OAAV;AAQA;AACD;;AAED,WAAO7B,IAAI,IAAIA,IAAI,CAACsB,EAAD,CAAnB;AACD;AAED;;;;;;;;AAMyB,QAATD,SAAS,CAACnB,IAAD,EAAYY,cAAZ;AACvB,UAAM;AAACP,MAAAA,QAAD;AAAWnI,MAAAA,IAAX;AAAiB4H,MAAAA;AAAjB,QAAyBc,cAA/B;AAGA;;AACA,QAAI1I,IAAI,CAACvB,OAAL,CAAa0B,SAAb,MAA4BH,IAAI,CAACI,QAAL,CAAcF,MAAd,EAAhC,EAAwD;AACtD;AACD;;;AAGD,QAAIiI,QAAQ,CAAClL,IAAT,KAAkB6D,WAAW,CAACgF,QAAlC,EAA4C;AAC1C,WAAKoB,UAAL,CAAgBlH,IAAhB;AACD;;;AAGD,QAAI8E,UAAU,CAACgD,IAAD,CAAV,IAAoB,CAAC4B,QAAQ,CAAC5B,IAAD,CAAjC,EAAyC;AACvC,aAAO,KAAK6B,sBAAL,CAA4B7B,IAA5B,EAAkC9H,IAAlC,EAAwC4H,IAAxC,CAAP;AACD;;AAED,QAAIO,QAAQ,CAAC9F,OAAT,EAAJ,EAAwB;AACtB,aAAO,KAAKwF,KAAL,CAAWC,IAAX,EAAiB9H,IAAjB,CAAP;AACD;;AAED,WAAO,KAAK4H,IAAL,CAAUc,cAAV,CAAP;AACD;AAED;;;;;;;;;AAOUiB,EAAAA,sBAAsB,CAACC,UAAD,EAAkBtL,GAAlB,EAAwCsJ,IAAxC;AAC9B,WAAOgC,UAAU,CAACtL,GAAG,CAACuL,UAAJ,EAAD,EAAmBvL,GAAG,CAACuC,WAAJ,EAAnB,EAAsC+G,IAAtC,CAAjB;AACD;AAED;;;;;;AAIUL,EAAAA,gBAAgB,CAACY,QAAD;AACxB,QAAI,CAACrH,WAAW,CAACkB,UAAb,EAAyBlB,WAAW,CAACE,MAArC,EAA6C8I,QAA7C,CAAsD3B,QAAQ,CAAClL,IAA/D,CAAJ,EAA0E;AACxE,aAAOkL,QAAQ,CAAC9G,OAAhB;AACD;;AAED,UAAMA,OAAO,GAAG,KAAKoG,cAAL,CAAoBU,QAApB,CAAhB;AAEA,WAAO,gBAAO1J,OAAP,EAAqB2B,QAArB,EAAoCwH,IAApC;AACL,aAAOvG,OAAO,CAAC;AACbuG,QAAAA,IADa;AAEb5H,QAAAA,IAAI,EAAEvB,OAAO,CAACuB;AAFD,OAAD,CAAd;AAID,KALD;AAMD;AAED;;;;;;;AAKUkH,EAAAA,UAAU,CAAC5I,GAAD;AAClB,WAAOqI,kBAAkB,CAACrI,GAAD,CAAzB;AACD;;AAESsJ,EAAAA,IAAI,CAACc,cAAD;AACZ,UAAM;AAAC1I,MAAAA,IAAD;AAAO4H,MAAAA;AAAP,QAAec,cAArB;AAEA,WAAO,CAAC1I,IAAI,CAACI,QAAL,CAAcF,MAAd,EAAD,IAA2B0H,IAA3B,IAAmCA,IAAI,EAA9C;AACD;;AAESY,EAAAA,cAAc,CAACL,QAAD;AACtB,WAAO,gBAAOjK,KAAP;AAAA,aACL,CACEiK,QAAQ,CAAClG,aAAT,IAA0B/D,KAAK,CAAC+B,GADlC,EAEE/B,KAAK,CAAC8B,IAAN,CAAWvB,OAAX,CAAmBA,OAFrB,EAGEP,KAAK,CAAC8B,IAAN,CAAWI,QAAX,CAAoBA,QAHtB,EAIE+H,QAAQ,CAAC5G,eAAT,IAA4BrD,KAAK,CAAC0J,IAJpC,EAKEpF,MALF,CAKSC,OALT,CADK;AAAA,KAAP;AAOD;;;;AA/ODxD,YADC8K,MAAM,8BACmBC,8EAA1B;;AAFW3C,eAAe,eAH3BpJ,UAAU,CAAC;AACVC,EAAAA,KAAK,EAAE/C,aAAa,CAACC;AADX,CAAD,oCAOuB6O,iBAAmCC,mBAJxD7C,gBAAA;;;ACxBb;;;;MAGa8C,uBAAuB,GAAGC,MAAM,CAACC,GAAP,CAAW,uBAAX;AASvC;;;;;IAOaC,cAAc,sBAA3B,MAAaA,cAAb;AAOE7P,EAAAA,YAAsB8P;AAAA,wBAAA,GAAAA,eAAA;AACpB,SAAKC,SAAL,GAAiB,KAAKC,GAAL,GAAWC,gBAAc,CAACC,eAAf,EAA5B;AACD;AAED;;;;;;;AAKa,SAANC,MAAM,CAACnF,QAAD,EAA4BoF,gBAAqB,EAAjD;AACX,UAAMC,MAAM,GAAG,IAAIC,GAAJ,EAAf;AACAD,IAAAA,MAAM,CAAC9N,GAAP,CAAWmN,uBAAX,EAAoCU,aAApC;AAEA,WAAOpF,QAAQ,CAACuF,MAAT,CAAgCN,gBAAhC,EAAgDI,MAAhD,CAAP;AACD;;AAE+B,SAAfH,eAAe;AAC9B,WAAOrL,mBAAmB,EAA1B;AACD;;AAED2L,EAAAA,QAAQ;AACN,WAAO,KAAKR,GAAZ;AACD;;AAEDS,EAAAA,SAAS;AACP,WAAO,KAAKV,SAAZ;AACD;;AAEDhM,EAAAA,GAAG,CAAC,GAAG2M,QAAJ;AACD;AACA,SAAKD,SAAL,GAAiB1M,GAAjB,CAAqB,GAAG,KAAK4M,WAAL,CAAiBD,QAAjB,CAAxB;AAEA,WAAO,IAAP;AACD;;AAEDE,EAAAA,QAAQ,CAACzO,OAAD;AACN,UAAM;AAAC4H,MAAAA,MAAD;AAASC,MAAAA,IAAT;AAAe0G,MAAAA,QAAf;AAAyB9I,MAAAA;AAAzB,QAAoCzF,OAA1C;;AAGA,SAAKsO,SAAL,GAAiB1G,MAAjB,EAAyBC,IAAzB,EAA+B,GAAG,KAAK2G,WAAL,CAAiBD,QAAjB,EAA2B;AAAC3G,MAAAA,MAAD;AAASC,MAAAA,IAAT;AAAepC,MAAAA;AAAf,KAA3B,CAAlC;AAEA,WAAO,IAAP;AACD;;AAED7C,EAAAA,GAAG,CAACiF,IAAD,EAAiB,GAAG0G,QAApB;AACD,WAAO,KAAKE,QAAL,CAAc;AAAC7G,MAAAA,MAAM,EAAE,KAAT;AAAgBC,MAAAA,IAAhB;AAAsB0G,MAAAA,QAAtB;AAAgC9I,MAAAA,OAAO,EAAE;AAAzC,KAAd,CAAP;AACD;;AAED9F,EAAAA,GAAG,CAACkI,IAAD,EAAiB,GAAG0G,QAApB;AACD,WAAO,KAAKE,QAAL,CAAc;AAAC7G,MAAAA,MAAM,EAAE,KAAT;AAAgBC,MAAAA,IAAhB;AAAsB0G,MAAAA,QAAtB;AAAgC9I,MAAAA,OAAO,EAAE;AAAzC,KAAd,CAAP;AACD;;AAED3C,EAAAA,IAAI,CAAC+E,IAAD,EAAiB,GAAG0G,QAApB;AACF,WAAO,KAAKE,QAAL,CAAc;AAAC7G,MAAAA,MAAM,EAAE,MAAT;AAAiBC,MAAAA,IAAjB;AAAuB0G,MAAAA,QAAvB;AAAiC9I,MAAAA,OAAO,EAAE;AAA1C,KAAd,CAAP;AACD;;AAED1C,EAAAA,GAAG,CAAC8E,IAAD,EAAiB,GAAG0G,QAApB;AACD,WAAO,KAAKE,QAAL,CAAc;AAAC7G,MAAAA,MAAM,EAAE,KAAT;AAAgBC,MAAAA,IAAhB;AAAsB0G,MAAAA,QAAtB;AAAgC9I,MAAAA,OAAO,EAAE;AAAzC,KAAd,CAAP;AACD;;AAEDxC,EAAAA,MAAM,CAAC4E,IAAD,EAAiB,GAAG0G,QAApB;AACJ,WAAO,KAAKE,QAAL,CAAc;AAAC7G,MAAAA,MAAM,EAAE,QAAT;AAAmBC,MAAAA,IAAnB;AAAyB0G,MAAAA,QAAzB;AAAmC9I,MAAAA,OAAO,EAAE;AAA5C,KAAd,CAAP;AACD;;AAED5C,EAAAA,KAAK,CAACgF,IAAD,EAAiB,GAAG0G,QAApB;AACH,WAAO,KAAKE,QAAL,CAAc;AAAC7G,MAAAA,MAAM,EAAE,OAAT;AAAkBC,MAAAA,IAAlB;AAAwB0G,MAAAA,QAAxB;AAAkC9I,MAAAA,OAAO,EAAE;AAA3C,KAAd,CAAP;AACD;;AAEDzC,EAAAA,IAAI,CAAC6E,IAAD,EAAiB,GAAG0G,QAApB;AACF,WAAO,KAAKE,QAAL,CAAc;AAAC7G,MAAAA,MAAM,EAAE,MAAT;AAAiBC,MAAAA,IAAjB;AAAuB0G,MAAAA,QAAvB;AAAiC9I,MAAAA,OAAO,EAAE;AAA1C,KAAd,CAAP;AACD;;AAEDzF,EAAAA,OAAO,CAAC6H,IAAD,EAAiB,GAAG0G,QAApB;AACL,WAAO,KAAKE,QAAL,CAAc;AAAC7G,MAAAA,MAAM,EAAE,SAAT;AAAoBC,MAAAA,IAApB;AAA0B0G,MAAAA,QAA1B;AAAoC9I,MAAAA,OAAO,EAAE;AAA7C,KAAd,CAAP;AACD;;AAED5F,EAAAA,OAAO,CAACgI,IAAD,EAAe7H,OAAf;AACL,WAAO,IAAP;AACD;;AAED0O,EAAAA,MAAM,CAAC1O,OAAD;AACJ,UAAM2O,CAAC,GAAGC,OAAO,CAAC,QAAD,CAAP,CAAkB5O,OAAlB,CAAV;;AAEA,UAAM6O,WAAW,GAAG,CAACH,MAAD,EAAc1C,IAAd;AAClB;AACA,UAAI,CAAC0C,MAAM,CAAC1C,IAAD,CAAX,EAAmB;AAEnB,YAAM8C,EAAE,GAAGJ,MAAM,CAAC1C,IAAD,CAAjB;;AAEA0C,MAAAA,MAAM,CAAC1C,IAAD,CAAN,GAAe,SAAS+C,KAAT,CAAe,GAAG9G,IAAlB;AACb,cAAM+E,UAAU,GAAGgC,OAAO,CAACD,KAAR,CAAcD,EAAd,EAAkB,IAAlB,EAAwB7G,IAAxB,CAAnB;AAEA,eAAO,CAACgH,GAAD,EAAWC,GAAX,KAAwBC,SAAS,CAACnC,UAAD,CAAT,CAAsBiC,GAAtB,EAA2BC,GAA3B,CAA/B;AACD,OAJD;AAKD,KAXD;;AAaAL,IAAAA,WAAW,CAACF,CAAD,EAAI,KAAJ,CAAX;AACAE,IAAAA,WAAW,CAACF,CAAD,EAAI,OAAJ,CAAX;AACAE,IAAAA,WAAW,CAACF,CAAD,EAAI,QAAJ,CAAX;AACAE,IAAAA,WAAW,CAACF,CAAD,EAAI,MAAJ,CAAX;AACAE,IAAAA,WAAW,CAACF,CAAD,EAAI,QAAJ,CAAX;AAEA,WAAOA,CAAP;AACD;;AAESH,EAAAA,WAAW,CAACD,QAAD,EAAkBvO,UAAwC,EAA1D;AACnB,WAAOuO,QAAQ,CAAC9E,MAAT,CAAgB,CAAC2F,IAAD,EAAO3K,OAAP,EAAgB4K,KAAhB;AACrB,UAAI,OAAO5K,OAAP,KAAmB,QAAvB,EAAiC;AAC/B,eAAO2K,IAAI,CAACpN,MAAL,CAAYyC,OAAZ,CAAP;AACD;;AAED,UAAIA,OAAO,YAAYqJ,gBAAvB,EAAuC;AACrC,eAAOsB,IAAI,CAACpN,MAAL,CAAYyC,OAAO,CAAC4J,QAAR,EAAZ,CAAP;AACD;;AAED,aAAOe,IAAI,CAACpN,MAAL,CACL,KAAK2L,eAAL,CAAqBjD,aAArB,CAAmCjG,OAAnC,eACKzE,OADL;AAEEyF,QAAAA,OAAO,EAAEzF,OAAO,CAACyF,OAAR,GAAkB4J,KAAK,KAAKd,QAAQ,CAACtM,MAAT,GAAkB,CAA9C,GAAkD;AAF7D,SADK,CAAP;AAMD,KAfM,EAeJ,EAfI,CAAP;AAgBD;;;;AA5HDI,YADC8K,MAAM,8BACGE,gEAAV;;AALWK,cAAc,kCAH1BrM,UAAU,CAAC;AACVC,EAAAA,KAAK,EAAE/C,aAAa,CAAC+Q;AADX,CAAD,oCAU8B7E,oBAP5BiD,eAAA;;;ACdb;;;;;;IAQa6B,mBAAmB,2BAAhC,MAAaA,mBAAb,SAAuF7B,cAAvF;AAKE7P,EAAAA,YAAY8P;AACV,UAAMA,eAAN;AACA,SAAK6B,MAAL,GAAc,KAAK3B,GAAL,GAAW4B,qBAAmB,CAACC,YAApB,EAAzB;AACD;;AAE4B,SAAZA,YAAY;AAC3B,WAAOhN,mBAAmB,EAA1B;AACD;;AAEDiN,EAAAA,MAAM;AACJ,WAAO,KAAK9B,GAAZ;AACD;;;AAhBU0B,mBAAmB,uCAH/BlO,UAAU,CAAC;AACVC,EAAAA,KAAK,EAAE/C,aAAa,CAACC;AADX,CAAD,oCAQoBiM,oBALlB8E,oBAAA;;;ACTb;;;;IAIaK,wBAAwB,gCAArC,MAAaA,wBAAb;AAOW,QAAHhO,GAAG,CAAYF,GAAZ;AACP,QAAI;AACF,YAAM;AAACmO,QAAAA,MAAD;AAAS7P,QAAAA,OAAO,GAAG;AAAnB,UAAyB0B,GAAG,CAACD,QAAJ,CAAa9B,GAAb,CAAiBmQ,0BAAjB,CAA/B;;AACA,YAAM5O,QAAQ,gBACT,KAAKA,QADI,EAETlB,OAFS,CAAd;AAKA;;;AACA,UAAIkB,QAAQ,CAAC6O,OAAb,EAAsB;AACpB,eAAO7O,QAAQ,CAAC8O,IAAhB;AACD;;AAED,YAAMhD,UAAU,GAAG,KAAKiD,GAAL,CAASvB,MAAT,CAAgBxN,QAAhB,EAA0B2O,MAA1B,CAAiC,KAAKK,SAAL,CAAe;AAACL,QAAAA;AAAD,OAAf,CAAjC,CAAnB;AAEA,aAAO,MAAM7C,UAAU,CAACtL,GAAG,CAACuL,UAAJ,EAAD,EAAmBvL,GAAG,CAACuC,WAAJ,EAAnB,CAAvB;AACD,KAfD,CAeE,OAAOqI,EAAP,EAAW;AACX,YAAMA,EAAE,CAAC6D,IAAH,GAAU,IAAIC,SAAJ,CAAc9D,EAAE,CAAC6D,IAAjB,KAA0B7D,EAAE,CAACL,WAAWK,EAAE,CAAC+D,KAAH,IAAY,IAA7B,CAAkCC,IAAlC,EAAvB,CAAV,GAA6EhE,EAAnF;AACD;AACF;;AAES4D,EAAAA,SAAS,CAACK,IAAD;AACjB,WAAOA,IAAI,CAACV,MAAL,CAAYtI,GAAZ,CAAgB,CAAC;AAACyE,MAAAA,IAAD;AAAOwE,MAAAA;AAAP,KAAD,MAAuB;AAACxE,MAAAA,IAAD;AAAOwE,MAAAA;AAAP,KAAvB,CAAhB,CAAP;AACD;;;;AA5BDnO,YADCC,QAAQ,CAAC,QAAD,EAAW,EAAX,8FACT;;AAGAD,YADC8K,MAAM,8BACFoC,yEAAL;;AAEAlN,YAAWE,WAAAC,OAAO,gLAAlB;;AAPWoN,wBAAwB,4CADpCnN,UAAU,KACEmN,yBAAA;;ACVb;;;;;;SAKgBa,cAAc3B;AAC5BA,EAAAA,EAAE,CAACzO,IAAH,GAAU6D,WAAW,CAACsH,MAAtB;AAEA,SAAOsD,EAAP;AACD;;ACDD;;;;AAGA,SAAS4B,YAAT,CAAsB9I,MAAtB;AACE,SAAO,CAACA,MAAM,KAAK+I,gBAAgB,CAAC5F,MAA5B,GAAqC,KAArC,GAA6CnD,MAAM,IAAI,KAAxD,EAA+D+B,WAA/D,EAAP;AACD;AAED;;;;;MAGaiH;AACX/S,EAAAA,YAAoBkL;AAAA,iBAAA,GAAAA,QAAA;AAAgC;AAEpD;;;;;;AAIO8H,EAAAA,KAAK,CAAChI,QAAD;AACV,UAAM;AACJvC,MAAAA,WAAW,EAAE;AAACwK,QAAAA;AAAD;AADT,QAEF,KAAK/H,QAFT;;AAKA,SAAKgI,gBAAL,CAAsBD,SAAtB;AAAA,KACGE,cADH;AAAA,KAEGC,kBAFH,CAEsBpI,QAFtB;;AAIA,WAAO,KAAKE,QAAL,CAAcuF,SAAd,EAAP;AACD;;AAEO0C,EAAAA,cAAc;AACpB,UAAM;AAACE,MAAAA;AAAD,QAAc,KAAKnI,QAAzB;AACA,UAAM7B,cAAc,GAAgC,IAAIiH,GAAJ,EAApD;;AACA,UAAMgD,MAAM,GAAG,CAACvJ,MAAD,EAAiBC,IAAjB,QAAkCD,UAAUC,MAA3D;;AAEA,UAAMuJ,qBAAqB,GAAItJ,GAAD;AAC5B,UAAIZ,cAAc,CAACmK,GAAf,CAAmBvJ,GAAnB,CAAJ,EAA6B;AAC3BZ,QAAAA,cAAc,CAACvH,GAAf,CAAmBmI,GAAnB,EAAyBrC,OAAzB,GAAmC,KAAnC;AACD;AACF,KAJD;;AAMA,UAAM6L,aAAa,GAAG,CAACxJ,GAAD,EAAcyJ,aAAd;AACpBrK,MAAAA,cAAc,CAAC9G,GAAf,CAAmB0H,GAAnB,EAAwByJ,aAAxB;AACAA,MAAAA,aAAa,CAAC9L,OAAd,GAAwB,IAAxB;AACD,KAHD;;AAKAyL,IAAAA,SAAS,CAACM,OAAV,CAAkB,CAAC;AAACxK,MAAAA;AAAD,KAAD;AAChBA,MAAAA,SAAS,QAAT,YAAAA,SAAS,CAAEE,cAAX,CAA0BsK,OAA1B,CAAmCD,aAAD;AAChC,YAAIA,aAAa,CAAC3J,MAAd,KAAyB+I,gBAAgB,CAAC5F,MAA9C,EAAsD;AACpD,gBAAMjD,GAAG,GAAGqJ,MAAM,CAACI,aAAa,CAAC3J,MAAf,EAAuB2J,aAAa,CAAC1J,IAArC,CAAlB;AACAuJ,UAAAA,qBAAqB,CAACtJ,GAAD,CAArB;AACAsJ,UAAAA,qBAAqB,CAACD,MAAM,CAACR,gBAAgB,CAACc,GAAlB,EAAuBF,aAAa,CAAC1J,IAArC,CAAP,CAArB;AAEAyJ,UAAAA,aAAa,CAACxJ,GAAD,EAAMyJ,aAAN,CAAb;AACD;AACF,OARD;AASD,KAVD;AAYAL,IAAAA,SAAS,CAACM,OAAV,CAAmB/P,QAAD;AAChB,WAAKiQ,aAAL,CAAmBjQ,QAAnB;AACD,KAFD;AAIA,WAAO,IAAP;AACD;;AAEOiQ,EAAAA,aAAa,CAACjQ,QAAD;AACnB,UAAM;AAAC4E,MAAAA,iBAAD;AAAoBC,MAAAA,WAAW,EAAEqL,MAAjC;AAAyCpL,MAAAA,gBAAzC;AAA2DS,MAAAA;AAA3D,QAAwEvF,QAA9E;AACA,UAAM;AACJ6E,MAAAA,WAAW,EAAE;AAAC1E,QAAAA,GAAD;AAAMgQ,QAAAA;AAAN;AADT,QAEF,KAAK7I,QAFT;AAIA,UAAM8I,MAAM,GAAG,KAAK9I,QAAL,CAAcuF,SAAd,EAAf;;AAEA,QAAIC,QAAQ,GAAU,EAAtB;AAEA,UAAMuD,QAAQ,GAAG,CAAC,GAAGrQ,QAAQ,CAACqF,QAAT,CAAkBC,MAAlB,EAAJ,EAAgCgL,IAAhC,CAAsCrI,IAAD,IAAyBA,IAAI,CAACpE,SAAL,KAAmBT,UAAU,CAACmN,KAA5F,CAAjB;AAEAzD,IAAAA,QAAQ,GAAGA,QAAQ,CAChBvM,MADQ,CACDyO,aAAa,CAACjP,sBAAsB,CAACC,QAAD,CAAvB,CADZ,EAERO,MAFQ,CAEDL,6BAFC,EAGRK,MAHQ,CAGD8P,QAAQ,IAAIlC,wBAHX,EAIR5N,MAJQ,CAIDJ,GAJC;AAAA,KAKRI,MALQ,CAKDqE,iBALC;AAMT;AANS,KAORrE,MAPQ,CAOD2P,MAPC;AAAA,KAQR3P,MARQ,CAQDP,QARC;AAAA,KASRO,MATQ,CASDuE,gBATC;AAAA,KAURvE,MAVQ,CAUD4P,QAVC;AAAA,KAWRhM,MAXQ,CAWA8D,IAAD,IAAe,CAAC,CAACA,IAXhB,CAAX;;AAcA1C,IAAAA,SAAS,QAAT,YAAAA,SAAS,CAAEE,cAAX,CAA0BsK,OAA1B,CAAkC,CAAC;AAAC3J,MAAAA,IAAD;AAAOD,MAAAA,MAAP;AAAenC,MAAAA;AAAf,KAAD;AAChCoM,MAAAA,MAAM,CAACpD,QAAP,CAAgB;AACd7G,QAAAA,MAAM,EAAE8I,YAAY,CAAC9I,MAAD,CADN;AAEdC,QAAAA,IAFc;AAGd0G,QAAAA,QAHc;AAId9I,QAAAA;AAJc,OAAhB;AAMD,KAPD;;AASA,QAAI,EAACuB,SAAD,YAACA,SAAS,CAAEE,cAAX,CAA0B+K,IAA3B,CAAJ,EAAqC;AACnCJ,MAAAA,MAAM,CAACjQ,GAAP,CAAW,GAAG2M,QAAd;AACD;AACF;;AAEO0C,EAAAA,kBAAkB,CAACpI,QAAD;AACxB,UAAM;AAAC/B,MAAAA;AAAD,QAAa,KAAKiC,QAAxB;AACA,UAAM8I,MAAM,GAAG,KAAK9I,QAAL,CAAcuF,SAAd,EAAf;AAEAxH,IAAAA,QAAQ,CAAC0K,OAAT,CAAkBU,KAAD;AACf,YAAMnJ,QAAQ,GAAGF,QAAQ,CAACG,WAAT,CAAqBkJ,KAArB,CAAjB;AAEA;;AACA,UAAI,CAACnJ,QAAL,EAAe;AACb,cAAM,IAAIoJ,KAAJ,CAAU,0DAAV,CAAN;AACD;;AAED,UAAIvB,yBAAJ,CAA8B7H,QAA9B,EAAwC8H,KAAxC,CAA8ChI,QAA9C;AAEAgJ,MAAAA,MAAM,CAACjQ,GAAP,CAAWmH,QAAQ,CAAClB,IAApB,EAA0BkB,QAAQ,CAACuF,SAAT,EAA1B;AACD,KAXD;AAYD;;AAEOyC,EAAAA,gBAAgB,CAACzK,WAAD;AACtB,UAAMuL,MAAM,GAAG,KAAK9I,QAAL,CAAcuF,SAAd,EAAf;AAEAhI,IAAAA,WAAW,CACRV,MADH,CACWwM,CAAD,IAAO,OAAOA,CAAP,KAAa,UAD9B,EAEGZ,OAFH,CAEYxE,UAAD;AACP6E,MAAAA,MAAM,CAACjQ,GAAP,CAAWoL,UAAX;AACD,KAJH;AAMA,WAAO,IAAP;AACD;;;;AClIH;;;;;IAMaqF,eAAe,GAA5B,MAAaA,eAAb;AAQExU,EAAAA,YAAY;AAACgE,IAAAA;AAAD;AACV,SAAKgM,GAAL,GAAWhM,OAAX;AACD;;AAES,MAANyQ,MAAM;AACR,WAAO,KAAKzE,GAAL,CAASyE,MAAhB;AACD;;AAEO,MAAJC,IAAI;AACN,WAAO,KAAK5S,GAAL,CAAS,MAAT,CAAP;AACD;;AAEW,MAAR6S,QAAQ;AACV,WAAO,KAAK3E,GAAL,CAAS2E,QAAhB;AACD;AAED;;;;;;;AAKO,MAAHC,GAAG;AACL,WAAO,KAAK5E,GAAL,CAAS6E,WAAT,IAAwB,KAAK7E,GAAL,CAAS4E,GAAxC;AACD;;AAEU,MAAPnJ,OAAO;AACT,WAAO,KAAKuE,GAAL,CAASvE,OAAhB;AACD;;AAES,MAAN1B,MAAM;AACR,WAAO,KAAKiG,GAAL,CAASjG,MAAhB;AACD;AAED;;;;;;AAIQ,MAAJ0D,IAAI;AACN,WAAO,KAAKuC,GAAL,CAASvC,IAAhB;AACD;;AAEU,MAAPqH,OAAO;AACT,WAAO,KAAK9E,GAAL,CAAS8E,OAAhB;AACD;AAED;;;;;;AAIW,MAAPC,OAAO;AACT,WAAO,KAAK/E,GAAL,CAAS+E,OAAhB;AACD;AAED;;;;;;;AAKU,MAANjM,MAAM;AACR,WAAO,KAAKkH,GAAL,CAASlH,MAAhB;AACD;AAED;;;;;;AAIS,MAALkM,KAAK;AACP,WAAO,KAAKhF,GAAL,CAASgF,KAAhB;AACD;AAED;;;;;;AAIW,MAAPC,OAAO;AACT,WAAO,KAAKjF,GAAL,CAASiF,OAAhB;AACD;;AAEQ,MAALC,KAAK;AACP,WAAO,KAAKlF,GAAL,CAASkF,KAAhB;AACD;AAED;;;;;AAGW,MAAPlR,OAAO;AACT,WAAO,KAAKoL,UAAL,EAAP;AACD;AAED;;;;;AAGO,MAAHgC,GAAG;AACL,WAAO,KAAK+D,MAAL,EAAP;AACD;AAED;;;;;;;;;;;AASArT,EAAAA,GAAG,CAACqM,IAAD;AACD,WAAO,KAAK6B,GAAL,CAASlO,GAAT,CAAaqM,IAAb,CAAP;AACD;;AAaD9J,EAAAA,OAAO,CAAC+Q,IAAD;AACL;AACA,WAAO,KAAKpF,GAAL,CAAS3L,OAAT,CAAiB+Q,IAAjB,CAAP;AACD;;AAED1P,EAAAA,SAAS;AACP,WAAO,KAAKsK,GAAL,CAASqF,OAAhB;AACD;;AAEDzP,EAAAA,OAAO;AACL;AACA,WAAO,KAAKoK,GAAZ;;AAEA,WAAO,KAAKrK,QAAZ;AACD;AAED;;;;;AAGAyJ,EAAAA,UAAU;AACR,WAAO,KAAKY,GAAZ;AACD;AAED;;;;;AAGAmF,EAAAA,MAAM;AACJ,WAAO,KAAKnF,GAAZ;AACD;;;AA5JUwE,eAAe,eAF3BhR,UAAU,IACV8R,KAAK,CAAC5U,aAAa,CAAC+Q,QAAf,+CACO+C,gBAAA;;;;ACfb,MAAMe,UAAU,GAAGxE,OAAO,CAAC,aAAD,CAA1B;AAaA;;;;;;IAMayE,gBAAgB,wBAA7B,MAAaA,gBAAb;AAYExV,EAAAA,YAAY;AAAC2F,IAAAA;AAAD;AACV,SAAKqK,GAAL,GAAWrK,QAAX;AACD;AAED;;;;;AAGc,MAAV0G,UAAU;AACZ,WAAO,KAAK2D,GAAL,CAAS3D,UAAhB;AACD;AAED;;;;;;;AAKU,MAANgE,MAAM;AACR,WAAO,KAAKL,GAAL,CAASK,MAAhB;AACD;AAED;;;;;AAGY,MAAR1K,QAAQ;AACV,WAAO,KAAKS,WAAL,EAAP;AACD;AAED;;;;;AAGO,MAAHiL,GAAG;AACL,WAAO,KAAKoE,MAAL,EAAP;AACD;;AAEgB,SAAVF,UAAU,CAAClE,GAAD,EAAWnL,EAAX;AACfqP,IAAAA,UAAU,CAAClE,GAAD,EAAMnL,EAAN,CAAV;AACD;AAED;;;;;;;;;;;AASApE,EAAAA,GAAG,CAACqM,IAAD;AACD,WAAO,KAAK6B,GAAL,CAASlO,GAAT,CAAaqM,IAAb,CAAP;AACD;;AAED3B,EAAAA,UAAU;AACR,WAAO,KAAKwD,GAAL,CAASxD,UAAT,EAAP;AACD;AAED;;;;;AAGApG,EAAAA,WAAW;AACT,WAAO,KAAK4J,GAAZ;AACD;AAED;;;;;AAGAyF,EAAAA,MAAM;AACJ,WAAO,KAAKzF,GAAZ;AACD;;AAED7D,EAAAA,SAAS;AACP,WAAO,KAAKE,UAAL,KAAoB,GAA3B;AACD;AAED;;;;;;;AAKAxG,EAAAA,MAAM,CAACA,MAAD;AACJ,SAAKmK,GAAL,CAASnK,MAAT,CAAgBA,MAAhB;AAEA,WAAO,IAAP;AACD;AAED;;;;;;;;;;;;;AAWA4G,EAAAA,UAAU,CAAChB,OAAD;AACR;AACAC,IAAAA,MAAM,CAACC,OAAP,CAAeF,OAAf,EAAwBkI,OAAxB,CAAgC,CAAC,CAAC1J,GAAD,EAAM4B,IAAN,CAAD;AAC9B,WAAK6J,SAAL,CAAezL,GAAf,EAAoB4B,IAApB;AACD,KAFD;AAIA,WAAO,IAAP;AACD;;AAED6J,EAAAA,SAAS,CAACzL,GAAD,EAAc4B,IAAd;AACP,QAAI5B,GAAG,CAAC6B,WAAJ,OAAsB,UAA1B,EAAsC;AACpC,aAAO,KAAK6J,QAAL,CAAc3J,MAAM,CAACH,IAAD,CAApB,CAAP;AACD;;AAED,SAAKmE,GAAL,CAASzN,GAAT,CAAa0H,GAAb,EAAkB4B,IAAlB;AAEA,WAAO,IAAP;AACD;AAED;;;;;;;;;;;;;;AAYA+J,EAAAA,WAAW,CAACA,WAAD;AACT,SAAK5F,GAAL,CAAS4F,WAAT,CAAqBA,WAArB;AAEA,WAAO,IAAP;AACD;;AAEDC,EAAAA,aAAa,CAACzR,MAAD;AACX,SAAKsR,SAAL,CAAe,gBAAf,EAAiCtR,MAAjC;AACA,WAAO,IAAP;AACD;;AAED0R,EAAAA,gBAAgB;AACd,QAAI,KAAKhU,GAAL,CAAS,gBAAT,CAAJ,EAAgC;AAC9B,aAAOiU,QAAQ,CAAC,KAAKjU,GAAL,CAAS,gBAAT,CAAD,EAA6B,EAA7B,CAAR,IAA4C,CAAnD;AACD;AACF;;AAEDkU,EAAAA,cAAc;AACZ,WAAO,CAAC,KAAKlU,GAAL,CAAS,cAAT,KAA4B,EAA7B,EAAiCmB,KAAjC,CAAuC,GAAvC,EAA4C,CAA5C,CAAP;AACD;AAED;;;;;;;;;;;;;;;;;AAeAgT,EAAAA,UAAU,CAACC,QAAD;AACR,SAAKlG,GAAL,CAASiG,UAAT,CAAoBC,QAApB;AACA,WAAO,IAAP;AACD;AAED;;;;;;;;;AAOAvJ,EAAAA,QAAQ,CAAC9G,MAAD,EAAiB+O,GAAjB;AACN,SAAK5E,GAAL,CAASrD,QAAT,CAAkB9G,MAAlB,EAA0B+O,GAA1B;AAEA,WAAO,IAAP;AACD;AAED;;;;;;;AAKAe,EAAAA,QAAQ,CAACA,QAAD;AACN,SAAK3F,GAAL,CAAS2F,QAAT,CAAkBA,QAAlB;AAEA,WAAO,IAAP;AACD;AAED;;;;;;;AAKAQ,EAAAA,MAAM,CAAC9I,IAAD;AACJA,IAAAA,IAAI,CAAC+I,IAAL,CAAU,KAAKpG,GAAf;AAEA,WAAO,IAAP;AACD;AAED;;;;;;;;AAMY,QAANqG,MAAM,CAACrM,IAAD,EAAe7H,UAAe,EAA9B;AACV,WAAO,KAAKmU,aAAL,CAAmBD,MAAnB,CAA0BrM,IAA1B,eACF,KAAKqG,MADH,EAEFlO,OAFE,EAAP;AAID;AAED;;;;;;;;;;AAQAsL,EAAAA,IAAI,CAACJ,IAAD;AACF,SAAKA,IAAL,GAAYA,IAAZ;;AAEA,QAAIA,IAAI,KAAKtB,SAAb,EAAwB;AACtB,WAAKiE,GAAL,CAASuG,IAAT;AAEA,aAAO,IAAP;AACD;;AAED,QAAItH,QAAQ,CAAC5B,IAAD,CAAZ,EAAoB;AAClB,WAAK8I,MAAL,CAAY9I,IAAZ;AAEA,aAAO,IAAP;AACD;;AAED,QAAImJ,MAAM,CAACC,QAAP,CAAgBpJ,IAAhB,CAAJ,EAA2B;AACzB,UAAI,CAAC,KAAK2I,cAAL,EAAL,EAA4B;AAC1B,aAAKJ,WAAL,CAAiB,0BAAjB;AACD;;AAED,WAAKC,aAAL,CAAmBxI,IAAI,CAACjJ,MAAxB;AACA,WAAK4L,GAAL,CAASuG,IAAT,CAAclJ,IAAd;AAEA,aAAO,IAAP;AACD;;AAED,QAAIqJ,SAAS,CAACrJ,IAAD,CAAT,IAAmBsJ,QAAQ,CAACtJ,IAAD,CAA3B,IAAqCuJ,QAAQ,CAACvJ,IAAD,CAA7C,IAAuDA,IAAI,KAAK,IAApE,EAA0E;AACxE,WAAK2C,GAAL,CAASuG,IAAT,CAAclJ,IAAd;AAEA,aAAO,IAAP;AACD;;AAED,SAAK2C,GAAL,CAAS6G,IAAT,CAAcxJ,IAAd;AAEA,WAAO,IAAP;AACD;;AAEDyJ,EAAAA,OAAO;AACL,WAAO,KAAKzJ,IAAZ;AACD;AAED;;;;;;AAIA0J,EAAAA,KAAK,CAAC7Q,EAAD;AACH8Q,IAAAA,kBAAgB,CAACzB,UAAjB,CAA4B,KAAKE,MAAL,EAA5B,EAA2CvP,EAA3C;AAEA,WAAO,IAAP;AACD;;AAEDT,EAAAA,MAAM;AACJ,QAAI,CAAC,KAAKuK,GAAV,EAAe;AACb,aAAO,IAAP;AACD;;AAED,UAAMqB,GAAG,GAAG,KAAKoE,MAAL,EAAZ;AAEA,WAAOzN,OAAO,CAAC,KAAK2G,aAAL,MAAwB0C,GAAG,CAAC4F,aAA5B,IAA6C5F,GAAG,CAAC6F,gBAAlD,CAAd;AACD;;AAEDtR,EAAAA,OAAO;AACL;AACA,WAAO,KAAKoK,GAAZ;AACA,WAAO,KAAK3C,IAAZ;;AAEA,WAAO,KAAKrJ,OAAZ;AACD;;AAED2K,EAAAA,aAAa;AACX,WAAO,KAAK8G,MAAL,GAAc0B,WAArB;AACD;;;AAlTU3B,gBAAgB,oCAF5BhS,UAAU,IACV8R,KAAK,CAAC5U,aAAa,CAAC+Q,QAAf,+CACO+D,iBAAA;;;MCJA4B,wBAAwBC;AAoBnCrX,EAAAA;QAAY;AACVsX,MAAAA,KADU;AAEV1T,MAAAA,QAFU;AAGV2T,MAAAA,iBAAiB,GAAG,EAHV;AAIVC,MAAAA,aAAa,GAAGhC,gBAJN;AAKViC,MAAAA,YAAY,GAAGjD;AALL;QAMPrS;;AAEH,uBACKA,OADL;AAEEuV,MAAAA,SAAS,EAAE;AACT,eAAO,KAAKH,iBAAL,CAAuBrD,IAAvB,CAA6ByD,GAAD,IAAS,CAAC,CAAC,KAAK/C,GAAL,CAASgD,KAAT,CAAeD,GAAf,CAAvC,CAAP;AACD;AAJH;AAVM,0BAAA,GAA8B,EAA9B;AAiBN/T,IAAAA,QAAQ,KAAK,KAAKA,QAAL,GAAgBA,QAArB,CAAR;AAEA,SAAK2T,iBAAL,GAAyBA,iBAAiB,CAAC7N,GAAlB,CAAuB/G,OAAD,IAC7C,OAAOA,OAAP,KAAmB,QAAnB,GAA8B,IAAIkV,MAAJ,CAAWlV,OAAX,EAAoB,IAApB,CAA9B,GAA0DA,OADnC,CAAzB;AAIA,SAAKgD,QAAL,GAAgB,IAAI6R,aAAJ,CAAkBF,KAAlB,CAAhB;AACA,SAAKtT,OAAL,GAAe,IAAIyT,YAAJ,CAAiBH,KAAjB,CAAf;AAEA,SAAK3R,QAAL,CAAc3B,OAAd,GAAwB,KAAKA,OAA7B;AACA,SAAKA,OAAL,CAAa2B,QAAb,GAAwB,KAAKA,QAA7B;AAEA,SAAK3B,OAAL,CAAaA,OAAb,CAAqBuB,IAArB,GAA4B,IAA5B;AACA,SAAKvB,OAAL,CAAaA,OAAb,CAAqBgL,EAArB,GAA0B,KAAKA,EAA/B;AACA,SAAKpO,MAAL,CAAYgU,GAAZ,GAAkB,KAAKA,GAAvB;AAEA,SAAKkD,SAAL,CAAevV,GAAf,CAAmBiT,gBAAnB,EAAqC,KAAK7P,QAA1C;AACA,SAAKmS,SAAL,CAAevV,GAAf,CAAmBiS,eAAnB,EAAoC,KAAKxQ,OAAzC;AACA,SAAK8T,SAAL,CAAevV,GAAf,CAAmB6U,eAAnB,EAAoC,IAApC;AAEA,SAAKzR,QAAL,CAAc+P,SAAd,CAAwB,cAAxB,EAAwC,KAAK1G,EAA7C;AACD;;AAEM,MAAH4F,GAAG;AACL,WAAO,KAAK5Q,OAAL,CAAa4Q,GAApB;AACD;;AAEM,MAAHxC,GAAG;AACL,WAAO,KAAKpH,QAAL,CAAclJ,GAAd,CAAuC4P,mBAAvC,CAAP;AACD;;AAEY,QAAP9L,OAAO;;;AACX,UAAM,MAAMA,OAAN,EAAN;AAEA,qBAAO,KAAK5B,OAAZ,4CAAO,cAAcA,OAArB,0BAAO,sBAAuBuB,IAA9B;AAEA,SAAKI,QAAL,CAAcC,OAAd;AACA,SAAK5B,OAAL,CAAa4B,OAAb;;AAGA,WAAO,KAAKhC,QAAZ;;AAEA,WAAO,KAAK+B,QAAZ;;AAEA,WAAO,KAAK3B,OAAZ;AACD;;AAEDyB,EAAAA,MAAM;AACJ,WAAO,CAAC,KAAKzB,OAAN,IAAiB,CAAC,KAAK2B,QAA9B;AACD;AAED;;;;;AAGAyJ,EAAAA,UAAU;AACR,WAAO,KAAKpL,OAAL,CAAaoL,UAAb,EAAP;AACD;AAED;;;;;AAGAhJ,EAAAA,WAAW;AACT,WAAO,KAAKT,QAAL,CAAcS,WAAd,EAAP;AACD;AAED;;;;;AAGA+O,EAAAA,MAAM;AACJ,WAAO,KAAKnR,OAAL,CAAamR,MAAb,EAAP;AACD;AAED;;;;;AAGAM,EAAAA,MAAM;AACJ,WAAO,KAAK9P,QAAL,CAAc8P,MAAd,EAAP;AACD;AAED;;;;;AAGA3D,EAAAA,MAAM;AACJ,WAAO,KAAKM,GAAL,CAASN,MAAT,EAAP;AACD;;;;MClIUiG;AAOX/X,EAAAA,YAAY;AAACkL,IAAAA,QAAD;AAAWtH,IAAAA,QAAX;AAAqBmG,IAAAA,MAArB;AAA6B6K,IAAAA;AAA7B;AACV,SAAK1J,QAAL,GAAgBA,QAAhB;AACA,SAAKtH,QAAL,GAAgBA,QAAhB;AACA,SAAKmG,MAAL,GAAcA,MAAd;AACA,SAAK6K,GAAL,GAAWA,GAAX;AACA,SAAKE,OAAL,GAAe,CAAC,CAAClR,QAAQ,CAACkF,MAAT,CAAgBoL,IAAhB,CAAsB8D,KAAD,IAAWA,KAAK,CAACvQ,SAAN,KAAoBT,UAAU,CAACiR,QAA/D,CAAjB;AACD;;AAEO,MAAJ9J,IAAI;AACN,cAAU,KAAKvK,QAAL,CAAciF,cAAc,KAAKqP,mBAA3C;AACD;;AAEY,MAATC,SAAS;AACX,WAAO,KAAKvU,QAAL,CAAciF,UAArB;AACD;;AAEkB,MAAfqP,eAAe;AACjB,WAAOlM,MAAM,CAAC,KAAKpI,QAAL,CAAc8C,WAAf,CAAb;AACD;;AAEa,MAAV0R,UAAU;AACZ,WAAO,KAAKxU,QAAL,CAAckF,MAArB;AACD;;AAEDuP,EAAAA,MAAM;AACJ,WAAO;AACLtO,MAAAA,MAAM,EAAE,KAAKA,MADR;AAELoE,MAAAA,IAAI,EAAE,KAAKA,IAFN;AAGLyG,MAAAA,GAAG,EAAE,KAAKA,GAHL;AAILuD,MAAAA,SAAS,EAAE,KAAKA,SAJX;AAKLD,MAAAA,eAAe,EAAE,KAAKA,eALjB;AAMLE,MAAAA,UAAU,EAAE,KAAKA,UANZ;AAOLtD,MAAAA,OAAO,EAAE,KAAKA;AAPT,KAAP;AASD;;;;MCpDUwD,cAAc,GAAG3I,MAAM,CAACC,GAAP,CAAW,gBAAX;;MCMjB2I,2BAAoCC;AAI/CxY,EAAAA,YAAYiN,SAAwB9K,UAA6B;AAC/D,UAAM8K,OAAN,EAAe9K,OAAf;AACA,SAAKK,IAAL,GAAYhC,YAAY,CAACC,UAAzB;AACA,SAAKgY,MAAL,GAAcvQ,eAAe,CAACc,IAAhB,CAAqBiE,OAArB,CAAd;AACD;;AAEO,MAAJjD,IAAI;AACN,WAAO,KAAKyO,MAAL,CAAYzO,IAAnB;AACD;;AAEO,MAAJA,IAAI,CAACA,IAAD;AACN,SAAKyO,MAAL,CAAYzO,IAAZ,GAAmBA,IAAnB;AACD;AAED;;;;;;AAIa,MAATqJ,SAAS;AACX,WAAOpL,gBAAgB,CAACsB,YAAjB,CAA8B,KAAK0D,OAAnC,CAAP;AACD;;AAEW,MAARhE,QAAQ;AACV,WAAO,KAAKd,KAAL,CAAWrG,GAAX,CAAe,qBAAf,EAAsC,EAAtC,CAAP;AACD;AAED;;;;;;AAIU,MAAN4W,MAAM;AACR,WAAO,KAAKvQ,KAAL,CAAWrG,GAAX,CAAe,kBAAf,CAAP;AACD;AAED;;;;;AAGiB,MAAbsO,aAAa;AACf,WAAO,KAAKjI,KAAL,CAAWrG,GAAX,CAAewW,cAAf,KAAmC,EAA1C;AACD;AAED;;;;;;AAIiB,MAAblI,aAAa,CAACzO,KAAD;AACf,SAAKwG,KAAL,CAAW5F,GAAX,CAAe+V,cAAf,EAA+B3W,KAA/B;AACD;AAED;;;;;;AAIe,MAAX8G,WAAW;AACb,WAAOiD,MAAM,CAACiN,MAAP,CACL;AACE5U,MAAAA,GAAG,EAAE,EADP;AAEEgQ,MAAAA,QAAQ,EAAE,EAFZ;AAGEd,MAAAA,SAAS,EAAE;AAHb,KADK,EAML,KAAK9K,KAAL,CAAWrG,GAAX,CAAe,aAAf,EAA8B,EAA9B,CANK,CAAP;AAQD;AAED;;;;;;AAIe,MAAX2G,WAAW,CAACA,WAAD;AACb,UAAMmQ,MAAM,GAAG,KAAKnQ,WAApB;;AACA,UAAMtE,MAAM,GAAG,CAAC8F,GAAD,EAAc4O,CAAd,EAAsBC,CAAtB,KAAkCD,CAAC,CAAC5O,GAAD,CAAD,GAAS4O,CAAC,CAAC5O,GAAD,CAAD,CAAO9F,MAAP,CAAc2U,CAAC,CAAC7O,GAAD,CAAf,CAA1D;;AAEAyB,IAAAA,MAAM,CAACqN,IAAP,CAAYtQ,WAAZ,EAAyBkL,OAAzB,CAAkC1J,GAAD;AAC/B9F,MAAAA,MAAM,CAAC8F,GAAD,EAAM2O,MAAN,EAAcnQ,WAAd,CAAN;AACD,KAFD;AAGA,SAAKN,KAAL,CAAW5F,GAAX,CAAe,aAAf,EAA8BqW,MAA9B;AACD;AAED;;;;;;AAIOI,EAAAA,WAAW;AAChB,WAAO,CAAC,CAAC,KAAK/P,QAAL,CAAc7E,MAAvB;AACD;AAED;;;;;;AAIO6U,EAAAA,SAAS;AACd,WAAO,CAAC,CAAC,KAAK9Q,KAAL,CAAWrG,GAAX,CAAe,kBAAf,CAAT;AACD;;AAEM2O,EAAAA,SAAS;AACd,WAAO,KAAKuD,MAAZ;AACD;;AAEMkF,EAAAA,SAAS,CAAClF,MAAD;AACd,SAAKA,MAAL,GAAcA,MAAd;AAEA,WAAO,IAAP;AACD;;;;SC9GamF,kBAAkBC,UAAkBlO;AAClD,SAAO,CAACkO,QAAQ,KAAKlO,QAAQ,CAAClB,IAAtB,GAA6BkB,QAAQ,CAAClB,IAAtC,GAA6C,CAACoP,QAAQ,IAAI,EAAb,IAAmBlO,QAAQ,CAAClB,IAA1E,EAAgFqP,OAAhF,CAAwF,QAAxF,EAAkG,GAAlG,CAAP;AACD;;;ACED;;;;;;IAQaC,QAAQ,wIAArB,MAAaA,QAAb;AAIEtZ,EAAAA,YAAqBgL,UAAoCuO;;;;;;;;;AAApC,iBAAA,GAAAvO,QAAA;AAAoC,4BAAA,GAAAuO,mBAAA;AAHzD,0DAAkC,EAAlC;AACA,oEAAkC,EAAlC;AAEqG;;AAE9F,MAAHnH,GAAG;AACL,WAAO,KAAKmH,mBAAZ;AACD;;AAES,MAANC,MAAM;AACR,uCAAO,IAAP;AACD;;AAEMC,EAAAA,SAAS,CAACD,MAAD;AACdA,IAAAA,MAAM,CAAC7F,OAAP,CAAgB+F,aAAD;AACb,WAAK9I,QAAL,CAAc8I,aAAa,CAACC,KAA5B,EAAmCD,aAAa,CAACjT,KAAjD;AACD,KAFD;AAGD;;AAEMmK,EAAAA,QAAQ,CAAChN,QAAD,EAAmB6C,KAAnB;AACb,UAAM;AAACuE,MAAAA;AAAD,QAAa,IAAnB;;AAEA,QAAIA,QAAQ,CAAC4O,WAAT,CAAqBnT,KAArB,CAAJ,EAAiC;AAC/B,YAAMyE,QAAQ,GAAuBF,QAAQ,CAACG,WAAT,CAAqB1E,KAArB,CAArC;;AAEA,UAAIyE,QAAQ,CAAC1I,IAAT,KAAkBhC,YAAY,CAACC,UAAnC,EAA+C;AAC7C,cAAMkZ,KAAK,GAAGR,iBAAiB,CAACvV,QAAD,EAAWsH,QAAX,CAA/B;;AACA,YAAI,CAACA,QAAQ,CAAC+N,SAAT,EAAL,EAA2B;AACzB,gBAAMO,MAAM,GAAG,KAAKK,WAAL,CAAiBF,KAAjB,EAAwBzO,QAAxB,CAAf;;AAEA,8DAAa4O,IAAb,CAAkB,GAAGN,MAArB;;AACA,wEAAkBM,IAAlB,CAAuB;AACrBH,YAAAA,KADqB;AAErBzO,YAAAA;AAFqB,WAAvB;;AAKA,eAAKkH,GAAL,CAASrO,GAAT,CAAa4V,KAAb,EAAoB,GAAG,GAAGxV,MAAH,CAAU+G,QAAQ,CAACuF,SAAT,GAAqBD,QAArB,EAAV,CAAvB;AACD;AACF;AACF;;AAED,WAAO,IAAP;AACD;AAED;;;;;;AAIOuJ,EAAAA,SAAS;AACd,uCAAO,IAAP;AACD;;AAEMC,EAAAA,qBAAqB;AAC1B,uCAAO,IAAP;AACD;AAED;;;;;;;AAKQH,EAAAA,WAAW,CAACI,WAAD,EAAsBC,IAAtB;AACjB,UAAM;AAAClP,MAAAA;AAAD,QAAa,IAAnB;AAEA,QAAIwO,MAAM,GAA2B,EAArC;AAEAA,IAAAA,MAAM,GAAGU,IAAI,CAACjR,QAAL,CACNS,GADM,CACDwQ,IAAD,IAAUlP,QAAQ,CAACG,WAAT,CAAqB+O,IAArB,CADR,EAENtO,MAFM,CAEC,CAAC4N,MAAD,EAAiCtO,QAAjC;AACN,aAAOsO,MAAM,CAACrV,MAAP,CAAc,KAAK0V,WAAL,IAAoBI,cAAc/O,QAAQ,CAAClB,MAA3C,EAAmDkB,QAAnD,CAAd,CAAP;AACD,KAJM,EAIJsO,MAJI,CAAT;AAMAU,IAAAA,IAAI,CAAC7G,SAAL,CAAeM,OAAf,CAAwB/P,QAAD;AACrBA,MAAAA,QAAQ,CAACyF,cAAT,CAAwBsK,OAAxB,CAAgC,CAAC;AAAC3J,QAAAA,IAAD;AAAOD,QAAAA;AAAP,OAAD;AAC9B,YAAIA,MAAJ,EAAY;AACVyP,UAAAA,MAAM,CAACM,IAAP,CACE,IAAI/B,oBAAJ,CAAyB;AACvB7M,YAAAA,QAAQ,EAAEgP,IADa;AAEvBtW,YAAAA,QAFuB;AAGvBmG,YAAAA,MAHuB;AAIvB6K,YAAAA,GAAG,KAAKqF,cAAcjQ,IAAI,IAAI,IAAzB,CAA8BqP,OAA9B,CAAsC,QAAtC,EAAgD,GAAhD;AAJkB,WAAzB,CADF;AAQD;AACF,OAXD;AAYD,KAbD;AAeA,WAAOG,MAAP;AACD;;CAzFkB;AAARF,QAAQ,eAHpB9V,UAAU,CAAC;AACVC,EAAAA,KAAK,EAAE/C,aAAa,CAACC;AADX,CAAD,oCAOsB6O,iBAA+CkC,wBAJnE4H,SAAA;;ACPb;;;;IAMaa,cAAc,GAA3B,MAAaA,cAAb;AACEna,EAAAA,YAAsBgL,UAAqCoP;AAArC,iBAAA,GAAApP,QAAA;AAAqC,iBAAA,GAAAoP,QAAA;AACzD,SAAKC,4BAAL;AACD;AAED;;;;;AAGOA,EAAAA,4BAA4B;AACjC,UAAM;AAACrP,MAAAA;AAAD,QAAa,IAAnB;AAEA,WAAOA,QAAQ,CACZsP,YADI,CACS9Z,YAAY,CAACC,UADtB,EAEJiJ,GAFI,CAECwB,QAAD;AACHA,MAAAA,QAAQ,CAACgO,SAAT,CAAmBrJ,cAAc,CAACM,MAAf,CAAsBnF,QAAtB,EAAgCE,QAAQ,CAACkF,aAAzC,CAAnB;;AAEA,UAAI,CAAClF,QAAQ,CAAC+N,SAAT,EAAL,EAA2B;AACzB,eAAO,IAAIlG,yBAAJ,CAA8B7H,QAA9B,EAA8D8H,KAA9D,CAAoEhI,QAApE,CAAP;AACD;AACF,KARI,EASJjD,MATI,CASGC,OATH,CAAP;AAUD;;AAEMuS,EAAAA,YAAY;AACjB,UAAMf,MAAM,GAAG,KAAKxO,QAAL,CAAc3H,QAAd,CAAuBvB,GAAvB,CAAoC,QAApC,CAAf;AAEA,SAAKsY,QAAL,CAAcX,SAAd,CAAwBD,MAAxB;AACD;;;AA3BUW,cAAc,eAH1BK,MAAM,CAAC;AACNC,EAAAA,OAAO,EAAE,CAACjL,eAAD,EAAkB8J,QAAlB;AADH,CAAD,oCAI2B9J,iBAAqC8J,aAD1Da,eAAA;;ACTb9X,IAAI,CAAC8L,IAAL,GAAY,MAAZ;SAEgBuM,eAAerX,WAAwC;AACrE,QAAM2H,QAAQ,GAAG,IAAIwE,eAAJ,EAAjB;AACAxE,EAAAA,QAAQ,CAAC3H,QAAT,GAAoBsX,qBAAqB,CAAC3P,QAAD,CAAzC;AACAA,EAAAA,QAAQ,CAACpK,MAAT,GAAkByB,IAAlB;AACA2I,EAAAA,QAAQ,CAAC3H,QAAT,CAAkBd,GAAlB,CAAsBc,QAAtB;AAEAuX,EAAAA,cAAc,CAAC5P,QAAD,CAAd;AAEA,SAAOA,QAAP;AACD;;AAED,SAAS2P,qBAAT,CAA+B3P,QAA/B;AACE,QAAME,QAAQ,GAAG2P,eAAe,CAAC/Y,GAAhB,CAAoBhC,qBAApB,EAA4C6J,KAA5C,EAAjB;AAEAuB,EAAAA,QAAQ,CAAC4P,QAAT,GAAoB9P,QAAQ,CAACuF,MAAT,CAAuCrF,QAAQ,CAACE,QAAhD,CAApB;AACAJ,EAAAA,QAAQ,CAAC+P,WAAT,CAAqBjb,qBAArB,EAA4CoL,QAA5C;AAEA,SAAOA,QAAQ,CAAC4P,QAAhB;AACD;;SCrBeE,0BAA0BhQ;AACxCA,EAAAA,QAAQ,CAACiQ,YAAT,CAAsBvJ,mBAAtB;AACD;;ACDD;;;;;;;;;;;;;;;;;;;;;;;SAsBgBwJ,WAAW1U,QAAmB2U,WAAmB7S;AAC/D,SAAOgH,MAAM,CAAC4L,UAAD,CAAN,CAAmB1U,MAAnB,EAA2B2U,SAA3B,EAAsC7S,UAAtC,CAAP;AACD;;SCzBe8S,aACdC,MACAhY;AAEA,QAAM;AAACN,IAAAA,OAAD;AAAUnB,IAAAA;AAAV,MAAkByB,QAAxB;AAEA,QAAMwK,OAAO,GAAG,IAAIyN,OAAJ,CAAY,CAACvZ,OAAD,EAAUwZ,MAAV;AAC1BF,IAAAA,IAAI,CAACG,EAAL,CAAQ,WAAR,EAAqBzZ,OAArB;AACAsZ,IAAAA,IAAI,CAACG,EAAL,CAAQ,OAAR,EAAiBD,MAAjB;AACD,GAHe,EAGbE,IAHa,CAGR;AACN,UAAM7Z,IAAI,GAAIyZ,IAAI,CAACtY,OAAL,GAAuBnB,IAArC;AAEA,WAAO;AAACmB,MAAAA,OAAO,EAAEM,QAAQ,CAACN,OAAnB;AAAsCnB,MAAAA;AAAtC,KAAP;AACD,GAPe,CAAhB;AASAyZ,EAAAA,IAAI,CAACK,MAAL,CAAY9Z,IAAZ,EAAkBmB,OAAlB;AAEA,SAAO8K,OAAP;AACD;;SCfe8N,iBAAiB3Q;AAC/BA,EAAAA,QAAQ,CAACiQ,YAAT,CAAsBC,UAAtB;AACD;AAEDU,gBAAgB,CAAC;AACf3O,EAAAA,OAAO,EAAEiO,UADM;AAEfW,EAAAA,IAAI,EAAE,CAACnK,mBAAD,CAFS;AAGfjO,EAAAA,KAAK,EAAE/C,aAAa,CAACC,SAHN;AAIf+C,EAAAA,MAAM,EAAE,IAJO;;AAKfoY,EAAAA,UAAU,CAACvC,mBAAD;AACR,WAAOwC,IAAI,CAACC,YAAL,CAAkBzC,mBAAmB,CAAC/I,QAApB,EAAlB,CAAP;AACD;;AAPc,CAAD,CAAhB;AAUO,eAAeyL,gBAAf,CAAgCjR,QAAhC;AACL,QAAM;AAAC3H,IAAAA;AAAD,MAAa2H,QAAnB;AACA,QAAMkR,MAAM,GAAGlR,QAAQ,CAAClJ,GAAT,CAAyBoZ,UAAzB,CAAf;;AAEA,MAAI7X,QAAQ,CAAChD,QAAT,KAAsB,KAAtB,IAA+B6b,MAAnC,EAA2C;AACzC,UAAM;AAACnZ,MAAAA,OAAD;AAAUnB,MAAAA;AAAV,QAAkByB,QAAQ,CAACH,WAAT,EAAxB;AACA8H,IAAAA,QAAQ,CAACpK,MAAT,CAAgBC,KAAhB,2BAAgDkC,WAAWnB,MAA3D;AAEA,UAAMO,OAAO,GAAG,MAAMiZ,YAAY,CAACc,MAAD,EAAS;AAACnZ,MAAAA,OAAD;AAAUnB,MAAAA;AAAV,KAAT,CAAlC;AACAyB,IAAAA,QAAQ,CAACD,WAAT,CAAqBjB,OAArB;AAEA6I,IAAAA,QAAQ,CAACpK,MAAT,CAAgBub,IAAhB,4BAAgDha,OAAO,CAACY,WAAWZ,OAAO,CAACP,MAA3E;AACD;AACF;;AC7BD;;;;;;;;;;;;;;;;;;;;;;;SAsBgBwa,YAAY5V,QAAmB2U,WAAmB7S;AAChE,SAAOgH,MAAM,CAAC8M,WAAD,CAAN,CAAoB5V,MAApB,EAA4B2U,SAA5B,EAAuC7S,UAAvC,CAAP;AACD;;SCtBe+T,kBAAkBrR;AAChCA,EAAAA,QAAQ,CAACiQ,YAAT,CAAsBmB,WAAtB;AACD;AAEDR,gBAAgB,CAAC;AACf3O,EAAAA,OAAO,EAAEmP,WADM;AAEfP,EAAAA,IAAI,EAAE,CAACnK,mBAAD,EAAsB4K,aAAtB,CAFS;AAGf7Y,EAAAA,KAAK,EAAE/C,aAAa,CAACC,SAHN;AAIf+C,EAAAA,MAAM,EAAE,IAJO;;AAKfoY,EAAAA,UAAU,CAACvC,mBAAD,EAA2ClW,QAA3C;AACR,UAAMlB,OAAO,GAAGkB,QAAQ,CAACxB,YAAzB;AAEA,WAAO0a,KAAK,CAACP,YAAN,CAAmB7Z,OAAnB,EAA4BoX,mBAAmB,CAAC/I,QAApB,EAA5B,CAAP;AACD;;AATc,CAAD,CAAhB;AAYO,eAAegM,iBAAf,CAAiCxR,QAAjC;AACL,QAAM;AAAC3H,IAAAA;AAAD,MAAa2H,QAAnB;AACA,QAAMkR,MAAM,GAAGlR,QAAQ,CAAClJ,GAAT,CAA0Bsa,WAA1B,CAAf;;AAEA,MAAI/Y,QAAQ,CAAC/C,SAAT,KAAuB,KAAvB,IAAgC4b,MAApC,EAA4C;AAC1C,UAAM;AAACnZ,MAAAA,OAAD;AAAUnB,MAAAA;AAAV,QAAkByB,QAAQ,CAACC,YAAT,EAAxB;AACA0H,IAAAA,QAAQ,CAACpK,MAAT,CAAgBC,KAAhB,4BAAiDkC,WAAWnB,MAA5D;AAEA,UAAMO,OAAO,GAAG,MAAMiZ,YAAY,CAACc,MAAD,EAAS;AAACnZ,MAAAA,OAAD;AAAUnB,MAAAA;AAAV,KAAT,CAAlC;AACAyB,IAAAA,QAAQ,CAACE,YAAT,CAAsBpB,OAAtB;AAEA6I,IAAAA,QAAQ,CAACpK,MAAT,CAAgBub,IAAhB,6BAAiDha,OAAO,CAACY,WAAWZ,OAAO,CAACP,MAA5E;AACD;AACF;;SChCe6a,YAAYjD;AAC1B,QAAMkD,QAAQ,GAA4B;AACxCC,IAAAA,GAAG,EAAE,OADmC;AAExCC,IAAAA,IAAI,EAAE,QAFkC;AAGxCC,IAAAA,GAAG,EAAE,MAHmC;AAIxCC,IAAAA,MAAM,EAAE,KAJgC;AAKxCC,IAAAA,KAAK,EAAE,SALiC;AAMxCnJ,IAAAA,GAAG,EAAE;AANmC,GAA1C;AASA,QAAMrC,IAAI,GAAGiI,MAAM,CAAC9P,GAAP,CAAYiQ,KAAD;AACtB,UAAM1O,GAAG,GAAG0O,KAAK,CAACtB,MAAN,EAAZ;AACA,UAAMtO,MAAM,GAAGkB,GAAG,CAAClB,MAAJ,CAAWiT,WAAX,EAAf;AAEA/R,IAAAA,GAAG,CAAClB,MAAJ,GAAa;AACX3F,MAAAA,MAAM,EAAE2F,MAAM,CAAC3F,MADJ;AAEXyD,MAAAA,QAAQ,EAAE;AACR,eAAOoV,QAAQ,CAAClT,MAAD,EAAS2S,QAAQ,CAAC3S,MAAD,CAAjB,CAAf;AACD;AAJU,KAAb;AAOA,WAAOkB,GAAP;AACD,GAZY,CAAb;AAcA,QAAMiS,GAAG,GAAG7a,IAAI,CAAC8a,SAAL,CAAe5L,IAAf,EAAqB;AAC/B6L,IAAAA,OAAO,EAAE,CADsB;AAE/BC,IAAAA,MAAM,EAAE;AACNtT,MAAAA,MAAM,EAAE,QADF;AAEN6K,MAAAA,GAAG,EAAE,UAFC;AAGNzG,MAAAA,IAAI,EAAE;AAHA;AAFuB,GAArB,CAAZ;AASA,SAAO,OAAO+O,GAAG,CAACzK,IAAJ,EAAd;AACD;;;;AC9BD,MAAM6K,MAAM,GAAGvM,OAAO,CAAC,MAAD,CAAP,CAAgBwM,EAA/B;;AACA,MAAMC,mBAAmB,GAAIpM,GAAD,IAAcA,GAAG,CAACtP,GAAJ,CAAQ,cAAR,KAA2Bwb,MAAM,GAAGjE,OAAT,CAAiB,KAAjB,EAAwB,EAAxB,CAArE;AAEA;;;;;;;SAKgBoE,cAAczS;;;AAC5B,QAAMwM,aAAa,4BAAGxM,QAAQ,CAACG,WAAT,CAAqBqK,gBAArB,CAAH,qBAAG,sBAAwCpK,QAA9D;AACA,QAAMqM,YAAY,6BAAGzM,QAAQ,CAACG,WAAT,CAAqBqJ,eAArB,CAAH,qBAAG,uBAAuCpJ,QAA5D;AACA,QAAMkL,aAAa,GAAGtL,QAAQ,CAAClJ,GAAT,CAA4B4b,aAA5B,CAAtB;;AACA,eAA+D1S,QAAQ,CAAC3H,QAAT,CAAkBzC,MAAlB,IAA4B,EAA3F;AAAA,QAAM;AAAC+c,IAAAA,YAAY,GAAGH;AAAhB,GAAN;AAAA,QAA8CI,aAA9C;;AAEA,SAAO,MAAOtG,KAAP;AACL,UAAMzT,GAAG,GAAG,IAAIuT,eAAJ;AACVE,MAAAA,KADU;AAEVtI,MAAAA,EAAE,EAAE2O,YAAY,CAACrG,KAAK,CAACtT,OAAP,CAFN;AAGVpD,MAAAA,MAAM,EAAEoK,QAAQ,CAACpK;AAHP,OAIPgd,aAJO;AAKV5S,MAAAA,QALU;AAMVwM,MAAAA,aANU;AAOVC,MAAAA;AAPU,OAAZ;AAUA5T,IAAAA,GAAG,CAAC8B,QAAJ,CAAa2Q,aAAb,GAA6BA,aAA7B;AAEAzS,IAAAA,GAAG,CAAC8B,QAAJ,CAAaoR,KAAb,CAAmB;AACjB,YAAMlT,GAAG,CAACga,IAAJ,CAAS,aAAT,EAAwBha,GAAxB,CAAN;AACA,YAAMA,GAAG,CAAC+B,OAAJ,EAAN;AACD,KAHD;AAKA,UAAM/B,GAAG,CAACga,IAAJ,CAAS,YAAT,EAAuBha,GAAvB,CAAN;AAEA,WAAOA,GAAP;AACD,GArBD;AAsBD;;ACpBD,MAAMia,UAAU,GAAG,CAAC,aAAD,EAAgB,YAAhB,EAA8B,SAA9B,EAAyC,wBAAzC,CAAnB;AASA,MAAM;AAACC,EAAAA,IAAD;AAAOC,EAAAA,KAAP;AAAcC,EAAAA,GAAd;AAAmBC,EAAAA;AAAnB,IAA0BC,UAAU,CAACrc,GAAX,CAAe,WAAf,CAAhC;AASA;;;;;;;;;;MAGsBsc;AASpBpe,EAAAA,YAAY;AAACmO,IAAAA,IAAD;AAAOkQ,IAAAA;AAAP;;;;;;;;;;;;;AAPH,aAAA,GAAe,EAAf;AACC,kBAAA,GAAY,IAAIC,IAAJ,EAAZ;AAOR,SAAKnQ,IAAL,GAAYA,IAAZ;AACA,gEAAkBoQ,KAAK,CAAiBF,SAAjB,EAA4B,SAA5B,CAAvB;AAEA,SAAKhO,MAAL,GAAc,IAAImO,SAAJ,EAAd;AAEA,SAAKC,WAAL,CAAiB7R,eAAjB,EAAkC,0DAAgB9K,GAAhB,CAAoB8K,eAApB,CAAlC,EACG6R,WADH,CACejJ,gBADf,EACiC,0DAAgB1T,GAAhB,CAAoB0T,gBAApB,CADjC,EAEGiJ,WAFH,CAEejK,eAFf,EAEgC,0DAAgB1S,GAAhB,CAAoB0S,eAApB,CAFhC,EAGGiK,WAHH,CAGe5O,cAHf,EAG+B,0DAAgB/N,GAAhB,CAAoB+N,cAApB,CAH/B,EAIG4O,WAJH,CAIe/M,mBAJf,EAIoC,0DAAgB5P,GAAhB,CAAoB4P,mBAApB,CAJpC,EAKG+M,WALH,CAKenF,QALf,EAKyB,0DAAgBxX,GAAhB,CAAoBwX,QAApB,CALzB;AAMD;;AAEW,MAARtO,QAAQ;AACV,uCAAO,IAAP;AACD;;AAEa,MAAV0T,UAAU;AACZ,uCAAO,IAAP;AACD;;AAEM,MAAHtM,GAAG;AACL,WAAO,KAAKpH,QAAL,CAAclJ,GAAd,CAAoD4P,mBAApD,CAAP;AACD;;AAEW,MAAR0I,QAAQ;AACV,WAAO,KAAKpP,QAAL,CAAclJ,GAAd,CAA4BwX,QAA5B,CAAP;AACD;AAED;;;;;;;;;;;;;;;;;;;;;;;AAqBY,MAARjW,QAAQ;AACV,WAAO,KAAK2H,QAAL,CAAc3H,QAArB;AACD;;AAES,MAANzC,MAAM;AACR,WAAO,KAAKoK,QAAL,CAAcpK,MAArB;AACD;;AAEsB,MAAnB+d,mBAAmB;;;AACrB,oCAAO,KAAKtb,QAAL,CAAczC,MAArB,qBAAO,sBAAsB+d,mBAA7B;AACD;;AAEW,SAAL3L,KAAK,CAAsC4L,kBAAtC;AACV,WAAO,IAAIA,kBAAJ,CAAuB;AAC5BzQ,MAAAA,IAAI,EAAErG,MAAM,CAAC8W,kBAAD,CAAN,CAA2BvF,OAA3B,CAAmC,UAAnC,EAA+C,EAA/C,EAAmDvN,WAAnD,EADsB;AAE5BuS,MAAAA,SAAS,EAAEO,kBAAkB,CAACP;AAFF,KAAvB,CAAP;AAID;;AAEDH,EAAAA,GAAG,CAAC,GAAG7Q,IAAJ;AACD,WAAO,KAAKsR,mBAAL,IAA4B,KAAK/d,MAAL,CAAYub,IAAZ,CAAiB,GAAG9O,IAApB,CAAnC;AACD;AAED;;;;;;AAIOwR,EAAAA,aAAa,CAACC,OAAD;AAClB,SAAKzb,QAAL,CAAc/B,cAAd,GAA+B,KAAK+B,QAAL,CAAc/B,cAAd,CAA6B6C,MAA7B,CAAoC2a,OAApC,CAA/B;AAEA,WAAO,IAAP;AACD;AAED;;;;;;;;;;;;;;;;;;;;;;AAoBOC,EAAAA,cAAc,CAACnb,QAAD,EAAmBob,WAAnB;AACnB,SAAK3b,QAAL,CAAcjC,KAAd,CAAoBwC,QAApB,IAAgC,CAAC,KAAKP,QAAL,CAAcjC,KAAd,CAAoBwC,QAApB,KAAiC,EAAlC,EAAsCO,MAAtC,CAA6C6a,WAA7C,CAAhC;AACD;;AAEwB,QAAZC,YAAY;AACvBrE,IAAAA,cAAc,CAAC,KAAK5P,QAAN,CAAd;AAEA,UAAM,KAAKkU,eAAL,EAAN;AACA,UAAM,KAAKC,YAAL,EAAN;AAEA,SAAKC,UAAL;AACA,SAAKC,SAAL;AAEA,UAAM,KAAKC,UAAL,EAAN;AACA,UAAM,KAAKC,SAAL,EAAN;AACD;;AAEiB,QAAZJ,YAAY;AAChB,UAAM;AAACnU,MAAAA;AAAD,QAAa,IAAnB;AACA,UAAM,KAAKwU,QAAL,CAAc,aAAd,CAAN;AAEA,SAAKtB,GAAL,CAAS,iBAAT;AACA,UAAMpG,SAAS,GAAG2H,eAAe,CAACC,aAAa,CAAC,KAAKhB,UAAN,CAAd,CAAjC;AAEA,UAAM1T,QAAQ,CAAC2U,IAAT,CAAc7H,SAAd,EAAyBqC,cAAzB,CAAN;AAEA,SAAK+D,GAAL,CAAS,8BAAT;AAEA,UAAM,KAAKsB,QAAL,CAAc,YAAd,CAAN;AACD;;AAEW,QAAN9D,MAAM;AACV,UAAM,KAAK8D,QAAL,CAAc,eAAd,CAAN;AAEA,UAAM,KAAKI,aAAL,EAAN;AAEA,UAAM,KAAKJ,QAAL,CAAc,cAAd,CAAN;AAEA,UAAM,KAAKK,KAAL,EAAN;AACA5B,IAAAA,GAAG;AACJ;;AAES,QAAJ6B,IAAI;AACR,UAAM,KAAKN,QAAL,CAAc,YAAd,CAAN;AACA,WAAO,KAAKxU,QAAL,CAAcpF,OAAd,EAAP;AACD;;AAEiB,QAALia,KAAK;AAChB,UAAM;AAACE,MAAAA;AAAD,QAAc,IAApB;AAEA,UAAM,KAAKP,QAAL,CAAc,UAAd,CAAN;AACA,UAAM,KAAKxU,QAAL,CAAc6S,IAAd,CAAmB,gBAAnB,CAAN;AAEA,SAAKK,GAAL,eAAuB,IAAII,IAAJ,GAAW0B,OAAX,KAAuBD,SAAS,CAACC,OAAV,OAA9C;AACD;;AAEa,QAARR,QAAQ,CAACS,IAAD,EAAe,GAAG7V,IAAlB;AACZ,UAAM;AAACY,MAAAA,QAAD;AAAW0T,MAAAA;AAAX,QAAyB,IAA/B;AACAR,IAAAA,GAAG,CAAC+B,IAAD,CAAH;;AAEA,QAAI,CAAC,KAAKtB,mBAAV,EAA+B;AAC7B3T,MAAAA,QAAQ,CAACpK,MAAT,CAAgBub,IAAhB,qBAAyC8D,cAAzC;AACD;;;AAGD,QAAIA,IAAI,IAAIvB,UAAZ,EAAwB;AACtB,YAAMA,UAAU,CAACuB,IAAD,CAAV,CAAiB,GAAG7V,IAApB,CAAN;AACD;;;AAGD,SAAK8V,kBAAL,CAAwBD,IAAxB;;AAGA,QAAI,CAACnC,UAAU,CAACzO,QAAX,CAAoB4Q,IAApB,CAAL,EAAgC;AAC9B,YAAMjV,QAAQ,CAAC6S,IAAT,CAAcoC,IAAd,CAAN;AACD;AACF;;AAEgB,QAAXE,WAAW;AACf,UAAM;AAAC9c,MAAAA;AAAD,QAAa,IAAnB;;AAEA,QAAIA,QAAQ,CAACrB,OAAb,EAAsB;AACpB0J,MAAAA,MAAM,CAACC,OAAP,CAAetI,QAAQ,CAACrB,OAAxB,EAAiC2R,OAAjC,CAAyC,CAAC,CAAC3J,IAAD,EAAOoW,KAAP,CAAD;AACvC,WAAGjc,MAAH,CAAUic,KAAV,EAAwBzM,OAAxB,CAAiCxR,OAAD;AAC9B,gBAAMke,IAAI,GACR,OAAOle,OAAP,KAAmB,QAAnB,GACI;AACEme,YAAAA,IAAI,EAAEne;AADR,WADJ,GAIIA,OALN;AAOA,eAAKiY,QAAL,CAAchI,GAAd,CAAkBpQ,OAAlB,CAA0BgI,IAA1B,EAAgCqW,IAAhC;AACD,SATD;AAUD,OAXD;AAYD;AACF;;AAED5B,EAAAA,WAAW,CAAChY,KAAD,EAAmBpD,QAAnB;AACT,SAAKgN,MAAL,CAAY0K,WAAZ,CAAwBtU,KAAxB,EAA+BpD,QAA/B;AAEA,WAAO,IAAP;AACD;;AAE8B,QAAf6b,eAAe;AAC7B,SAAKlU,QAAL,CAAcpK,MAAd,CAAqBC,KAArB,CAA2B,iBAA3B;AAEA,UAAMwd,SAAS,GAAG,MAAMa,eAAe,CAAC,KAAKlU,QAAL,CAAc3H,QAAf,EAAyB,CAAC,SAAD,EAAY,OAAZ,EAAqB,gBAArB,CAAzB,CAAvC;AACA,UAAMmW,MAAM,GAAG6E,SAAS,CAACtW,MAAV,CAAkBmD,QAAD,IAAc,CAAC,CAACA,QAAQ,CAACyO,KAA1C,EAAiDjQ,GAAjD,CAAqD,CAAC;AAACiQ,MAAAA,KAAD;AAAQlT,MAAAA;AAAR,KAAD,MAAqB;AAACkT,MAAAA,KAAD;AAAQlT,MAAAA;AAAR,KAArB,CAArD,CAAf;AAEA,SAAKpD,QAAL,CAAcd,GAAd,CAAkB,QAAlB,EAA4BiX,MAA5B;AACD;AAED;;;;;;;AAKU0G,EAAAA,kBAAkB,CAACD,IAAD;AAC1B,WAAOM,qBAAqB,CAACN,IAAD,EAAO,KAAK5c,QAAZ,EAAsB,mBAAtB,CAArB,CAAgEsQ,OAAhE,CAAwE,CAAC;AAAC5P,MAAAA;AAAD,KAAD;AAC7E,WAAKqO,GAAL,CAASrO,GAAT,CAAaA,GAAb;AACD,KAFM,CAAP;AAGD;;AAESsb,EAAAA,SAAS;AACjB,WAAO,IAAP;AACD;;AAESD,EAAAA,UAAU;AAClB,WAAO,IAAP;AACD;;AAEwB,QAAToB,SAAS,CAACC,MAAD,EAAoBpd,WAAwC,EAA5D;;;AACvB;AACA,4BAAIA,QAAQ,CAACzC,MAAb,aAAI,iBAAiB8f,IAArB,EAA2B;AACzB1C,MAAAA,KAAK;AACLD,MAAAA,IAAI,CAAC,IAAD,CAAJ;AACA1a,MAAAA,QAAQ,CAACzC,MAAT,gBACKyC,QAAQ,CAACzC,MADd;AAEEE,QAAAA,KAAK,EAAE;AAFT;AAID;;AAED,SAAK4Z,cAAL,CAAoB+F,MAApB,eACKpd,QADL;AAEEsd,MAAAA,aAAa,EAAE,KAAKxS;AAFtB;AAIA,SAAKyS,gBAAL,CAAsBH,MAAtB;AAEA,UAAM,KAAKxB,YAAL,EAAN;AAEA,WAAO,IAAP;AACD;;AAE4B,QAAbW,aAAa;AAC3B,UAAMtE,OAAO,CAACvW,GAAR,CAAY,CAACkX,gBAAgB,CAAC,KAAKjR,QAAN,CAAjB,EAAkCwR,iBAAiB,CAAC,KAAKxR,QAAN,CAAnD,CAAZ,CAAN;AACD;;AAEwB,QAATuU,SAAS;;;AACvB,UAAM;AAAC3e,MAAAA,MAAD;AAASwZ,MAAAA;AAAT,QAAqB,IAA3B;;AAEA,QAAI,4BAAC,KAAK/W,QAAL,CAAczC,MAAf,aAAC,uBAAsBigB,oBAAvB,KAA+C,CAAC,KAAKlC,mBAAzD,EAA8E;AAC5E/d,MAAAA,MAAM,CAACub,IAAP,CAAY,kBAAZ;AACAvb,MAAAA,MAAM,CAACub,IAAP,CAAYM,WAAW,CAAC,MAAM,KAAKzR,QAAL,CAAc8V,UAAd,CAAyB,YAAzB,EAAuC1G,QAAQ,CAACL,SAAT,EAAvC,CAAP,CAAvB;AACD;AACF;;AAEyB,QAAVuF,UAAU;;;AACxB;AACA,QAAI,gCAAKjc,QAAL,CAAczC,MAAd,4CAAsBE,KAAtB,MAAgC,KAApC,EAA2C;AACzC,YAAM;AAACigB,QAAAA;AAAD,UAA0B,MAAM,OAAO,+BAAP,CAAtC;AACA,WAAK3O,GAAL,CAASrO,GAAT,CAAagd,qBAAb;AACD;;AAED,SAAK7C,GAAL,CAAS,aAAT;AACA,UAAM,KAAKsB,QAAL,CAAc,mBAAd,CAAN;AAEA,UAAM,KAAKA,QAAL,CAAc,cAAd,CAAN;AAEA,UAAM,KAAKA,QAAL,CAAc,eAAd,CAAN;AAEA,UAAM,KAAKW,WAAL,EAAN;AAEA,UAAM,KAAKX,QAAL,CAAc,kBAAd,CAAN;AACD;;AAES9E,EAAAA,cAAc,CAAC+F,MAAD,EAAoBpd,QAApB;AACtB,UAAM2d,aAAa,GAAGC,gBAAgB,CAACR,MAAD,EAASpd,QAAT,CAAtC;AAEA,8DAAiBqX,cAAc,CAACsG,aAAD,CAA/B;;AAGA,SAAK3Q,MAAL,CAAYsD,OAAZ,CAAqBzI,QAAD;AAClB,WAAKF,QAAL,CAAc+P,WAAd,CAA0B7P,QAAQ,CAACzE,KAAnC,EAA0CyE,QAA1C;AACD,KAFD;AAIA8P,IAAAA,yBAAyB,CAAC,KAAKhQ,QAAN,CAAzB;AACAqR,IAAAA,iBAAiB,CAAC,KAAKrR,QAAN,CAAjB;AACA2Q,IAAAA,gBAAgB,CAAC,KAAK3Q,QAAN,CAAhB;AACD;;AAES4V,EAAAA,gBAAgB,CAACH,MAAD;AACxB,kEAAmB,KAAKzV,QAAL,CAAcuF,MAAd,CAAqBkQ,MAArB,CAAnB;AAEA,SAAKzV,QAAL,CAAc5F,MAAd,CAAqBsa,aAAa,6BAAC,IAAD,4BAAlC;AACA,SAAK1U,QAAL,CAAc5F,MAAd,CAAqBwE,OAAO,6BAAC,IAAD,4BAA5B;AACD;;;;ACtWH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SAuCgBsX,cAAc/e;AAC5B,SAAO,CAACqE,MAAD,EAAcE,WAAd,EAAmC4B,UAAnC;AACL6Y,IAAAA,UAAU,CAACpP,wBAAD,EAA2B;AAAC5P,MAAAA;AAAD,KAA3B,CAAV,CAAgDqE,MAAhD,EAAwDE,WAAxD,EAAqE4B,UAArE;AAEA,WAAOA,UAAP;AACD,GAJD;AAKD;;AC/CD;;;;;;;;;;;;;;;;;;;;;;;;;;;SA0BgB8Y,eAAeC;AAC7B,SAAOH,aAAa,CAAC;AAACI,IAAAA,MAAM,EAAE;AAACD,MAAAA;AAAD;AAAT,GAAD,CAApB;AACD;;ACxBD,SAASE,UAAT,CAAoBpT,IAApB,EAAkCwE,QAAlC;AACE,SAAO;AACLX,IAAAA,MAAM,EAAE,CACN;AACE7D,MAAAA,IADF;AAEEwE,MAAAA;AAFF,KADM;AADH,GAAP;AAQD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SA4CgB6O,cAAcrT,MAAcwE;AAC1C,SAAO,CAAC,GAAGvI,IAAJ;AACL,UAAM,CAAC5D,MAAD,EAASE,WAAT,EAAsB8K,KAAtB,IAA+BpH,IAArC;AACA,UAAMqX,QAAQ,GAAGC,QAAQ,CAACC,aAAT,CAAuBnb,MAAvB,EAA+BE,WAA/B,EAA4C8K,KAA5C,MAAiEzI,KAAlF;AAEAoF,IAAAA,IAAI,GAAI,OAAOA,IAAP,KAAgB,QAAhB,GAA2BpC,SAA3B,GAAuCoC,IAA/C;AAEA,UAAMyT,UAAU,GAAG,CAACzT,IAAD,EAAO,CAACsT,QAAD,IAAa,GAApB,EAAyB1Z,MAAzB,CAAgCC,OAAhC,EAAyCzD,IAAzC,CAA8C,GAA9C,CAAnB;AAEA,UAAMsd,UAAU,GAAGC,aAAa,CAC9BC,mBAAmB,CACjBC,OAAO,CAAC,GAAD,CAAP,CAAaC,WAAb,gLAAA,CADiB,EAIjBC,QAAQ,CAAC,qBAAD,CAJS,EAKjBf,UAAU,CAACpP,wBAAD,EAA2BwP,UAAU,CAACpT,IAAD,EAAOwE,QAAP,CAArC,CALO,CADW,EAQ9BwP,QAAQ,CAAC;AACP1a,MAAAA,SAAS,EAAET,UAAU,CAACmN,KADf;AAEPiO,MAAAA,QAAQ,EAAE,oBAFH;AAGPR,MAAAA,UAHO;AAIPS,MAAAA,aAAa,EAAE;AAJR,KAAD,CARsB,CAAhC;AAgBAR,IAAAA,UAAU,CAAC,GAAGzX,IAAJ,CAAV;AACD,GAzBD;AA0BD;;ACpFD;;;;;;SAKgBkY,WAAWrR;AACzB,SAAOsR,YAAY,CAAmBtR,EAAnB,CAAnB;AACD;;ACPD;;;;;;;;;;;;;;;;;;;SAkBgBuR,WAAW,GAAGve;AAC5B,SAAO6d,aAAa,CAClBW,QAAQ,CAAC,GAAGxe,KAAJ,CADU,EAElBqe,UAAU,CAAE1e,QAAD;AACTA,IAAAA,QAAQ,CAAC3B,WAAT,GAAuBgC,KAAvB;AACD,GAFS,CAFQ,CAApB;AAMD;;ACzBD,SAASye,cAAT,CAAsBlc,MAAtB,EAAsCE,WAAtC,EAAoEic,cAApE;AACE,QAAMngB,IAAI,GAAGkf,QAAQ,CAACkB,gBAAT,CAA0Bpc,MAA1B,EAAkCE,WAAlC,EAA+Cic,cAA/C,CAAb;;AAEA,MAAIE,OAAO,CAACrgB,IAAD,CAAX,EAAmB;AACjB,QAAIsF,MAAM,CAACtF,IAAD,CAAN,KAAiB,kBAArB,EAAyC;AACvC,aAAO;AAACiF,QAAAA,SAAS,EAAET,UAAU,CAAC8b,iBAAvB;AAA0CV,QAAAA,QAAQ,EAAE;AAApD,OAAP;AACD;;AAED,QAAI5f,IAAI,KAAKugB,cAAb,EAA6B;AAC3B,aAAO;AAACtb,QAAAA,SAAS,EAAET,UAAU,CAACgc,aAAvB;AAAsCZ,QAAAA,QAAQ,EAAE;AAAhD,OAAP;AACD;AACF;;AAED,SAAO;AAAC3a,IAAAA,SAAS,EAAET,UAAU,CAACic,QAAvB;AAAiCb,IAAAA,QAAQ,EAAE;AAA3C,GAAP;AACD;;SAWec;AACd,SAAOC,GAAG,EAAV;AACD;SAYeA;AACd,SAAO,CAAC3c,MAAD,EAASE,WAAT,EAAsBic,cAAtB;AACL,UAAM;AAAClb,MAAAA,SAAD;AAAY2a,MAAAA;AAAZ,QAAwBM,cAAY,CAAClc,MAAD,EAASE,WAAT,EAAsBic,cAAtB,CAA1C;AACAR,IAAAA,QAAQ,CAAC;AACP1a,MAAAA,SADO;AAEP2a,MAAAA;AAFO,KAAD,CAAR,CAGG5b,MAHH,EAGWE,WAHX,EAGwBic,cAHxB;AAID,GAND;AAOD;;AC/CD,SAASD,YAAT,CAAsBlc,MAAtB,EAAsCE,WAAtC,EAAoEic,cAApE;AACE,QAAMngB,IAAI,GAAGkf,QAAQ,CAACkB,gBAAT,CAA0Bpc,MAA1B,EAAkCE,WAAlC,EAA+Cic,cAA/C,CAAb;;AAEA,MAAIE,OAAO,CAACrgB,IAAD,CAAX,EAAmB;AACjB,QAAIsF,MAAM,CAACtF,IAAD,CAAN,KAAiB,iBAArB,EAAwC;AACtC,aAAO;AAACiF,QAAAA,SAAS,EAAET,UAAU,CAACoc,gBAAvB;AAAyChB,QAAAA,QAAQ,EAAE;AAAnD,OAAP;AACD;;AAED,QAAI5f,IAAI,KAAK6gB,eAAb,EAA8B;AAC5B,aAAO;AAAC5b,QAAAA,SAAS,EAAET,UAAU,CAACsc,YAAvB;AAAqClB,QAAAA,QAAQ,EAAE;AAA/C,OAAP;AACD;AACF;;AAED,SAAO;AAAC3a,IAAAA,SAAS,EAAET,UAAU,CAACuc,OAAvB;AAAgCnB,IAAAA,QAAQ,EAAE;AAA1C,GAAP;AACD;;SAceoB,QAAQ,GAAGpZ;AACzB;AACA,SAAOqZ,GAAG,CAAC,GAAGrZ,IAAJ,CAAV;AACD;SAeeqZ,IAAI,GAAGrZ;AACrB,QAAM;AAACwX,IAAAA,UAAD;AAAa8B,IAAAA,OAAb;AAAsBC,IAAAA,YAAY,GAAG,KAArC;AAA4CtB,IAAAA,aAAa,GAAG;AAA5D,MAAqEuB,gBAAgB,CAACxZ,IAAD,CAA3F;AAEA,SAAO,CAAC5D,MAAD,EAASE,WAAT,EAAsBic,cAAtB;AACL,UAAM;AAAClb,MAAAA,SAAD;AAAY2a,MAAAA;AAAZ,QAAwBM,YAAY,CAAClc,MAAD,EAASE,WAAT,EAAsBic,cAAtB,CAA1C;AAEAR,IAAAA,QAAQ,CAAC;AACP1a,MAAAA,SADO;AAEP2a,MAAAA,QAFO;AAGPR,MAAAA,UAHO;AAIP8B,MAAAA,OAJO;AAKPC,MAAAA,YALO;AAMPtB,MAAAA;AANO,KAAD,CAAR,CAOG7b,MAPH,EAOWE,WAPX,EAOwBic,cAPxB;AAQD,GAXD;AAYD;;AC/DD;;;;;;;;SAOgBkB;AACd,SAAO1B,QAAQ,CAAC;AACd1a,IAAAA,SAAS,EAAET,UAAU,CAACC,OADR;AAEdmb,IAAAA,QAAQ,EAAE,MAFI;AAGduB,IAAAA,YAAY,EAAE,KAHA;AAIdtB,IAAAA,aAAa,EAAE;AAJD,GAAD,CAAf;AAMD;;ACdD;;;;;;;SAMgByB;AACd,SAAO3B,QAAQ,CAAC;AACd1a,IAAAA,SAAS,EAAET,UAAU,CAACE,GADR;AAEdkb,IAAAA,QAAQ,EAAE,KAFI;AAGdC,IAAAA,aAAa,EAAE,KAHD;AAIdsB,IAAAA,YAAY,EAAE;AAJA,GAAD,CAAf;AAMD;;;;ACfD;;;SAGgBI;MAAoB;AAAChgB,IAAAA,GAAD;AAAMigB,IAAAA;AAAN;MAAqB7hB;;AACvD,sBACKA,OADL;AAEEK,IAAAA,IAAI,EAAEL,OAAO,CAACK,IAAR,IAAgBuB,GAFxB;AAGEwG,IAAAA,cAAc,EAAEpI,OAAO,CAACoI,cAAR,IAA0ByZ;AAH5C;AAKD;;ACAD;;;;MAGaC,qBAAqBC;AAGb,eAAN/T,MAAM,CAAChO,UAAuC,EAAxC;AACjB+hB,IAAAA,MAAM,CAAClZ,QAAP,GAAkBiZ,YAAY,CAACvJ,cAAb,CAA4BvY,OAA5B,CAAlB;AACA,UAAM2V,SAAS,GAAG2H,eAAe,EAAjC;AAEA,UAAMyE,MAAM,CAAClZ,QAAP,CAAgB2U,IAAhB,CAAqB7H,SAArB,EAAgCqC,cAAhC,CAAN;AACD;AAED;;;;;AAGqB,SAAdO,cAAc,CAACrX,WAAgB,EAAjB;AACnB,WAAOqX,cAAc,CAACwJ,MAAM,CAACC,SAAP,CAAiB9gB,QAAjB,CAAD,CAArB;AACD;AAED;;;;;;;;;AAOgB,SAATmd,SAAS,CAAC4D,GAAD,EAAW/gB,WAA4D,EAAvE;AACd,WAAO,eAAeuF,MAAf;AACL,UAAIkS,QAAJ;AACA,YAAMV,QAAQ,GAAiB/W,QAAQ,CAAC+W,QAAT,IAAqB6J,YAAY,CAACI,eAAjE;AAEA;;AACA,UAAI,CAACjK,QAAL,EAAe;AACb,cAAM,IAAI9F,KAAJ,CACJ,6HADI,CAAN;AAGD;;;AAGDwG,MAAAA,QAAQ,GAAG,MAAMsD,eAAe,CAACpL,KAAhB,CAAsBoH,QAAtB,EAAgCoG,SAAhC,CAA0C4D,GAA1C,EAA+CF,MAAM,CAACC,SAAP,CAAiB9gB,QAAjB,CAA/C,CAAjB;;AAEA,UAAI,CAACA,QAAQ,CAACqY,MAAd,EAAsB;AACpB,cAAMZ,QAAQ,CAAC0E,QAAT,CAAkB,eAAlB,CAAN;AACA,cAAM1E,QAAQ,CAAC0E,QAAT,CAAkB,cAAlB,CAAN;AACA,cAAM1E,QAAQ,CAAC+E,KAAT,EAAN;AACD,OAJD,MAIO;AACL,cAAM/E,QAAQ,CAACY,MAAT,EAAN;AACD;;;AAGDwI,MAAAA,MAAM,CAAClZ,QAAP,GAAkB8P,QAAQ,CAAC9P,QAA3B;AACD,KAxBD;AAyBD;AAED;;;;;;;;;;;;;AAWa,SAANsZ,MAAM,CAAIC,OAAJ,EAAoBC,IAApB;AACX,WAAO;AACL,UAAI,CAACN,MAAM,CAACO,WAAP,EAAL,EAA2B;AACzB,cAAMR,YAAY,CAAC9T,MAAb,EAAN;AACD;;AAED,YAAMnF,QAAQ,GAAoBkZ,MAAM,CAAClZ,QAAzC;AACA,YAAM6Q,IAAI,GAAG,EAAb;;AAEA,WAAK,MAAMrV,MAAX,IAAqB+d,OAArB,EAA8B;AAC5B1I,QAAAA,IAAI,CAAC/B,IAAL,CAAU9O,QAAQ,CAACwI,GAAT,CAAahN,MAAb,IAAuBwE,QAAQ,CAAClJ,GAAT,CAAa0E,MAAb,CAAvB,GAA8C,MAAMwE,QAAQ,CAACuF,MAAT,CAAgB/J,MAAhB,CAA9D;AACD;;AAED,aAAO,MAAMge,IAAI,CAAC,GAAG3I,IAAJ,CAAjB;AACD,KAbD;AAcD;AAED;;;;;;;;;;;;;;;;;;AAgBe,SAARrL,QAAQ;;;AACb,mCAAO0T,MAAM,CAAClZ,QAAP,CAAgBlJ,GAAhB,CAAyC4P,mBAAzC,CAAP,qBAAO,qBAA+DlB,QAA/D,EAAP;AACD;;AAEmB,SAAbkU,aAAa,CAACviB,UAAe,EAAhB;AAClB;AACEsJ,MAAAA,OAAO,EAAE,EADX;;AAEE3J,MAAAA,GAAG,CAACmI,GAAD;AACD,eAAO,KAAKwB,OAAL,CAAaxB,GAAG,CAAC6B,WAAJ,EAAb,CAAP;AACD,OAJH;;AAKEzH,MAAAA,OAAO,CAAC+Q,IAAD;AACL,eAAOrE,OAAO,CAAC,SAAD,CAAP,CAAmB,IAAnB,EAAyB4T,KAAzB,CAA+B,GAAGxgB,MAAH,CAAUiR,IAAV,CAA/B,CAAP;AACD;;AAPH,OAQKjT,OARL;AAUD;;AAEoB,SAAdyiB,cAAc,CAACziB,UAAe,EAAhB;AACnB;AACEsJ,MAAAA,OAAO,EAAE,EADX;AAEE4E,MAAAA,MAAM,EAAE,EAFV;AAGEhE,MAAAA,UAAU,EAAE,GAHd;;AAIExG,MAAAA,MAAM,CAACyM,IAAD;AACJ,aAAKjG,UAAL,GAAkBiG,IAAlB;AACA,eAAO,IAAP;AACD,OAPH;;AAQEsD,MAAAA,WAAW,CAACiP,OAAD;AACT,aAAKtiB,GAAL,CAAS,cAAT,EAAyBsiB,OAAzB;AACD,OAVH;;AAWEhP,MAAAA,aAAa,CAACgP,OAAD;AACX,aAAKtiB,GAAL,CAAS,gBAAT,EAA2BsiB,OAA3B;AACD,OAbH;;AAcElY,MAAAA,QAAQ,CAAC9G,MAAD,EAAiBmE,IAAjB;AACN,aAAKqC,UAAL,GAAkBxG,MAAlB;AACA,aAAKtD,GAAL,CAAS,UAAT,EAAqByH,IAArB;AACD,OAjBH;;AAkBE2L,MAAAA,QAAQ,CAAC3L,IAAD;AACN,aAAKzH,GAAL,CAAS,UAAT,EAAqByH,IAArB;AACD,OApBH;;AAqBElI,MAAAA,GAAG,CAACmI,GAAD;AACD,eAAO,KAAKwB,OAAL,CAAaxB,GAAG,CAAC6B,WAAJ,EAAb,CAAP;AACD,OAvBH;;AAwBEU,MAAAA,UAAU;AACR,eAAO,KAAKf,OAAZ;AACD,OA1BH;;AA2BElJ,MAAAA,GAAG,CAAC0H,GAAD,EAActI,KAAd;AACD,aAAK8J,OAAL,CAAaxB,GAAG,CAAC6B,WAAJ,EAAb,IAAkCnK,KAAlC;AACA,eAAO,IAAP;AACD,OA9BH;;AA+BE4U,MAAAA,IAAI,CAAClJ,IAAD;AACF,aAAKA,IAAL,GAAYA,IAAZ;AACD,OAjCH;;AAkCEwJ,MAAAA,IAAI,CAACxJ,IAAD;AACF,aAAKA,IAAL,GAAYA,IAAZ;AACD;;AApCH,OAqCKlL,OArCL;AAuCD;;AAE0B,SAApB2iB,oBAAoB,CAAC3iB,UAAiD,EAAlD;;;AACzB,UAAMmV,KAAK,GAAG;AACZtT,MAAAA,OAAO,EAAE,CAAA7B,OAAO,QAAP,gCAAAA,OAAO,CAAE6B,OAAT,sCAAkBA,OAAlB,MAA6B7B,OAA7B,sCAA6BA,OAAO,CAAEmV,KAAtC,qBAA6B,eAAgBtT,OAA7C,KAAwDigB,YAAY,CAACS,aAAb,EADrD;AAEZ/e,MAAAA,QAAQ,EAAE,CAAAxD,OAAO,QAAP,iCAAAA,OAAO,CAAEwD,QAAT,uCAAmBA,QAAnB,MAA+BxD,OAA/B,uCAA+BA,OAAO,CAAEmV,KAAxC,qBAA+B,gBAAgB3R,QAA/C,KAA2Dse,YAAY,CAACW,cAAb;AAFzD,KAAd;AAKA,UAAM/gB,GAAG,GAAG,IAAIuT,eAAJ;AACVpI,MAAAA,EAAE,EAAE,IADM;AAEVhE,MAAAA,QAAQ,EAAEkZ,MAAM,CAAClZ,QAFP;AAGVpK,MAAAA,MAAM,EAAEsjB,MAAM,CAAClZ,QAAP,CAAgBpK,MAHd;AAIVgU,MAAAA,GAAG,EAAE;AAJK,OAKPzS,OALO;AAMVmV,MAAAA;AANU,OAAZ;AASAzT,IAAAA,GAAG,CAAC8B,QAAJ,CAAa2Q,aAAb,GAA6B2N,YAAY,CAACniB,GAAb,CAAgC4b,aAAhC,CAA7B;AAEA,WAAO7Z,GAAP;AACD;;;;ACrLHgX,eAAe,CAACkK,cAAhB,CAA+BvkB,YAAY,CAACC,UAA5C,EAAwD8X,kBAAxD,EAA4E;AAC1EyM,EAAAA,QAAQ,CAAC9Z,QAAD,EAA+BmF,MAA/B;AACNA,IAAAA,MAAM,CAAC9N,GAAP,CAAWsN,cAAX,EAA2B3E,QAAQ,CAACuF,SAAT,EAA3B;AACD;;AAHyE,CAA5E;;;;"}
@@ -1,10 +0,0 @@
1
- import type { PlatformRouteOptions } from "./PlatformRouteOptions";
2
- /**
3
- * @ignore
4
- */
5
- export interface PlatformRouterMethods<T = any> {
6
- addRoute(routeOptions: PlatformRouteOptions): this;
7
- use(...handlers: any[]): this;
8
- callback(): any;
9
- getRouter(): T;
10
- }
@@ -1 +0,0 @@
1
- export {};
@@ -1,3 +0,0 @@
1
- import { InjectorService } from "@tsed/di";
2
- export declare function createHttpServer(injector: InjectorService): void;
3
- export declare function listenHttpServer(injector: InjectorService): Promise<void>;
@@ -1,3 +0,0 @@
1
- import { InjectorService } from "@tsed/di";
2
- export declare function createHttpsServer(injector: InjectorService): void;
3
- export declare function listenHttpsServer(injector: InjectorService): Promise<void>;
@@ -1,2 +0,0 @@
1
- import { InjectorService } from "@tsed/di";
2
- export declare function createInjector(settings?: Partial<TsED.Configuration>): InjectorService;
@@ -1,2 +0,0 @@
1
- import { InjectorService } from "@tsed/di";
2
- export declare function createPlatformApplication(injector: InjectorService): void;
@@ -1,2 +0,0 @@
1
- import { ControllerProvider } from "../domain/ControllerProvider";
2
- export declare function getControllerPath(basePath: string, provider: ControllerProvider): string;
@@ -1,10 +0,0 @@
1
- /// <reference types="node" />
2
- import Http from "http";
3
- import Https from "https";
4
- export declare function listenServer(http: Http.Server | Https.Server, settings: {
5
- address: string | number;
6
- port: number;
7
- }): Promise<{
8
- address: string;
9
- port: number;
10
- }>;