@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 @@
1
+ {"version":3,"file":"parse-json.js","sourceRoot":"","sources":["../src/parse-json.ts"],"names":[],"mappings":";AAAA,iDAAiD;AACjD,8BAA8B;AAC9B,+CAA+C;AAC/C,gEAAgE;;;AAEhE,uDAAuD;AAEvD,2EAA2E;AAC3E,qBAAqB;AACrB,wEAAwE;AACxE,EAAE;AACF,2EAA2E;AAC3E,8EAA8E;AAC9E,wBAAwB;AAExB;;;GAGG;AACH,SAAgB,iBAAiB,CAAC,OAAuC;IACvE,OAAO,CAAC,GAAW,EAAE,KAAU,EAAE,EAAE;QACjC,IAAI,GAAG,KAAK,WAAW;YACrB,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;QACjE,IAAI,OAAO,EAAE;YACX,OAAO,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;SAC5B;aAAM;YACL,OAAO,KAAK,CAAC;SACd;IACH,CAAC,CAAC;AACJ,CAAC;AAVD,8CAUC;AAED;;;;GAIG;AACH,SAAgB,SAAS,CACvB,IAAY,EACZ,OAAuC;IAEvC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC;AACtD,CAAC;AALD,8BAKC"}
@@ -0,0 +1,11 @@
1
+ import { RequestBodyParser } from './body-parsers';
2
+ import { ResolvedRoute } from './router';
3
+ import { OperationArgs, Request, RequestBodyValidationOptions } from './types';
4
+ /**
5
+ * Parses the request to derive arguments to be passed in for the Application
6
+ * controller method
7
+ *
8
+ * @param request - Incoming HTTP request
9
+ * @param route - Resolved Route
10
+ */
11
+ export declare function parseOperationArgs(request: Request, route: ResolvedRoute, requestBodyParser?: RequestBodyParser, options?: RequestBodyValidationOptions): Promise<OperationArgs>;
package/dist/parser.js ADDED
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ // Copyright IBM Corp. 2017,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.parseOperationArgs = void 0;
8
+ const tslib_1 = require("tslib");
9
+ const openapi_v3_1 = require("@loopback/openapi-v3");
10
+ const debug_1 = tslib_1.__importDefault(require("debug"));
11
+ const body_parsers_1 = require("./body-parsers");
12
+ const coerce_parameter_1 = require("./coercion/coerce-parameter");
13
+ const rest_http_error_1 = require("./rest-http-error");
14
+ const request_body_validator_1 = require("./validation/request-body.validator");
15
+ const debug = debug_1.default('loopback:rest:parser');
16
+ /**
17
+ * Parses the request to derive arguments to be passed in for the Application
18
+ * controller method
19
+ *
20
+ * @param request - Incoming HTTP request
21
+ * @param route - Resolved Route
22
+ */
23
+ async function parseOperationArgs(request, route, requestBodyParser = new body_parsers_1.RequestBodyParser(), options = {}) {
24
+ debug('Parsing operation arguments for route %s', route.describe());
25
+ const operationSpec = route.spec;
26
+ const pathParams = route.pathParams;
27
+ const body = await requestBodyParser.loadRequestBodyIfNeeded(operationSpec, request);
28
+ return buildOperationArguments(operationSpec, request, pathParams, body, route.schemas, options);
29
+ }
30
+ exports.parseOperationArgs = parseOperationArgs;
31
+ async function buildOperationArguments(operationSpec, request, pathParams, body, globalSchemas, options = {}) {
32
+ var _a;
33
+ let requestBodyIndex = -1;
34
+ if (operationSpec.requestBody) {
35
+ // the type of `operationSpec.requestBody` could be `RequestBodyObject`
36
+ // or `ReferenceObject`, resolving a `$ref` value is not supported yet.
37
+ if (openapi_v3_1.isReferenceObject(operationSpec.requestBody)) {
38
+ throw new Error('$ref requestBody is not supported yet.');
39
+ }
40
+ const i = operationSpec.requestBody[openapi_v3_1.REQUEST_BODY_INDEX];
41
+ requestBodyIndex = i ? i : 0;
42
+ }
43
+ const paramArgs = [];
44
+ for (const paramSpec of (_a = operationSpec.parameters) !== null && _a !== void 0 ? _a : []) {
45
+ if (openapi_v3_1.isReferenceObject(paramSpec)) {
46
+ // TODO(bajtos) implement $ref parameters
47
+ // See https://github.com/strongloop/loopback-next/issues/435
48
+ throw new Error('$ref parameters are not supported yet.');
49
+ }
50
+ const spec = paramSpec;
51
+ const rawValue = getParamFromRequest(spec, request, pathParams);
52
+ const coercedValue = coerce_parameter_1.coerceParameter(rawValue, spec);
53
+ paramArgs.push(coercedValue);
54
+ }
55
+ debug('Validating request body - value %j', body);
56
+ await request_body_validator_1.validateRequestBody(body, operationSpec.requestBody, globalSchemas, options);
57
+ if (requestBodyIndex > -1)
58
+ paramArgs.splice(requestBodyIndex, 0, body.value);
59
+ return paramArgs;
60
+ }
61
+ function getParamFromRequest(spec, request, pathParams) {
62
+ switch (spec.in) {
63
+ case 'query':
64
+ return request.query[spec.name];
65
+ case 'path':
66
+ return pathParams[spec.name];
67
+ case 'header':
68
+ // @jannyhou TBD: check edge cases
69
+ return request.headers[spec.name.toLowerCase()];
70
+ // TODO(jannyhou) to support `cookie`,
71
+ // see issue https://github.com/strongloop/loopback-next/issues/997
72
+ default:
73
+ throw rest_http_error_1.RestHttpErrors.invalidParamLocation(spec.in);
74
+ }
75
+ }
76
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,11 @@
1
1
  import { Context, Provider } from '@loopback/context';
2
- import { FindRoute } from '../internal-types';
2
+ import { FindRoute, Request } from '../types';
3
3
  import { HttpHandler } from '../http-handler';
4
+ import { ResolvedRoute } from '../router';
4
5
  export declare class FindRouteProvider implements Provider<FindRoute> {
5
6
  protected context: Context;
6
7
  protected handler: HttpHandler;
7
8
  constructor(context: Context, handler: HttpHandler);
8
9
  value(): FindRoute;
10
+ action(request: Request): ResolvedRoute;
9
11
  }
@@ -0,0 +1,36 @@
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.FindRouteProvider = void 0;
8
+ const tslib_1 = require("tslib");
9
+ const context_1 = require("@loopback/context");
10
+ const http_handler_1 = require("../http-handler");
11
+ const keys_1 = require("../keys");
12
+ let FindRouteProvider = /** @class */ (() => {
13
+ let FindRouteProvider = class FindRouteProvider {
14
+ constructor(context, handler) {
15
+ this.context = context;
16
+ this.handler = handler;
17
+ }
18
+ value() {
19
+ return request => this.action(request);
20
+ }
21
+ action(request) {
22
+ const found = this.handler.findRoute(request);
23
+ found.updateBindings(this.context);
24
+ return found;
25
+ }
26
+ };
27
+ FindRouteProvider = tslib_1.__decorate([
28
+ tslib_1.__param(0, context_1.inject(keys_1.RestBindings.Http.CONTEXT)),
29
+ tslib_1.__param(1, context_1.inject(keys_1.RestBindings.HANDLER)),
30
+ tslib_1.__metadata("design:paramtypes", [context_1.Context,
31
+ http_handler_1.HttpHandler])
32
+ ], FindRouteProvider);
33
+ return FindRouteProvider;
34
+ })();
35
+ exports.FindRouteProvider = FindRouteProvider;
36
+ //# sourceMappingURL=find-route.provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find-route.provider.js","sourceRoot":"","sources":["../../src/providers/find-route.provider.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,8BAA8B;AAC9B,+CAA+C;AAC/C,gEAAgE;;;;AAEhE,+CAA4D;AAE5D,kDAA4C;AAC5C,kCAAqC;AAGrC;IAAA,IAAa,iBAAiB,GAA9B,MAAa,iBAAiB;QAC5B,YAC+C,OAAgB,EACrB,OAAoB;YADf,YAAO,GAAP,OAAO,CAAS;YACrB,YAAO,GAAP,OAAO,CAAa;QAC3D,CAAC;QAEJ,KAAK;YACH,OAAO,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACzC,CAAC;QAED,MAAM,CAAC,OAAgB;YACrB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YAC9C,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACnC,OAAO,KAAK,CAAC;QACf,CAAC;KACF,CAAA;IAfY,iBAAiB;QAEzB,mBAAA,gBAAM,CAAC,mBAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACjC,mBAAA,gBAAM,CAAC,mBAAY,CAAC,OAAO,CAAC,CAAA;iDADyB,iBAAO;YACZ,0BAAW;OAHnD,iBAAiB,CAe7B;IAAD,wBAAC;KAAA;AAfY,8CAAiB"}
@@ -0,0 +1,6 @@
1
+ export * from './find-route.provider';
2
+ export * from './invoke-method.provider';
3
+ export * from './log-error.provider';
4
+ export * from './parse-params.provider';
5
+ export * from './reject.provider';
6
+ export * from './send.provider';
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ // Copyright IBM Corp. 2017,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
+ const tslib_1 = require("tslib");
8
+ tslib_1.__exportStar(require("./find-route.provider"), exports);
9
+ tslib_1.__exportStar(require("./invoke-method.provider"), exports);
10
+ tslib_1.__exportStar(require("./log-error.provider"), exports);
11
+ tslib_1.__exportStar(require("./parse-params.provider"), exports);
12
+ tslib_1.__exportStar(require("./reject.provider"), exports);
13
+ tslib_1.__exportStar(require("./send.provider"), exports);
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,8BAA8B;AAC9B,+CAA+C;AAC/C,gEAAgE;;;AAEhE,gEAAsC;AACtC,mEAAyC;AACzC,+DAAqC;AACrC,kEAAwC;AACxC,4DAAkC;AAClC,0DAAgC"}
@@ -1,7 +1,9 @@
1
1
  import { Context, Provider } from '@loopback/context';
2
- import { InvokeMethod } from '../internal-types';
2
+ import { InvokeMethod, OperationArgs, OperationRetval } from '../types';
3
+ import { RouteEntry } from '../router';
3
4
  export declare class InvokeMethodProvider implements Provider<InvokeMethod> {
4
5
  protected context: Context;
5
6
  constructor(context: Context);
6
7
  value(): InvokeMethod;
8
+ action(route: RouteEntry, args: OperationArgs): Promise<OperationRetval>;
7
9
  }
@@ -0,0 +1,30 @@
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.InvokeMethodProvider = void 0;
8
+ const tslib_1 = require("tslib");
9
+ const context_1 = require("@loopback/context");
10
+ const keys_1 = require("../keys");
11
+ let InvokeMethodProvider = /** @class */ (() => {
12
+ let InvokeMethodProvider = class InvokeMethodProvider {
13
+ constructor(context) {
14
+ this.context = context;
15
+ }
16
+ value() {
17
+ return (route, args) => this.action(route, args);
18
+ }
19
+ action(route, args) {
20
+ return route.invokeHandler(this.context, args);
21
+ }
22
+ };
23
+ InvokeMethodProvider = tslib_1.__decorate([
24
+ tslib_1.__param(0, context_1.inject(keys_1.RestBindings.Http.CONTEXT)),
25
+ tslib_1.__metadata("design:paramtypes", [context_1.Context])
26
+ ], InvokeMethodProvider);
27
+ return InvokeMethodProvider;
28
+ })();
29
+ exports.InvokeMethodProvider = InvokeMethodProvider;
30
+ //# sourceMappingURL=invoke-method.provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invoke-method.provider.js","sourceRoot":"","sources":["../../src/providers/invoke-method.provider.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,8BAA8B;AAC9B,+CAA+C;AAC/C,gEAAgE;;;;AAEhE,+CAA4D;AAE5D,kCAAqC;AAGrC;IAAA,IAAa,oBAAoB,GAAjC,MAAa,oBAAoB;QAC/B,YAAyD,OAAgB;YAAhB,YAAO,GAAP,OAAO,CAAS;QAAG,CAAC;QAE7E,KAAK;YACH,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACnD,CAAC;QAED,MAAM,CAAC,KAAiB,EAAE,IAAmB;YAC3C,OAAO,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACjD,CAAC;KACF,CAAA;IAVY,oBAAoB;QAClB,mBAAA,gBAAM,CAAC,mBAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;iDAAoB,iBAAO;OAD9D,oBAAoB,CAUhC;IAAD,2BAAC;KAAA;AAVY,oDAAoB"}
@@ -0,0 +1,6 @@
1
+ import { Provider } from '@loopback/context';
2
+ import { LogError, Request } from '../types';
3
+ export declare class LogErrorProvider implements Provider<LogError> {
4
+ value(): LogError;
5
+ action(err: Error, statusCode: number, req: Request): void;
6
+ }
@@ -0,0 +1,21 @@
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.LogErrorProvider = void 0;
8
+ class LogErrorProvider {
9
+ value() {
10
+ return (err, statusCode, req) => this.action(err, statusCode, req);
11
+ }
12
+ action(err, statusCode, req) {
13
+ var _a;
14
+ if (statusCode < 500) {
15
+ return;
16
+ }
17
+ console.error('Unhandled error in %s %s: %s %s', req.method, req.url, statusCode, (_a = err.stack) !== null && _a !== void 0 ? _a : err);
18
+ }
19
+ }
20
+ exports.LogErrorProvider = LogErrorProvider;
21
+ //# sourceMappingURL=log-error.provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log-error.provider.js","sourceRoot":"","sources":["../../src/providers/log-error.provider.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,8BAA8B;AAC9B,+CAA+C;AAC/C,gEAAgE;;;AAKhE,MAAa,gBAAgB;IAC3B,KAAK;QACH,OAAO,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;IACrE,CAAC;IAED,MAAM,CAAC,GAAU,EAAE,UAAkB,EAAE,GAAY;;QACjD,IAAI,UAAU,GAAG,GAAG,EAAE;YACpB,OAAO;SACR;QAED,OAAO,CAAC,KAAK,CACX,iCAAiC,EACjC,GAAG,CAAC,MAAM,EACV,GAAG,CAAC,GAAG,EACP,UAAU,QACV,GAAG,CAAC,KAAK,mCAAI,GAAG,CACjB,CAAC;IACJ,CAAC;CACF;AAlBD,4CAkBC"}
@@ -0,0 +1,15 @@
1
+ import { Provider } from '@loopback/context';
2
+ import { RequestBodyParser } from '../body-parsers';
3
+ import { AjvFactory, ParseParams, RequestBodyValidationOptions } from '../types';
4
+ /**
5
+ * Provides the function for parsing args in requests at runtime.
6
+ *
7
+ * @returns The handler function that will parse request args.
8
+ */
9
+ export declare class ParseParamsProvider implements Provider<ParseParams> {
10
+ private requestBodyParser;
11
+ private validationOptions;
12
+ private ajvFactory?;
13
+ constructor(requestBodyParser: RequestBodyParser, validationOptions?: RequestBodyValidationOptions, ajvFactory?: AjvFactory | undefined);
14
+ value(): ParseParams;
15
+ }
@@ -0,0 +1,41 @@
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.ParseParamsProvider = void 0;
8
+ const tslib_1 = require("tslib");
9
+ const context_1 = require("@loopback/context");
10
+ const body_parsers_1 = require("../body-parsers");
11
+ const keys_1 = require("../keys");
12
+ const parser_1 = require("../parser");
13
+ /**
14
+ * Provides the function for parsing args in requests at runtime.
15
+ *
16
+ * @returns The handler function that will parse request args.
17
+ */
18
+ let ParseParamsProvider = /** @class */ (() => {
19
+ let ParseParamsProvider = class ParseParamsProvider {
20
+ constructor(requestBodyParser, validationOptions = {}, ajvFactory) {
21
+ this.requestBodyParser = requestBodyParser;
22
+ this.validationOptions = validationOptions;
23
+ this.ajvFactory = ajvFactory;
24
+ }
25
+ value() {
26
+ return (request, route) => parser_1.parseOperationArgs(request, route, this.requestBodyParser, {
27
+ ajvFactory: this.ajvFactory,
28
+ ...this.validationOptions,
29
+ });
30
+ }
31
+ };
32
+ ParseParamsProvider = tslib_1.__decorate([
33
+ tslib_1.__param(0, context_1.inject(keys_1.RestBindings.REQUEST_BODY_PARSER)),
34
+ tslib_1.__param(1, context_1.inject(keys_1.RestBindings.REQUEST_BODY_PARSER_OPTIONS.deepProperty('validation'), { optional: true })),
35
+ tslib_1.__param(2, context_1.inject(keys_1.RestBindings.AJV_FACTORY, { optional: true })),
36
+ tslib_1.__metadata("design:paramtypes", [body_parsers_1.RequestBodyParser, Object, Function])
37
+ ], ParseParamsProvider);
38
+ return ParseParamsProvider;
39
+ })();
40
+ exports.ParseParamsProvider = ParseParamsProvider;
41
+ //# sourceMappingURL=parse-params.provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-params.provider.js","sourceRoot":"","sources":["../../src/providers/parse-params.provider.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,8BAA8B;AAC9B,+CAA+C;AAC/C,gEAAgE;;;;AAEhE,+CAAmD;AACnD,kDAAkD;AAClD,kCAAqC;AACrC,sCAA6C;AAQ7C;;;;GAIG;AACH;IAAA,IAAa,mBAAmB,GAAhC,MAAa,mBAAmB;QAC9B,YAEU,iBAAoC,EAKpC,oBAAkD,EAAE,EAEpD,UAAuB;YAPvB,sBAAiB,GAAjB,iBAAiB,CAAmB;YAKpC,sBAAiB,GAAjB,iBAAiB,CAAmC;YAEpD,eAAU,GAAV,UAAU,CAAa;QAC9B,CAAC;QAEJ,KAAK;YACH,OAAO,CAAC,OAAgB,EAAE,KAAoB,EAAE,EAAE,CAChD,2BAAkB,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,iBAAiB,EAAE;gBACzD,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,GAAG,IAAI,CAAC,iBAAiB;aAC1B,CAAC,CAAC;QACP,CAAC;KACF,CAAA;IApBY,mBAAmB;QAE3B,mBAAA,gBAAM,CAAC,mBAAY,CAAC,mBAAmB,CAAC,CAAA;QAExC,mBAAA,gBAAM,CACL,mBAAY,CAAC,2BAA2B,CAAC,YAAY,CAAC,YAAY,CAAC,EACnE,EAAC,QAAQ,EAAE,IAAI,EAAC,CACjB,CAAA;QAEA,mBAAA,gBAAM,CAAC,mBAAY,CAAC,WAAW,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC,CAAA;iDANxB,gCAAiB;OAHnC,mBAAmB,CAoB/B;IAAD,0BAAC;KAAA;AApBY,kDAAmB"}
@@ -0,0 +1,10 @@
1
+ import { LogError, Reject, HandlerContext } from '../types';
2
+ import { Provider } from '@loopback/context';
3
+ import { ErrorWriterOptions } from 'strong-error-handler';
4
+ export declare class RejectProvider implements Provider<Reject> {
5
+ protected logError: LogError;
6
+ protected errorWriterOptions?: ErrorWriterOptions | undefined;
7
+ constructor(logError: LogError, errorWriterOptions?: ErrorWriterOptions | undefined);
8
+ value(): Reject;
9
+ action({ request, response }: HandlerContext, error: Error): void;
10
+ }
@@ -0,0 +1,47 @@
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.RejectProvider = void 0;
8
+ const tslib_1 = require("tslib");
9
+ const context_1 = require("@loopback/context");
10
+ const keys_1 = require("../keys");
11
+ const strong_error_handler_1 = require("strong-error-handler");
12
+ // TODO(bajtos) Make this mapping configurable at RestServer level,
13
+ // allow apps and extensions to contribute additional mappings.
14
+ const codeToStatusCodeMap = {
15
+ ENTITY_NOT_FOUND: 404,
16
+ };
17
+ let RejectProvider = /** @class */ (() => {
18
+ let RejectProvider = class RejectProvider {
19
+ constructor(logError, errorWriterOptions) {
20
+ this.logError = logError;
21
+ this.errorWriterOptions = errorWriterOptions;
22
+ }
23
+ value() {
24
+ return (context, error) => this.action(context, error);
25
+ }
26
+ action({ request, response }, error) {
27
+ const err = error;
28
+ if (!err.status && !err.statusCode && err.code) {
29
+ const customStatus = codeToStatusCodeMap[err.code];
30
+ if (customStatus) {
31
+ err.statusCode = customStatus;
32
+ }
33
+ }
34
+ const statusCode = err.statusCode || err.status || 500;
35
+ strong_error_handler_1.writeErrorToResponse(err, request, response, this.errorWriterOptions);
36
+ this.logError(error, statusCode, request);
37
+ }
38
+ };
39
+ RejectProvider = tslib_1.__decorate([
40
+ tslib_1.__param(0, context_1.inject(keys_1.RestBindings.SequenceActions.LOG_ERROR)),
41
+ tslib_1.__param(1, context_1.inject(keys_1.RestBindings.ERROR_WRITER_OPTIONS, { optional: true })),
42
+ tslib_1.__metadata("design:paramtypes", [Function, Object])
43
+ ], RejectProvider);
44
+ return RejectProvider;
45
+ })();
46
+ exports.RejectProvider = RejectProvider;
47
+ //# sourceMappingURL=reject.provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reject.provider.js","sourceRoot":"","sources":["../../src/providers/reject.provider.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,8BAA8B;AAC9B,+CAA+C;AAC/C,gEAAgE;;;;AAGhE,+CAAmD;AAEnD,kCAAqC;AACrC,+DAA8E;AAE9E,mEAAmE;AACnE,+DAA+D;AAC/D,MAAM,mBAAmB,GAA4B;IACnD,gBAAgB,EAAE,GAAG;CACtB,CAAC;AAEF;IAAA,IAAa,cAAc,GAA3B,MAAa,cAAc;QACzB,YAEY,QAAkB,EAElB,kBAAuC;YAFvC,aAAQ,GAAR,QAAQ,CAAU;YAElB,uBAAkB,GAAlB,kBAAkB,CAAqB;QAChD,CAAC;QAEJ,KAAK;YACH,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACzD,CAAC;QAED,MAAM,CAAC,EAAC,OAAO,EAAE,QAAQ,EAAiB,EAAE,KAAY;YACtD,MAAM,GAAG,GAAc,KAAK,CAAC;YAE7B,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,IAAI,EAAE;gBAC9C,MAAM,YAAY,GAAG,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACnD,IAAI,YAAY,EAAE;oBAChB,GAAG,CAAC,UAAU,GAAG,YAAY,CAAC;iBAC/B;aACF;YAED,MAAM,UAAU,GAAG,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC;YACvD,2CAAoB,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;YACtE,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;QAC5C,CAAC;KACF,CAAA;IA1BY,cAAc;QAEtB,mBAAA,gBAAM,CAAC,mBAAY,CAAC,eAAe,CAAC,SAAS,CAAC,CAAA;QAE9C,mBAAA,gBAAM,CAAC,mBAAY,CAAC,oBAAoB,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC,CAAA;;OAJnD,cAAc,CA0B1B;IAAD,qBAAC;KAAA;AA1BY,wCAAc"}
@@ -4,10 +4,7 @@ import { writeResultToResponse } from '../writer';
4
4
  * Provides the function that populates the response object with
5
5
  * the results of the operation.
6
6
  *
7
- * @export
8
- * @class SendProvider
9
- * @implements {Provider<BoundValue>}
10
- * @returns {BoundValue} The handler function that will populate the
7
+ * @returns The handler function that will populate the
11
8
  * response with operation results.
12
9
  */
13
10
  export declare class SendProvider implements Provider<BoundValue> {
@@ -1,18 +1,16 @@
1
1
  "use strict";
2
- // Copyright IBM Corp. 2017. All Rights Reserved.
2
+ // Copyright IBM Corp. 2018,2020. All Rights Reserved.
3
3
  // Node module: @loopback/rest
4
4
  // This file is licensed under the MIT License.
5
5
  // License text available at https://opensource.org/licenses/MIT
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.SendProvider = void 0;
7
8
  const writer_1 = require("../writer");
8
9
  /**
9
10
  * Provides the function that populates the response object with
10
11
  * the results of the operation.
11
12
  *
12
- * @export
13
- * @class SendProvider
14
- * @implements {Provider<BoundValue>}
15
- * @returns {BoundValue} The handler function that will populate the
13
+ * @returns The handler function that will populate the
16
14
  * response with operation results.
17
15
  */
18
16
  class SendProvider {
@@ -21,4 +19,4 @@ class SendProvider {
21
19
  }
22
20
  }
23
21
  exports.SendProvider = SendProvider;
24
- //# sourceMappingURL=send.js.map
22
+ //# sourceMappingURL=send.provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"send.provider.js","sourceRoot":"","sources":["../../src/providers/send.provider.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,8BAA8B;AAC9B,+CAA+C;AAC/C,gEAAgE;;;AAGhE,sCAAgD;AAChD;;;;;;GAMG;AACH,MAAa,YAAY;IACvB,KAAK;QACH,OAAO,8BAAqB,CAAC;IAC/B,CAAC;CACF;AAJD,oCAIC"}
@@ -0,0 +1,36 @@
1
+ import { Context } from '@loopback/context';
2
+ import { HandlerContext, MiddlewareContext, Request, Response } from '@loopback/express';
3
+ import { RestServerResolvedConfig } from './rest.server';
4
+ /**
5
+ * A per-request Context combining an IoC container with handler context
6
+ * (request, response, etc.).
7
+ */
8
+ export declare class RequestContext extends MiddlewareContext implements HandlerContext {
9
+ readonly request: Request;
10
+ readonly response: Response;
11
+ readonly serverConfig: RestServerResolvedConfig;
12
+ /**
13
+ * Get the protocol used by the client to make the request.
14
+ * Please note this protocol may be different from what we are observing
15
+ * at HTTP/TCP level, because reverse proxies like nginx or sidecars like
16
+ * Envoy are switching between protocols.
17
+ */
18
+ get requestedProtocol(): string;
19
+ /**
20
+ * Get the effective base path of the incoming request. This base path
21
+ * combines `baseUrl` provided by Express when LB4 handler is mounted on
22
+ * a non-root path, with the `basePath` value configured at LB4 side.
23
+ */
24
+ get basePath(): string;
25
+ /**
26
+ * Get the base URL used by the client to make the request.
27
+ * This URL contains the protocol, hostname, port and base path.
28
+ * The path of the invoked route and query string is not included.
29
+ *
30
+ * Please note these values may be different from what we are observing
31
+ * at HTTP/TCP level, because reverse proxies like nginx are rewriting them.
32
+ */
33
+ get requestedBaseUrl(): string;
34
+ constructor(request: Request, response: Response, parent: Context, serverConfig: RestServerResolvedConfig, name?: string);
35
+ protected setupBindings(): void;
36
+ }
@@ -0,0 +1,104 @@
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.RequestContext = void 0;
8
+ const express_1 = require("@loopback/express");
9
+ const keys_1 = require("./keys");
10
+ /**
11
+ * A per-request Context combining an IoC container with handler context
12
+ * (request, response, etc.).
13
+ */
14
+ class RequestContext extends express_1.MiddlewareContext {
15
+ constructor(request, response, parent, serverConfig, name) {
16
+ super(request, response, parent, name);
17
+ this.request = request;
18
+ this.response = response;
19
+ this.serverConfig = serverConfig;
20
+ }
21
+ /**
22
+ * Get the protocol used by the client to make the request.
23
+ * Please note this protocol may be different from what we are observing
24
+ * at HTTP/TCP level, because reverse proxies like nginx or sidecars like
25
+ * Envoy are switching between protocols.
26
+ */
27
+ get requestedProtocol() {
28
+ var _a, _b;
29
+ return ((_b = (((_a = this.request.get('x-forwarded-proto')) !== null && _a !== void 0 ? _a : '').split(',')[0] ||
30
+ this.request.protocol ||
31
+ this.serverConfig.protocol)) !== null && _b !== void 0 ? _b : 'http');
32
+ }
33
+ /**
34
+ * Get the effective base path of the incoming request. This base path
35
+ * combines `baseUrl` provided by Express when LB4 handler is mounted on
36
+ * a non-root path, with the `basePath` value configured at LB4 side.
37
+ */
38
+ get basePath() {
39
+ var _a;
40
+ const request = this.request;
41
+ let basePath = (_a = this.serverConfig.basePath) !== null && _a !== void 0 ? _a : '';
42
+ if (request.baseUrl && request.baseUrl !== '/') {
43
+ if (!basePath || request.baseUrl.endsWith(basePath)) {
44
+ // Express has already applied basePath to baseUrl
45
+ basePath = request.baseUrl;
46
+ }
47
+ else {
48
+ basePath = request.baseUrl + basePath;
49
+ }
50
+ }
51
+ return basePath;
52
+ }
53
+ /**
54
+ * Get the base URL used by the client to make the request.
55
+ * This URL contains the protocol, hostname, port and base path.
56
+ * The path of the invoked route and query string is not included.
57
+ *
58
+ * Please note these values may be different from what we are observing
59
+ * at HTTP/TCP level, because reverse proxies like nginx are rewriting them.
60
+ */
61
+ get requestedBaseUrl() {
62
+ var _a, _b, _c;
63
+ const request = this.request;
64
+ const config = this.serverConfig;
65
+ const protocol = this.requestedProtocol;
66
+ // The host can be in one of the forms
67
+ // [::1]:3000
68
+ // [::1]
69
+ // 127.0.0.1:3000
70
+ // 127.0.0.1
71
+ let { host, port } = parseHostAndPort((_a = request.get('x-forwarded-host')) !== null && _a !== void 0 ? _a : request.headers.host);
72
+ const forwardedPort = ((_b = request.get('x-forwarded-port')) !== null && _b !== void 0 ? _b : '').split(',')[0];
73
+ port = forwardedPort || port;
74
+ if (!host) {
75
+ // No host detected from http headers
76
+ // Use the configured values or the local network address
77
+ host = (_c = config.host) !== null && _c !== void 0 ? _c : request.socket.localAddress;
78
+ port = (config.port || request.socket.localPort).toString();
79
+ }
80
+ // clear default ports
81
+ port = protocol === 'https' && port === '443' ? '' : port;
82
+ port = protocol === 'http' && port === '80' ? '' : port;
83
+ // add port number of present
84
+ host += port !== '' ? ':' + port : '';
85
+ return protocol + '://' + host + this.basePath;
86
+ }
87
+ setupBindings() {
88
+ super.setupBindings();
89
+ this.bind(keys_1.RestBindings.Http.REQUEST).to(this.request).lock();
90
+ this.bind(keys_1.RestBindings.Http.RESPONSE).to(this.response).lock();
91
+ this.bind(keys_1.RestBindings.Http.CONTEXT).to(this).lock();
92
+ }
93
+ }
94
+ exports.RequestContext = RequestContext;
95
+ function parseHostAndPort(host) {
96
+ var _a;
97
+ host = host !== null && host !== void 0 ? host : '';
98
+ host = host.split(',')[0];
99
+ const portPattern = /:([0-9]+)$/;
100
+ const port = ((_a = host.match(portPattern)) !== null && _a !== void 0 ? _a : [])[1] || '';
101
+ host = host.replace(portPattern, '');
102
+ return { host, port };
103
+ }
104
+ //# sourceMappingURL=request-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-context.js","sourceRoot":"","sources":["../src/request-context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import HttpErrors from 'http-errors';
2
+ export declare namespace RestHttpErrors {
3
+ function invalidData<T, Props extends object = {}>(data: T, name: string, extraProperties?: Props): HttpErrors.HttpError & Props;
4
+ function unsupportedMediaType(contentType: string, allowedTypes?: string[]): HttpErrors.HttpError & {
5
+ code: string;
6
+ contentType: string;
7
+ allowedMediaTypes: string[];
8
+ };
9
+ function missingRequired(name: string): HttpErrors.HttpError;
10
+ function invalidParamLocation(location: string): HttpErrors.HttpError;
11
+ const INVALID_REQUEST_BODY_MESSAGE = "The request body is invalid. See error object `details` property for more info.";
12
+ function invalidRequestBody(): HttpErrors.HttpError;
13
+ /**
14
+ * An invalid request body error contains a `details` property as the machine-readable error.
15
+ * Each entry in `error.details` contains 4 attributes: `path`, `code`, `info` and `message`.
16
+ * `ValidationErrorDetails` defines the type of each entry, which is an object.
17
+ * The type of `error.details` is `ValidationErrorDetails[]`.
18
+ */
19
+ interface ValidationErrorDetails {
20
+ /**
21
+ * A path to the invalid field.
22
+ */
23
+ path: string;
24
+ /**
25
+ * A single word code represents the error's type.
26
+ */
27
+ code: string;
28
+ /**
29
+ * A human readable description of the error.
30
+ */
31
+ message: string;
32
+ /**
33
+ * Some additional details that the 3 attributes above don't cover.
34
+ */
35
+ info: object;
36
+ }
37
+ }