@loopback/rest 4.0.0-alpha.8 → 5.0.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 (388) hide show
  1. package/CHANGELOG.md +1822 -0
  2. package/LICENSE +1 -1
  3. package/README.md +30 -58
  4. package/dist/body-parsers/body-parser.d.ts +25 -0
  5. package/dist/body-parsers/body-parser.helpers.d.ts +44 -0
  6. package/dist/body-parsers/body-parser.helpers.js +102 -0
  7. package/dist/body-parsers/body-parser.helpers.js.map +1 -0
  8. package/dist/body-parsers/body-parser.js +159 -0
  9. package/dist/body-parsers/body-parser.js.map +1 -0
  10. package/dist/body-parsers/body-parser.json.d.ts +9 -0
  11. package/dist/body-parsers/body-parser.json.js +43 -0
  12. package/dist/body-parsers/body-parser.json.js.map +1 -0
  13. package/dist/body-parsers/body-parser.raw.d.ts +12 -0
  14. package/dist/body-parsers/body-parser.raw.js +39 -0
  15. package/dist/body-parsers/body-parser.raw.js.map +1 -0
  16. package/dist/body-parsers/body-parser.stream.d.ts +12 -0
  17. package/dist/body-parsers/body-parser.stream.js +28 -0
  18. package/dist/body-parsers/body-parser.stream.js.map +1 -0
  19. package/dist/body-parsers/body-parser.text.d.ts +9 -0
  20. package/dist/body-parsers/body-parser.text.js +38 -0
  21. package/dist/body-parsers/body-parser.text.js.map +1 -0
  22. package/dist/body-parsers/body-parser.urlencoded.d.ts +9 -0
  23. package/dist/body-parsers/body-parser.urlencoded.js +36 -0
  24. package/dist/body-parsers/body-parser.urlencoded.js.map +1 -0
  25. package/dist/body-parsers/index.d.ts +8 -0
  26. package/dist/body-parsers/index.js +16 -0
  27. package/dist/body-parsers/index.js.map +1 -0
  28. package/dist/body-parsers/types.d.ts +51 -0
  29. package/dist/body-parsers/types.js +12 -0
  30. package/dist/body-parsers/types.js.map +1 -0
  31. package/dist/coercion/coerce-parameter.d.ts +9 -0
  32. package/dist/coercion/coerce-parameter.js +166 -0
  33. package/dist/coercion/coerce-parameter.js.map +1 -0
  34. package/dist/coercion/utils.d.ts +43 -0
  35. package/dist/coercion/utils.js +96 -0
  36. package/dist/coercion/utils.js.map +1 -0
  37. package/dist/coercion/validator.d.ts +49 -0
  38. package/dist/coercion/validator.js +85 -0
  39. package/dist/coercion/validator.js.map +1 -0
  40. package/dist/http-handler.d.ts +38 -0
  41. package/dist/http-handler.js +68 -0
  42. package/dist/http-handler.js.map +1 -0
  43. package/dist/index.d.ts +36 -1
  44. package/dist/index.js +40 -6
  45. package/dist/index.js.map +1 -0
  46. package/dist/keys.d.ts +198 -0
  47. package/dist/keys.js +202 -0
  48. package/dist/keys.js.map +1 -0
  49. package/dist/parse-json.d.ts +11 -0
  50. package/dist/parse-json.js +42 -0
  51. package/dist/parse-json.js.map +1 -0
  52. package/dist/parser.d.ts +11 -0
  53. package/dist/parser.js +76 -0
  54. package/dist/parser.js.map +1 -0
  55. package/{dist6/src/providers/find-route.d.ts → dist/providers/find-route.provider.d.ts} +3 -1
  56. package/dist/providers/find-route.provider.js +36 -0
  57. package/dist/providers/find-route.provider.js.map +1 -0
  58. package/dist/providers/index.d.ts +6 -0
  59. package/dist/providers/index.js +14 -0
  60. package/dist/providers/index.js.map +1 -0
  61. package/dist/{src/providers/invoke-method.d.ts → providers/invoke-method.provider.d.ts} +3 -1
  62. package/dist/providers/invoke-method.provider.js +30 -0
  63. package/dist/providers/invoke-method.provider.js.map +1 -0
  64. package/dist/providers/log-error.provider.d.ts +6 -0
  65. package/dist/providers/log-error.provider.js +21 -0
  66. package/dist/providers/log-error.provider.js.map +1 -0
  67. package/dist/providers/parse-params.provider.d.ts +15 -0
  68. package/dist/providers/parse-params.provider.js +41 -0
  69. package/dist/providers/parse-params.provider.js.map +1 -0
  70. package/dist/providers/reject.provider.d.ts +10 -0
  71. package/dist/providers/reject.provider.js +47 -0
  72. package/dist/providers/reject.provider.js.map +1 -0
  73. package/dist/{src/providers/send.d.ts → providers/send.provider.d.ts} +1 -4
  74. package/dist/{src/providers/send.js → providers/send.provider.js} +4 -6
  75. package/dist/providers/send.provider.js.map +1 -0
  76. package/dist/request-context.d.ts +36 -0
  77. package/dist/request-context.js +104 -0
  78. package/dist/request-context.js.map +1 -0
  79. package/dist/rest-http-error.d.ts +37 -0
  80. package/dist/rest-http-error.js +51 -0
  81. package/dist/rest-http-error.js.map +1 -0
  82. package/dist/rest.application.d.ts +232 -0
  83. package/dist/rest.application.js +174 -0
  84. package/dist/rest.application.js.map +1 -0
  85. package/dist/rest.component.d.ts +15 -0
  86. package/dist/rest.component.js +72 -0
  87. package/dist/rest.component.js.map +1 -0
  88. package/dist/rest.server.d.ts +443 -0
  89. package/dist/rest.server.js +748 -0
  90. package/dist/rest.server.js.map +1 -0
  91. package/dist/router/base-route.d.ts +29 -0
  92. package/dist/router/base-route.js +41 -0
  93. package/dist/router/base-route.js.map +1 -0
  94. package/dist/router/controller-route.d.ts +61 -0
  95. package/dist/router/controller-route.js +160 -0
  96. package/dist/router/controller-route.js.map +1 -0
  97. package/dist/router/external-express-routes.d.ts +24 -0
  98. package/dist/router/external-express-routes.js +90 -0
  99. package/dist/router/external-express-routes.js.map +1 -0
  100. package/dist/router/handler-route.d.ts +12 -0
  101. package/dist/router/handler-route.js +30 -0
  102. package/dist/router/handler-route.js.map +1 -0
  103. package/dist/router/index.d.ts +14 -0
  104. package/dist/router/index.js +25 -0
  105. package/dist/router/index.js.map +1 -0
  106. package/dist/router/openapi-path.d.ts +14 -0
  107. package/dist/router/openapi-path.js +64 -0
  108. package/dist/router/openapi-path.js.map +1 -0
  109. package/dist/router/redirect-route.d.ts +23 -0
  110. package/dist/router/redirect-route.js +50 -0
  111. package/dist/router/redirect-route.js.map +1 -0
  112. package/dist/router/regexp-router.d.ts +25 -0
  113. package/dist/router/regexp-router.js +84 -0
  114. package/dist/router/regexp-router.js.map +1 -0
  115. package/dist/router/rest-router.d.ts +35 -0
  116. package/dist/{src/internal-types.js → router/rest-router.js} +2 -2
  117. package/dist/router/rest-router.js.map +1 -0
  118. package/dist/router/route-entry.d.ts +46 -0
  119. package/dist/router/route-entry.js +20 -0
  120. package/dist/router/route-entry.js.map +1 -0
  121. package/dist/router/route-sort.d.ts +7 -0
  122. package/dist/router/route-sort.js +75 -0
  123. package/dist/router/route-sort.js.map +1 -0
  124. package/dist/router/router-base.d.ts +42 -0
  125. package/dist/router/router-base.js +101 -0
  126. package/dist/router/router-base.js.map +1 -0
  127. package/dist/router/router-spec.d.ts +3 -0
  128. package/dist/router/router-spec.js +40 -0
  129. package/dist/router/router-spec.js.map +1 -0
  130. package/dist/router/routing-table.d.ts +32 -0
  131. package/dist/router/routing-table.js +86 -0
  132. package/dist/router/routing-table.js.map +1 -0
  133. package/dist/router/trie-router.d.ts +13 -0
  134. package/dist/router/trie-router.js +55 -0
  135. package/dist/router/trie-router.js.map +1 -0
  136. package/dist/router/trie.d.ts +59 -0
  137. package/dist/router/trie.js +180 -0
  138. package/dist/router/trie.js.map +1 -0
  139. package/{dist6/src → dist}/sequence.d.ts +28 -23
  140. package/dist/sequence.js +112 -0
  141. package/dist/sequence.js.map +1 -0
  142. package/dist/spec-enhancers/consolidate.spec-enhancer.d.ts +68 -0
  143. package/dist/spec-enhancers/consolidate.spec-enhancer.js +145 -0
  144. package/dist/spec-enhancers/consolidate.spec-enhancer.js.map +1 -0
  145. package/dist/spec-enhancers/info.spec-enhancer.d.ts +19 -0
  146. package/dist/spec-enhancers/info.spec-enhancer.js +89 -0
  147. package/dist/spec-enhancers/info.spec-enhancer.js.map +1 -0
  148. package/dist/types.d.ts +178 -0
  149. package/dist/types.js +12 -0
  150. package/dist/types.js.map +1 -0
  151. package/dist/validation/ajv-factory.provider.d.ts +12 -0
  152. package/dist/validation/ajv-factory.provider.js +87 -0
  153. package/dist/validation/ajv-factory.provider.js.map +1 -0
  154. package/dist/validation/request-body.validator.d.ts +14 -0
  155. package/dist/validation/request-body.validator.js +161 -0
  156. package/dist/validation/request-body.validator.js.map +1 -0
  157. package/dist/writer.d.ts +9 -0
  158. package/dist/writer.js +62 -0
  159. package/dist/writer.js.map +1 -0
  160. package/package.json +66 -38
  161. package/src/body-parsers/body-parser.helpers.ts +148 -0
  162. package/src/body-parsers/body-parser.json.ts +46 -0
  163. package/src/body-parsers/body-parser.raw.ts +42 -0
  164. package/src/body-parsers/body-parser.stream.ts +27 -0
  165. package/src/body-parsers/body-parser.text.ts +44 -0
  166. package/src/body-parsers/body-parser.ts +208 -0
  167. package/src/body-parsers/body-parser.urlencoded.ts +42 -0
  168. package/src/body-parsers/index.ts +13 -0
  169. package/src/body-parsers/types.ts +60 -0
  170. package/src/coercion/coerce-parameter.ts +207 -0
  171. package/src/coercion/utils.ts +103 -0
  172. package/src/coercion/validator.ts +98 -0
  173. package/src/http-handler.ts +84 -41
  174. package/src/index.ts +37 -30
  175. package/src/keys.ts +273 -20
  176. package/src/parse-json.ts +42 -0
  177. package/src/parser.ts +89 -104
  178. package/src/providers/{find-route.ts → find-route.provider.ts} +10 -7
  179. package/src/providers/index.ts +7 -9
  180. package/src/providers/{invoke-method.ts → invoke-method.provider.ts} +8 -5
  181. package/src/providers/log-error.provider.ts +27 -0
  182. package/src/providers/parse-params.provider.ts +42 -0
  183. package/src/providers/reject.provider.ts +44 -0
  184. package/src/providers/{send.ts → send.provider.ts} +2 -5
  185. package/src/request-context.ts +123 -0
  186. package/src/rest-http-error.ts +87 -0
  187. package/src/rest.application.ts +390 -0
  188. package/src/rest.component.ts +111 -0
  189. package/src/rest.server.ts +1192 -0
  190. package/src/router/base-route.ts +53 -0
  191. package/src/router/controller-route.ts +241 -0
  192. package/src/router/external-express-routes.ts +139 -0
  193. package/src/router/handler-route.ts +44 -0
  194. package/src/router/index.ts +24 -0
  195. package/src/router/openapi-path.ts +67 -0
  196. package/src/router/redirect-route.ts +64 -0
  197. package/src/router/regexp-router.ts +104 -0
  198. package/src/router/rest-router.ts +48 -0
  199. package/src/router/route-entry.ts +74 -0
  200. package/src/router/route-sort.ts +74 -0
  201. package/src/router/router-base.ts +124 -0
  202. package/src/router/router-spec.ts +36 -0
  203. package/src/router/routing-table.ts +83 -279
  204. package/src/router/trie-router.ts +57 -0
  205. package/src/router/trie.ts +233 -0
  206. package/src/sequence.ts +44 -37
  207. package/src/spec-enhancers/consolidate.spec-enhancer.ts +182 -0
  208. package/src/spec-enhancers/info.spec-enhancer.ts +92 -0
  209. package/src/types.ts +216 -0
  210. package/src/validation/ajv-factory.provider.ts +94 -0
  211. package/src/validation/request-body.validator.ts +208 -0
  212. package/src/writer.ts +41 -68
  213. package/api-docs/.DS_Store +0 -0
  214. package/api-docs/apple-touch-icon-114x114-precomposed.png +0 -0
  215. package/api-docs/apple-touch-icon-144x144-precomposed.png +0 -0
  216. package/api-docs/apple-touch-icon-57x57-precomposed.png +0 -0
  217. package/api-docs/apple-touch-icon-72x72-precomposed.png +0 -0
  218. package/api-docs/apple-touch-icon-precomposed.png +0 -0
  219. package/api-docs/apple-touch-icon.png +0 -0
  220. package/api-docs/css/bootstrap.min.css +0 -9
  221. package/api-docs/css/code-themes/arta.css +0 -158
  222. package/api-docs/css/code-themes/ascetic.css +0 -50
  223. package/api-docs/css/code-themes/brown_paper.css +0 -104
  224. package/api-docs/css/code-themes/brown_papersq.png +0 -0
  225. package/api-docs/css/code-themes/dark.css +0 -103
  226. package/api-docs/css/code-themes/default.css +0 -135
  227. package/api-docs/css/code-themes/far.css +0 -111
  228. package/api-docs/css/code-themes/github.css +0 -127
  229. package/api-docs/css/code-themes/googlecode.css +0 -144
  230. package/api-docs/css/code-themes/idea.css +0 -121
  231. package/api-docs/css/code-themes/ir_black.css +0 -104
  232. package/api-docs/css/code-themes/magula.css +0 -121
  233. package/api-docs/css/code-themes/monokai.css +0 -114
  234. package/api-docs/css/code-themes/pojoaque.css +0 -104
  235. package/api-docs/css/code-themes/pojoaque.jpg +0 -0
  236. package/api-docs/css/code-themes/rainbow.css +0 -114
  237. package/api-docs/css/code-themes/school_book.css +0 -111
  238. package/api-docs/css/code-themes/school_book.png +0 -0
  239. package/api-docs/css/code-themes/sl-theme.css +0 -45
  240. package/api-docs/css/code-themes/solarized_dark.css +0 -88
  241. package/api-docs/css/code-themes/solarized_light.css +0 -88
  242. package/api-docs/css/code-themes/sunburst.css +0 -158
  243. package/api-docs/css/code-themes/tomorrow-night-blue.css +0 -52
  244. package/api-docs/css/code-themes/tomorrow-night-bright.css +0 -51
  245. package/api-docs/css/code-themes/tomorrow-night-eighties.css +0 -51
  246. package/api-docs/css/code-themes/tomorrow-night.css +0 -52
  247. package/api-docs/css/code-themes/tomorrow.css +0 -49
  248. package/api-docs/css/code-themes/vs.css +0 -86
  249. package/api-docs/css/code-themes/xcode.css +0 -154
  250. package/api-docs/css/code-themes/zenburn.css +0 -115
  251. package/api-docs/css/main.css +0 -139
  252. package/api-docs/favicon.ico +0 -0
  253. package/api-docs/fonts/0ihfXUL2emPh0ROJezvraLO3LdcAZYWl9Si6vvxL-qU.woff +0 -0
  254. package/api-docs/fonts/OsJ2DjdpjqFRVUSto6IffLO3LdcAZYWl9Si6vvxL-qU.woff +0 -0
  255. package/api-docs/fonts/_aijTyevf54tkVDLy-dlnLO3LdcAZYWl9Si6vvxL-qU.woff +0 -0
  256. package/api-docs/index.html +0 -7082
  257. package/api-docs/js/main.js +0 -19
  258. package/api-docs/js/vendor/bootstrap.min.js +0 -6
  259. package/api-docs/js/vendor/jquery-1.10.1.min.js +0 -6
  260. package/api-docs/js/vendor/jquery.scrollTo-1.4.3.1.js +0 -218
  261. package/api-docs/js/vendor/modernizr-2.6.2-respond-1.1.0.min.js +0 -11
  262. package/dist/src/http-handler.d.ts +0 -19
  263. package/dist/src/http-handler.js +0 -43
  264. package/dist/src/http-handler.js.map +0 -1
  265. package/dist/src/index.d.ts +0 -14
  266. package/dist/src/index.js +0 -33
  267. package/dist/src/index.js.map +0 -1
  268. package/dist/src/internal-types.d.ts +0 -67
  269. package/dist/src/internal-types.js.map +0 -1
  270. package/dist/src/keys.d.ts +0 -22
  271. package/dist/src/keys.js +0 -35
  272. package/dist/src/keys.js.map +0 -1
  273. package/dist/src/parser.d.ts +0 -11
  274. package/dist/src/parser.js +0 -98
  275. package/dist/src/parser.js.map +0 -1
  276. package/dist/src/providers/bind-element.d.ts +0 -7
  277. package/dist/src/providers/bind-element.js +0 -34
  278. package/dist/src/providers/bind-element.js.map +0 -1
  279. package/dist/src/providers/find-route.d.ts +0 -9
  280. package/dist/src/providers/find-route.js +0 -42
  281. package/dist/src/providers/find-route.js.map +0 -1
  282. package/dist/src/providers/get-from-context.d.ts +0 -7
  283. package/dist/src/providers/get-from-context.js +0 -34
  284. package/dist/src/providers/get-from-context.js.map +0 -1
  285. package/dist/src/providers/index.d.ts +0 -8
  286. package/dist/src/providers/index.js +0 -18
  287. package/dist/src/providers/index.js.map +0 -1
  288. package/dist/src/providers/invoke-method.js +0 -36
  289. package/dist/src/providers/invoke-method.js.map +0 -1
  290. package/dist/src/providers/log-error-provider.d.ts +0 -6
  291. package/dist/src/providers/log-error-provider.js +0 -17
  292. package/dist/src/providers/log-error-provider.js.map +0 -1
  293. package/dist/src/providers/parse-params.d.ts +0 -13
  294. package/dist/src/providers/parse-params.js +0 -22
  295. package/dist/src/providers/parse-params.js.map +0 -1
  296. package/dist/src/providers/reject.d.ts +0 -6
  297. package/dist/src/providers/reject.js +0 -40
  298. package/dist/src/providers/reject.js.map +0 -1
  299. package/dist/src/providers/send.js.map +0 -1
  300. package/dist/src/rest-component.d.ts +0 -12
  301. package/dist/src/rest-component.js +0 -50
  302. package/dist/src/rest-component.js.map +0 -1
  303. package/dist/src/rest-server.d.ts +0 -211
  304. package/dist/src/rest-server.js +0 -426
  305. package/dist/src/rest-server.js.map +0 -1
  306. package/dist/src/router/metadata.d.ts +0 -150
  307. package/dist/src/router/metadata.js +0 -410
  308. package/dist/src/router/metadata.js.map +0 -1
  309. package/dist/src/router/routing-table.d.ts +0 -68
  310. package/dist/src/router/routing-table.js +0 -204
  311. package/dist/src/router/routing-table.js.map +0 -1
  312. package/dist/src/sequence.d.ts +0 -81
  313. package/dist/src/sequence.js +0 -104
  314. package/dist/src/sequence.js.map +0 -1
  315. package/dist/src/writer.d.ts +0 -17
  316. package/dist/src/writer.js +0 -87
  317. package/dist/src/writer.js.map +0 -1
  318. package/dist6/index.d.ts +0 -1
  319. package/dist6/index.js +0 -12
  320. package/dist6/src/http-handler.d.ts +0 -19
  321. package/dist6/src/http-handler.js +0 -53
  322. package/dist6/src/http-handler.js.map +0 -1
  323. package/dist6/src/index.d.ts +0 -14
  324. package/dist6/src/index.js +0 -33
  325. package/dist6/src/index.js.map +0 -1
  326. package/dist6/src/internal-types.d.ts +0 -67
  327. package/dist6/src/internal-types.js +0 -7
  328. package/dist6/src/internal-types.js.map +0 -1
  329. package/dist6/src/keys.d.ts +0 -22
  330. package/dist6/src/keys.js +0 -35
  331. package/dist6/src/keys.js.map +0 -1
  332. package/dist6/src/parser.d.ts +0 -11
  333. package/dist6/src/parser.js +0 -108
  334. package/dist6/src/parser.js.map +0 -1
  335. package/dist6/src/providers/bind-element.d.ts +0 -7
  336. package/dist6/src/providers/bind-element.js +0 -34
  337. package/dist6/src/providers/bind-element.js.map +0 -1
  338. package/dist6/src/providers/find-route.js +0 -42
  339. package/dist6/src/providers/find-route.js.map +0 -1
  340. package/dist6/src/providers/get-from-context.d.ts +0 -7
  341. package/dist6/src/providers/get-from-context.js +0 -34
  342. package/dist6/src/providers/get-from-context.js.map +0 -1
  343. package/dist6/src/providers/index.d.ts +0 -8
  344. package/dist6/src/providers/index.js +0 -18
  345. package/dist6/src/providers/index.js.map +0 -1
  346. package/dist6/src/providers/invoke-method.d.ts +0 -7
  347. package/dist6/src/providers/invoke-method.js +0 -44
  348. package/dist6/src/providers/invoke-method.js.map +0 -1
  349. package/dist6/src/providers/log-error-provider.d.ts +0 -6
  350. package/dist6/src/providers/log-error-provider.js +0 -17
  351. package/dist6/src/providers/log-error-provider.js.map +0 -1
  352. package/dist6/src/providers/parse-params.d.ts +0 -13
  353. package/dist6/src/providers/parse-params.js +0 -22
  354. package/dist6/src/providers/parse-params.js.map +0 -1
  355. package/dist6/src/providers/reject.d.ts +0 -6
  356. package/dist6/src/providers/reject.js +0 -40
  357. package/dist6/src/providers/reject.js.map +0 -1
  358. package/dist6/src/providers/send.d.ts +0 -15
  359. package/dist6/src/providers/send.js +0 -24
  360. package/dist6/src/providers/send.js.map +0 -1
  361. package/dist6/src/rest-component.d.ts +0 -12
  362. package/dist6/src/rest-component.js +0 -50
  363. package/dist6/src/rest-component.js.map +0 -1
  364. package/dist6/src/rest-server.d.ts +0 -211
  365. package/dist6/src/rest-server.js +0 -444
  366. package/dist6/src/rest-server.js.map +0 -1
  367. package/dist6/src/router/metadata.d.ts +0 -150
  368. package/dist6/src/router/metadata.js +0 -410
  369. package/dist6/src/router/metadata.js.map +0 -1
  370. package/dist6/src/router/routing-table.d.ts +0 -68
  371. package/dist6/src/router/routing-table.js +0 -218
  372. package/dist6/src/router/routing-table.js.map +0 -1
  373. package/dist6/src/sequence.js +0 -114
  374. package/dist6/src/sequence.js.map +0 -1
  375. package/dist6/src/writer.d.ts +0 -17
  376. package/dist6/src/writer.js +0 -87
  377. package/dist6/src/writer.js.map +0 -1
  378. package/index.d.ts +0 -6
  379. package/index.js +0 -9
  380. package/src/internal-types.ts +0 -96
  381. package/src/providers/bind-element.ts +0 -15
  382. package/src/providers/get-from-context.ts +0 -16
  383. package/src/providers/log-error-provider.ts +0 -23
  384. package/src/providers/parse-params.ts +0 -20
  385. package/src/providers/reject.ts +0 -27
  386. package/src/rest-component.ts +0 -54
  387. package/src/rest-server.ts +0 -584
  388. package/src/router/metadata.ts +0 -517
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ // Copyright IBM Corp. 2018,2020. All Rights Reserved.
3
+ // Node module: @loopback/rest
4
+ // This file is licensed under the MIT License.
5
+ // License text available at https://opensource.org/licenses/MIT
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.RestHttpErrors = void 0;
8
+ const tslib_1 = require("tslib");
9
+ const http_errors_1 = tslib_1.__importDefault(require("http-errors"));
10
+ var RestHttpErrors;
11
+ (function (RestHttpErrors) {
12
+ function invalidData(data, name, extraProperties) {
13
+ const msg = `Invalid data ${JSON.stringify(data)} for parameter ${name}!`;
14
+ return Object.assign(new http_errors_1.default.BadRequest(msg), {
15
+ code: 'INVALID_PARAMETER_VALUE',
16
+ parameterName: name,
17
+ }, extraProperties);
18
+ }
19
+ RestHttpErrors.invalidData = invalidData;
20
+ function unsupportedMediaType(contentType, allowedTypes = []) {
21
+ const msg = (allowedTypes === null || allowedTypes === void 0 ? void 0 : allowedTypes.length) ? `Content-type ${contentType} does not match [${allowedTypes}].`
22
+ : `Content-type ${contentType} is not supported.`;
23
+ return Object.assign(new http_errors_1.default.UnsupportedMediaType(msg), {
24
+ code: 'UNSUPPORTED_MEDIA_TYPE',
25
+ contentType: contentType,
26
+ allowedMediaTypes: allowedTypes,
27
+ });
28
+ }
29
+ RestHttpErrors.unsupportedMediaType = unsupportedMediaType;
30
+ function missingRequired(name) {
31
+ const msg = `Required parameter ${name} is missing!`;
32
+ return Object.assign(new http_errors_1.default.BadRequest(msg), {
33
+ code: 'MISSING_REQUIRED_PARAMETER',
34
+ parameterName: name,
35
+ });
36
+ }
37
+ RestHttpErrors.missingRequired = missingRequired;
38
+ function invalidParamLocation(location) {
39
+ const msg = `Parameters with "in: ${location}" are not supported yet.`;
40
+ return new http_errors_1.default.NotImplemented(msg);
41
+ }
42
+ RestHttpErrors.invalidParamLocation = invalidParamLocation;
43
+ RestHttpErrors.INVALID_REQUEST_BODY_MESSAGE = 'The request body is invalid. See error object `details` property for more info.';
44
+ function invalidRequestBody() {
45
+ return Object.assign(new http_errors_1.default.UnprocessableEntity(RestHttpErrors.INVALID_REQUEST_BODY_MESSAGE), {
46
+ code: 'VALIDATION_FAILED',
47
+ });
48
+ }
49
+ RestHttpErrors.invalidRequestBody = invalidRequestBody;
50
+ })(RestHttpErrors = exports.RestHttpErrors || (exports.RestHttpErrors = {}));
51
+ //# sourceMappingURL=rest-http-error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rest-http-error.js","sourceRoot":"","sources":["../src/rest-http-error.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,8BAA8B;AAC9B,+CAA+C;AAC/C,gEAAgE;;;;AAEhE,sEAAqC;AAErC,IAAiB,cAAc,CA+E9B;AA/ED,WAAiB,cAAc;IAC7B,SAAgB,WAAW,CACzB,IAAO,EACP,IAAY,EACZ,eAAuB;QAEvB,MAAM,GAAG,GAAG,gBAAgB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,kBAAkB,IAAI,GAAG,CAAC;QAC1E,OAAO,MAAM,CAAC,MAAM,CAClB,IAAI,qBAAU,CAAC,UAAU,CAAC,GAAG,CAAC,EAC9B;YACE,IAAI,EAAE,yBAAyB;YAC/B,aAAa,EAAE,IAAI;SACpB,EACD,eAAe,CAChB,CAAC;IACJ,CAAC;IAde,0BAAW,cAc1B,CAAA;IAED,SAAgB,oBAAoB,CAClC,WAAmB,EACnB,eAAyB,EAAE;QAE3B,MAAM,GAAG,GAAG,CAAA,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,MAAM,EAC9B,CAAC,CAAC,gBAAgB,WAAW,oBAAoB,YAAY,IAAI;YACjE,CAAC,CAAC,gBAAgB,WAAW,oBAAoB,CAAC;QACpD,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,qBAAU,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE;YAC7D,IAAI,EAAE,wBAAwB;YAC9B,WAAW,EAAE,WAAW;YACxB,iBAAiB,EAAE,YAAY;SAChC,CAAC,CAAC;IACL,CAAC;IAZe,mCAAoB,uBAYnC,CAAA;IAED,SAAgB,eAAe,CAAC,IAAY;QAC1C,MAAM,GAAG,GAAG,sBAAsB,IAAI,cAAc,CAAC;QACrD,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,qBAAU,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;YACnD,IAAI,EAAE,4BAA4B;YAClC,aAAa,EAAE,IAAI;SACpB,CAAC,CAAC;IACL,CAAC;IANe,8BAAe,kBAM9B,CAAA;IAED,SAAgB,oBAAoB,CAAC,QAAgB;QACnD,MAAM,GAAG,GAAG,wBAAwB,QAAQ,0BAA0B,CAAC;QACvE,OAAO,IAAI,qBAAU,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;IAC5C,CAAC;IAHe,mCAAoB,uBAGnC,CAAA;IAEY,2CAA4B,GACvC,iFAAiF,CAAC;IACpF,SAAgB,kBAAkB;QAChC,OAAO,MAAM,CAAC,MAAM,CAClB,IAAI,qBAAU,CAAC,mBAAmB,CAAC,eAAA,4BAA4B,CAAC,EAChE;YACE,IAAI,EAAE,mBAAmB;SAC1B,CACF,CAAC;IACJ,CAAC;IAPe,iCAAkB,qBAOjC,CAAA;AA0BH,CAAC,EA/EgB,cAAc,GAAd,sBAAc,KAAd,sBAAc,QA+E9B"}
@@ -0,0 +1,232 @@
1
+ import { Binding, BindingAddress, Constructor, Context, Provider } from '@loopback/context';
2
+ import { Application, ApplicationConfig, Server } from '@loopback/core';
3
+ import { ExpressMiddlewareFactory, ExpressRequestHandler, Middleware, MiddlewareBindingOptions } from '@loopback/express';
4
+ import { OpenApiSpec, OperationObject } from '@loopback/openapi-v3';
5
+ import { PathParams } from 'express-serve-static-core';
6
+ import { ServeStaticOptions } from 'serve-static';
7
+ import { BodyParser } from './body-parsers';
8
+ import { RestBindings } from './keys';
9
+ import { HttpRequestListener, HttpServerLike, RestServer } from './rest.server';
10
+ import { ControllerClass, ControllerFactory, RouteEntry } from './router';
11
+ import { RouterSpec } from './router/router-spec';
12
+ import { SequenceFunction, SequenceHandler } from './sequence';
13
+ export declare const ERR_NO_MULTI_SERVER: string;
14
+ export declare const SequenceActions: typeof RestBindings.SequenceActions;
15
+ /**
16
+ * An implementation of the Application class that automatically provides
17
+ * an instance of a REST server. This application class is intended to be
18
+ * a single-server implementation. Any attempt to bind additional servers
19
+ * will throw an error.
20
+ *
21
+ */
22
+ export declare class RestApplication extends Application implements HttpServerLike {
23
+ /**
24
+ * The main REST server instance providing REST API for this application.
25
+ */
26
+ get restServer(): RestServer;
27
+ /**
28
+ * Handle incoming HTTP(S) request by invoking the corresponding
29
+ * Controller method via the configured Sequence.
30
+ *
31
+ * @example
32
+ *
33
+ * ```ts
34
+ * const app = new RestApplication();
35
+ * // setup controllers, etc.
36
+ *
37
+ * const server = http.createServer(app.requestHandler);
38
+ * server.listen(3000);
39
+ * ```
40
+ *
41
+ * @param req - The request.
42
+ * @param res - The response.
43
+ */
44
+ get requestHandler(): HttpRequestListener;
45
+ /**
46
+ * Create a REST application with the given parent context
47
+ * @param parent - Parent context
48
+ */
49
+ constructor(parent: Context);
50
+ /**
51
+ * Create a REST application with the given configuration and parent context
52
+ * @param config - Application configuration
53
+ * @param parent - Parent context
54
+ */
55
+ constructor(config?: ApplicationConfig, parent?: Context);
56
+ server(server: Constructor<Server>, name?: string): Binding;
57
+ sequence(sequence: Constructor<SequenceHandler>): Binding;
58
+ handler(handlerFn: SequenceFunction): void;
59
+ /**
60
+ * Mount static assets to the REST server.
61
+ * See https://expressjs.com/en/4x/api.html#express.static
62
+ * @param path - The path(s) to serve the asset.
63
+ * See examples at https://expressjs.com/en/4x/api.html#path-examples
64
+ * To avoid performance penalty, `/` is not allowed for now.
65
+ * @param rootDir - The root directory from which to serve static assets
66
+ * @param options - Options for serve-static
67
+ */
68
+ static(path: PathParams, rootDir: string, options?: ServeStaticOptions): void;
69
+ /**
70
+ * Bind a body parser to the server context
71
+ * @param parserClass - Body parser class
72
+ * @param address - Optional binding address
73
+ */
74
+ bodyParser(bodyParserClass: Constructor<BodyParser>, address?: BindingAddress<BodyParser>): Binding<BodyParser>;
75
+ /**
76
+ * Configure the `basePath` for the rest server
77
+ * @param path - Base path
78
+ */
79
+ basePath(path?: string): void;
80
+ /**
81
+ * Bind an Express middleware to this server context
82
+ *
83
+ * @example
84
+ * ```ts
85
+ * import myExpressMiddlewareFactory from 'my-express-middleware';
86
+ * const myExpressMiddlewareConfig= {};
87
+ * const myExpressMiddleware = myExpressMiddlewareFactory(myExpressMiddlewareConfig);
88
+ * server.expressMiddleware('middleware.express.my', myExpressMiddleware);
89
+ * ```
90
+ * @param key - Middleware binding key
91
+ * @param middleware - Express middleware handler function(s)
92
+ *
93
+ */
94
+ expressMiddleware(key: BindingAddress, middleware: ExpressRequestHandler | ExpressRequestHandler[], options?: MiddlewareBindingOptions): Binding<Middleware>;
95
+ /**
96
+ * Bind an Express middleware to this server context
97
+ *
98
+ * @example
99
+ * ```ts
100
+ * import myExpressMiddlewareFactory from 'my-express-middleware';
101
+ * const myExpressMiddlewareConfig= {};
102
+ * server.expressMiddleware(myExpressMiddlewareFactory, myExpressMiddlewareConfig);
103
+ * ```
104
+ * @param middlewareFactory - Middleware module name or factory function
105
+ * @param middlewareConfig - Middleware config
106
+ * @param options - Options for registration
107
+ *
108
+ * @typeParam CFG - Configuration type
109
+ */
110
+ expressMiddleware<CFG>(middlewareFactory: ExpressMiddlewareFactory<CFG>, middlewareConfig?: CFG, options?: MiddlewareBindingOptions): Binding<Middleware>;
111
+ /**
112
+ * Register a middleware function or provider class
113
+ *
114
+ * @example
115
+ * ```ts
116
+ * const log: Middleware = async (requestCtx, next) {
117
+ * // ...
118
+ * }
119
+ * server.middleware(log);
120
+ * ```
121
+ *
122
+ * @param middleware - Middleware function or provider class
123
+ * @param options - Middleware binding options
124
+ */
125
+ middleware(middleware: Middleware | Constructor<Provider<Middleware>>, options?: MiddlewareBindingOptions): Binding<Middleware>;
126
+ /**
127
+ * Register a new Controller-based route.
128
+ *
129
+ * @example
130
+ * ```ts
131
+ * class MyController {
132
+ * greet(name: string) {
133
+ * return `hello ${name}`;
134
+ * }
135
+ * }
136
+ * app.route('get', '/greet', operationSpec, MyController, 'greet');
137
+ * ```
138
+ *
139
+ * @param verb - HTTP verb of the endpoint
140
+ * @param path - URL path of the endpoint
141
+ * @param spec - The OpenAPI spec describing the endpoint (operation)
142
+ * @param controllerCtor - Controller constructor
143
+ * @param controllerFactory - A factory function to create controller instance
144
+ * @param methodName - The name of the controller method
145
+ */
146
+ route<T>(verb: string, path: string, spec: OperationObject, controllerCtor: ControllerClass<T>, controllerFactory: ControllerFactory<T>, methodName: string): Binding;
147
+ /**
148
+ * Register a new route invoking a handler function.
149
+ *
150
+ * @example
151
+ * ```ts
152
+ * function greet(name: string) {
153
+ * return `hello ${name}`;
154
+ * }
155
+ * app.route('get', '/', operationSpec, greet);
156
+ * ```
157
+ *
158
+ * @param verb - HTTP verb of the endpoint
159
+ * @param path - URL path of the endpoint
160
+ * @param spec - The OpenAPI spec describing the endpoint (operation)
161
+ * @param handler - The function to invoke with the request parameters
162
+ * described in the spec.
163
+ */
164
+ route(verb: string, path: string, spec: OperationObject, handler: Function): Binding;
165
+ /**
166
+ * Register a new route.
167
+ *
168
+ * @example
169
+ * ```ts
170
+ * function greet(name: string) {
171
+ * return `hello ${name}`;
172
+ * }
173
+ * const route = new Route('get', '/', operationSpec, greet);
174
+ * app.route(route);
175
+ * ```
176
+ *
177
+ * @param route - The route to add.
178
+ */
179
+ route(route: RouteEntry): Binding;
180
+ /**
181
+ * Register a new route.
182
+ *
183
+ * @example
184
+ * ```ts
185
+ * function greet(name: string) {
186
+ * return `hello ${name}`;
187
+ * }
188
+ * app.route('get', '/', operationSpec, greet);
189
+ * ```
190
+ */
191
+ route(verb: string, path: string, spec: OperationObject, handler: Function): Binding;
192
+ /**
193
+ * Register a route redirecting callers to a different URL.
194
+ *
195
+ * @example
196
+ * ```ts
197
+ * app.redirect('/explorer', '/explorer/');
198
+ * ```
199
+ *
200
+ * @param fromPath - URL path of the redirect endpoint
201
+ * @param toPathOrUrl - Location (URL path or full URL) where to redirect to.
202
+ * If your server is configured with a custom `basePath`, then the base path
203
+ * is prepended to the target location.
204
+ * @param statusCode - HTTP status code to respond with,
205
+ * defaults to 303 (See Other).
206
+ */
207
+ redirect(fromPath: string, toPathOrUrl: string, statusCode?: number): Binding;
208
+ /**
209
+ * Set the OpenAPI specification that defines the REST API schema for this
210
+ * application. All routes, parameter definitions and return types will be
211
+ * defined in this way.
212
+ *
213
+ * Note that this will override any routes defined via decorators at the
214
+ * controller level (this function takes precedent).
215
+ *
216
+ * @param spec - The OpenAPI specification, as an object.
217
+ * @returns Binding for the api spec
218
+ */
219
+ api(spec: OpenApiSpec): Binding;
220
+ /**
221
+ * Mount an Express router to expose additional REST endpoints handled
222
+ * via legacy Express-based stack.
223
+ *
224
+ * @param basePath - Path where to mount the router at, e.g. `/` or `/api`.
225
+ * @param router - The Express router to handle the requests.
226
+ * @param spec - A partial OpenAPI spec describing endpoints provided by the
227
+ * router. LoopBack will prepend `basePath` to all endpoints automatically.
228
+ * This argument is optional. You can leave it out if you don't want to
229
+ * document the routes.
230
+ */
231
+ mountExpressRouter(basePath: string, router: ExpressRequestHandler, spec?: RouterSpec): void;
232
+ }
@@ -0,0 +1,174 @@
1
+ "use strict";
2
+ // Copyright IBM Corp. 2018,2019. All Rights Reserved.
3
+ // Node module: @loopback/rest
4
+ // This file is licensed under the MIT License.
5
+ // License text available at https://opensource.org/licenses/MIT
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.RestApplication = exports.SequenceActions = exports.ERR_NO_MULTI_SERVER = void 0;
8
+ const core_1 = require("@loopback/core");
9
+ const util_1 = require("util");
10
+ const keys_1 = require("./keys");
11
+ const rest_component_1 = require("./rest.component");
12
+ exports.ERR_NO_MULTI_SERVER = util_1.format('RestApplication does not support multiple servers!', 'To create your own server bindings, please extend the Application class.');
13
+ // To help cut down on verbosity!
14
+ exports.SequenceActions = keys_1.RestBindings.SequenceActions;
15
+ /**
16
+ * An implementation of the Application class that automatically provides
17
+ * an instance of a REST server. This application class is intended to be
18
+ * a single-server implementation. Any attempt to bind additional servers
19
+ * will throw an error.
20
+ *
21
+ */
22
+ class RestApplication extends core_1.Application {
23
+ /**
24
+ * The main REST server instance providing REST API for this application.
25
+ */
26
+ get restServer() {
27
+ // FIXME(kjdelisle): I attempted to mimic the pattern found in RestServer
28
+ // with no success, so until I've got a better way, this is functional.
29
+ return this.getSync('servers.RestServer');
30
+ }
31
+ /**
32
+ * Handle incoming HTTP(S) request by invoking the corresponding
33
+ * Controller method via the configured Sequence.
34
+ *
35
+ * @example
36
+ *
37
+ * ```ts
38
+ * const app = new RestApplication();
39
+ * // setup controllers, etc.
40
+ *
41
+ * const server = http.createServer(app.requestHandler);
42
+ * server.listen(3000);
43
+ * ```
44
+ *
45
+ * @param req - The request.
46
+ * @param res - The response.
47
+ */
48
+ get requestHandler() {
49
+ return this.restServer.requestHandler;
50
+ }
51
+ constructor(configOrParent, parent) {
52
+ super(configOrParent, parent);
53
+ this.component(rest_component_1.RestComponent);
54
+ }
55
+ server(server, name) {
56
+ if (this.findByTag('server').length > 0) {
57
+ throw new Error(exports.ERR_NO_MULTI_SERVER);
58
+ }
59
+ return super.server(server, name);
60
+ }
61
+ sequence(sequence) {
62
+ return this.bind(keys_1.RestBindings.SEQUENCE).toClass(sequence);
63
+ }
64
+ handler(handlerFn) {
65
+ this.restServer.handler(handlerFn);
66
+ }
67
+ /**
68
+ * Mount static assets to the REST server.
69
+ * See https://expressjs.com/en/4x/api.html#express.static
70
+ * @param path - The path(s) to serve the asset.
71
+ * See examples at https://expressjs.com/en/4x/api.html#path-examples
72
+ * To avoid performance penalty, `/` is not allowed for now.
73
+ * @param rootDir - The root directory from which to serve static assets
74
+ * @param options - Options for serve-static
75
+ */
76
+ static(path, rootDir, options) {
77
+ this.restServer.static(path, rootDir, options);
78
+ }
79
+ /**
80
+ * Bind a body parser to the server context
81
+ * @param parserClass - Body parser class
82
+ * @param address - Optional binding address
83
+ */
84
+ bodyParser(bodyParserClass, address) {
85
+ return this.restServer.bodyParser(bodyParserClass, address);
86
+ }
87
+ /**
88
+ * Configure the `basePath` for the rest server
89
+ * @param path - Base path
90
+ */
91
+ basePath(path = '') {
92
+ this.restServer.basePath(path);
93
+ }
94
+ expressMiddleware(factoryOrKey, configOrHandlers, options = {}) {
95
+ return this.restServer.expressMiddleware(factoryOrKey, configOrHandlers, options);
96
+ }
97
+ /**
98
+ * Register a middleware function or provider class
99
+ *
100
+ * @example
101
+ * ```ts
102
+ * const log: Middleware = async (requestCtx, next) {
103
+ * // ...
104
+ * }
105
+ * server.middleware(log);
106
+ * ```
107
+ *
108
+ * @param middleware - Middleware function or provider class
109
+ * @param options - Middleware binding options
110
+ */
111
+ middleware(middleware, options = {}) {
112
+ return this.restServer.middleware(middleware, options);
113
+ }
114
+ route(routeOrVerb, path, spec, controllerCtorOrHandler, controllerFactory, methodName) {
115
+ const server = this.restServer;
116
+ if (typeof routeOrVerb === 'object') {
117
+ return server.route(routeOrVerb);
118
+ }
119
+ else if (arguments.length === 4) {
120
+ return server.route(routeOrVerb, path, spec, controllerCtorOrHandler);
121
+ }
122
+ else {
123
+ return server.route(routeOrVerb, path, spec, controllerCtorOrHandler, controllerFactory, methodName);
124
+ }
125
+ }
126
+ /**
127
+ * Register a route redirecting callers to a different URL.
128
+ *
129
+ * @example
130
+ * ```ts
131
+ * app.redirect('/explorer', '/explorer/');
132
+ * ```
133
+ *
134
+ * @param fromPath - URL path of the redirect endpoint
135
+ * @param toPathOrUrl - Location (URL path or full URL) where to redirect to.
136
+ * If your server is configured with a custom `basePath`, then the base path
137
+ * is prepended to the target location.
138
+ * @param statusCode - HTTP status code to respond with,
139
+ * defaults to 303 (See Other).
140
+ */
141
+ redirect(fromPath, toPathOrUrl, statusCode) {
142
+ return this.restServer.redirect(fromPath, toPathOrUrl, statusCode);
143
+ }
144
+ /**
145
+ * Set the OpenAPI specification that defines the REST API schema for this
146
+ * application. All routes, parameter definitions and return types will be
147
+ * defined in this way.
148
+ *
149
+ * Note that this will override any routes defined via decorators at the
150
+ * controller level (this function takes precedent).
151
+ *
152
+ * @param spec - The OpenAPI specification, as an object.
153
+ * @returns Binding for the api spec
154
+ */
155
+ api(spec) {
156
+ return this.bind(keys_1.RestBindings.API_SPEC).to(spec);
157
+ }
158
+ /**
159
+ * Mount an Express router to expose additional REST endpoints handled
160
+ * via legacy Express-based stack.
161
+ *
162
+ * @param basePath - Path where to mount the router at, e.g. `/` or `/api`.
163
+ * @param router - The Express router to handle the requests.
164
+ * @param spec - A partial OpenAPI spec describing endpoints provided by the
165
+ * router. LoopBack will prepend `basePath` to all endpoints automatically.
166
+ * This argument is optional. You can leave it out if you don't want to
167
+ * document the routes.
168
+ */
169
+ mountExpressRouter(basePath, router, spec) {
170
+ this.restServer.mountExpressRouter(basePath, router, spec);
171
+ }
172
+ }
173
+ exports.RestApplication = RestApplication;
174
+ //# sourceMappingURL=rest.application.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rest.application.js","sourceRoot":"","sources":["../src/rest.application.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { Binding, Constructor } from '@loopback/context';
2
+ import { Application, Component, ProviderMap, Server } from '@loopback/core';
3
+ import { RestServerConfig } from './rest.server';
4
+ export declare class RestComponent implements Component {
5
+ providers: ProviderMap;
6
+ /**
7
+ * Add built-in body parsers
8
+ */
9
+ bindings: Binding[];
10
+ servers: {
11
+ [name: string]: Constructor<Server>;
12
+ };
13
+ constructor(app: Application, config?: RestComponentConfig);
14
+ }
15
+ export declare type RestComponentConfig = RestServerConfig;
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ // Copyright IBM Corp. 2018,2020. All Rights Reserved.
3
+ // Node module: @loopback/rest
4
+ // This file is licensed under the MIT License.
5
+ // License text available at https://opensource.org/licenses/MIT
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.RestComponent = void 0;
8
+ const tslib_1 = require("tslib");
9
+ const context_1 = require("@loopback/context");
10
+ const core_1 = require("@loopback/core");
11
+ const express_1 = require("@loopback/express");
12
+ const openapi_v3_1 = require("@loopback/openapi-v3");
13
+ const body_parsers_1 = require("./body-parsers");
14
+ const body_parser_raw_1 = require("./body-parsers/body-parser.raw");
15
+ const keys_1 = require("./keys");
16
+ const providers_1 = require("./providers");
17
+ const rest_server_1 = require("./rest.server");
18
+ const sequence_1 = require("./sequence");
19
+ const consolidate_spec_enhancer_1 = require("./spec-enhancers/consolidate.spec-enhancer");
20
+ const info_spec_enhancer_1 = require("./spec-enhancers/info.spec-enhancer");
21
+ const ajv_factory_provider_1 = require("./validation/ajv-factory.provider");
22
+ let RestComponent = /** @class */ (() => {
23
+ let RestComponent = class RestComponent {
24
+ constructor(app, config) {
25
+ var _a;
26
+ this.providers = {
27
+ [keys_1.RestBindings.SequenceActions.LOG_ERROR.key]: providers_1.LogErrorProvider,
28
+ [keys_1.RestBindings.SequenceActions.INVOKE_MIDDLEWARE
29
+ .key]: express_1.InvokeMiddlewareProvider,
30
+ [keys_1.RestBindings.SequenceActions.FIND_ROUTE.key]: providers_1.FindRouteProvider,
31
+ [keys_1.RestBindings.SequenceActions.INVOKE_METHOD.key]: providers_1.InvokeMethodProvider,
32
+ [keys_1.RestBindings.SequenceActions.REJECT.key]: providers_1.RejectProvider,
33
+ [keys_1.RestBindings.SequenceActions.PARSE_PARAMS.key]: providers_1.ParseParamsProvider,
34
+ [keys_1.RestBindings.SequenceActions.SEND.key]: providers_1.SendProvider,
35
+ [keys_1.RestBindings.AJV_FACTORY.key]: ajv_factory_provider_1.AjvFactoryProvider,
36
+ };
37
+ /**
38
+ * Add built-in body parsers
39
+ */
40
+ this.bindings = [
41
+ // FIXME(rfeng): We now register request body parsers in TRANSIENT scope
42
+ // so that they can be bound at application or server level
43
+ context_1.Binding.bind(keys_1.RestBindings.REQUEST_BODY_PARSER).toClass(body_parsers_1.RequestBodyParser),
44
+ rest_server_1.createBodyParserBinding(body_parsers_1.JsonBodyParser, keys_1.RestBindings.REQUEST_BODY_PARSER_JSON),
45
+ rest_server_1.createBodyParserBinding(body_parsers_1.TextBodyParser, keys_1.RestBindings.REQUEST_BODY_PARSER_TEXT),
46
+ rest_server_1.createBodyParserBinding(body_parsers_1.UrlEncodedBodyParser, keys_1.RestBindings.REQUEST_BODY_PARSER_URLENCODED),
47
+ rest_server_1.createBodyParserBinding(body_parser_raw_1.RawBodyParser, keys_1.RestBindings.REQUEST_BODY_PARSER_RAW),
48
+ rest_server_1.createBodyParserBinding(body_parsers_1.StreamBodyParser, keys_1.RestBindings.REQUEST_BODY_PARSER_STREAM),
49
+ context_1.createBindingFromClass(info_spec_enhancer_1.InfoSpecEnhancer),
50
+ context_1.createBindingFromClass(consolidate_spec_enhancer_1.ConsolidationEnhancer),
51
+ ];
52
+ this.servers = {
53
+ RestServer: rest_server_1.RestServer,
54
+ };
55
+ app.bind(keys_1.RestBindings.SEQUENCE).toClass(sequence_1.DefaultSequence);
56
+ const apiSpec = openapi_v3_1.createEmptyApiSpec();
57
+ // Merge the OpenAPI `servers` spec from the config into the empty one
58
+ if ((_a = config === null || config === void 0 ? void 0 : config.openApiSpec) === null || _a === void 0 ? void 0 : _a.servers) {
59
+ Object.assign(apiSpec, { servers: config.openApiSpec.servers });
60
+ }
61
+ app.bind(keys_1.RestBindings.API_SPEC).to(apiSpec);
62
+ }
63
+ };
64
+ RestComponent = tslib_1.__decorate([
65
+ tslib_1.__param(0, context_1.inject(core_1.CoreBindings.APPLICATION_INSTANCE)),
66
+ tslib_1.__param(1, context_1.inject(keys_1.RestBindings.CONFIG)),
67
+ tslib_1.__metadata("design:paramtypes", [core_1.Application, Object])
68
+ ], RestComponent);
69
+ return RestComponent;
70
+ })();
71
+ exports.RestComponent = RestComponent;
72
+ //# sourceMappingURL=rest.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rest.component.js","sourceRoot":"","sources":["../src/rest.component.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,8BAA8B;AAC9B,+CAA+C;AAC/C,gEAAgE;;;;AAEhE,+CAK2B;AAC3B,yCAMwB;AACxB,+CAA2D;AAC3D,qDAAwD;AACxD,iDAMwB;AACxB,oEAA6D;AAC7D,iCAAoC;AACpC,2CAOqB;AACrB,+CAIuB;AACvB,yCAA2C;AAC3C,0FAAiF;AACjF,4EAAqE;AACrE,4EAAqE;AAErE;IAAA,IAAa,aAAa,GAA1B,MAAa,aAAa;QAgDxB,YAC6C,GAAgB,EAC9B,MAA4B;;YAjD3D,cAAS,GAAgB;gBACvB,CAAC,mBAAY,CAAC,eAAe,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,4BAAgB;gBAC9D,CAAC,mBAAY,CAAC,eAAe,CAAC,iBAAiB;qBAC5C,GAAG,CAAC,EAAE,kCAAwB;gBACjC,CAAC,mBAAY,CAAC,eAAe,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,6BAAiB;gBAChE,CAAC,mBAAY,CAAC,eAAe,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,gCAAoB;gBACtE,CAAC,mBAAY,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,0BAAc;gBACzD,CAAC,mBAAY,CAAC,eAAe,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,+BAAmB;gBACpE,CAAC,mBAAY,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,wBAAY;gBACrD,CAAC,mBAAY,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,yCAAkB;aACnD,CAAC;YACF;;eAEG;YACH,aAAQ,GAAc;gBACpB,wEAAwE;gBACxE,2DAA2D;gBAC3D,iBAAO,CAAC,IAAI,CAAC,mBAAY,CAAC,mBAAmB,CAAC,CAAC,OAAO,CAAC,gCAAiB,CAAC;gBACzE,qCAAuB,CACrB,6BAAc,EACd,mBAAY,CAAC,wBAAwB,CACtC;gBACD,qCAAuB,CACrB,6BAAc,EACd,mBAAY,CAAC,wBAAwB,CACtC;gBACD,qCAAuB,CACrB,mCAAoB,EACpB,mBAAY,CAAC,8BAA8B,CAC5C;gBACD,qCAAuB,CACrB,+BAAa,EACb,mBAAY,CAAC,uBAAuB,CACrC;gBACD,qCAAuB,CACrB,+BAAgB,EAChB,mBAAY,CAAC,0BAA0B,CACxC;gBACD,gCAAsB,CAAC,qCAAgB,CAAC;gBACxC,gCAAsB,CAAC,iDAAqB,CAAC;aAC9C,CAAC;YACF,YAAO,GAEH;gBACF,UAAU,EAAV,wBAAU;aACX,CAAC;YAMA,GAAG,CAAC,IAAI,CAAC,mBAAY,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,0BAAe,CAAC,CAAC;YACzD,MAAM,OAAO,GAAG,+BAAkB,EAAE,CAAC;YACrC,sEAAsE;YACtE,UAAI,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,WAAW,0CAAE,OAAO,EAAE;gBAChC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,EAAC,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,OAAO,EAAC,CAAC,CAAC;aAC/D;YACD,GAAG,CAAC,IAAI,CAAC,mBAAY,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;QAC9C,CAAC;KACF,CAAA;IA5DY,aAAa;QAiDrB,mBAAA,gBAAM,CAAC,mBAAY,CAAC,oBAAoB,CAAC,CAAA;QACzC,mBAAA,gBAAM,CAAC,mBAAY,CAAC,MAAM,CAAC,CAAA;iDADoB,kBAAW;OAjDlD,aAAa,CA4DzB;IAAD,oBAAC;KAAA;AA5DY,sCAAa"}