@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
@@ -1,218 +0,0 @@
1
- "use strict";
2
- // Copyright IBM Corp. 2017. 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
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
7
- return new (P || (P = Promise))(function (resolve, reject) {
8
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
9
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
10
- function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
11
- step((generator = generator.apply(thisArg, _arguments || [])).next());
12
- });
13
- };
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- const context_1 = require("@loopback/context");
16
- const HttpErrors = require("http-errors");
17
- const assert = require("assert");
18
- const url = require("url");
19
- const debug = require('debug')('loopback:core:routing-table');
20
- // TODO(bajtos) Refactor this code to use Trie-based lookup,
21
- // e.g. via wayfarer/trie or find-my-way
22
- // See https://github.com/strongloop/loopback-next/issues/98
23
- const pathToRegexp = require("path-to-regexp");
24
- /**
25
- * Parse the URL of the incoming request and set additional properties
26
- * on this request object:
27
- * - `path`
28
- * - `query`
29
- *
30
- * @private
31
- * @param request
32
- */
33
- function parseRequestUrl(request) {
34
- // TODO(bajtos) The following parsing can be skipped when the router
35
- // is mounted on an express app
36
- const parsedRequest = request;
37
- const parsedUrl = url.parse(parsedRequest.url, true);
38
- parsedRequest.path = parsedUrl.pathname || '/';
39
- parsedRequest.query = parsedUrl.query;
40
- return parsedRequest;
41
- }
42
- exports.parseRequestUrl = parseRequestUrl;
43
- class RoutingTable {
44
- constructor() {
45
- this._routes = [];
46
- }
47
- registerController(controller, spec) {
48
- assert(typeof spec === 'object' && !!spec, 'API specification must be a non-null object');
49
- if (!spec.paths || !Object.keys(spec.paths).length) {
50
- return;
51
- }
52
- debug('Registering Controller with API', spec);
53
- const basePath = spec.basePath || '/';
54
- for (const p in spec.paths) {
55
- for (const verb in spec.paths[p]) {
56
- const opSpec = spec.paths[p][verb];
57
- const fullPath = RoutingTable.joinPath(basePath, p);
58
- const route = new ControllerRoute(verb, fullPath, opSpec, controller);
59
- this.registerRoute(route);
60
- }
61
- }
62
- }
63
- static joinPath(basePath, path) {
64
- const fullPath = [basePath, path]
65
- .join('/') // Join by /
66
- .replace(/(\/){2,}/g, '/') // Remove extra /
67
- .replace(/\/$/, '') // Remove trailing /
68
- .replace(/^(\/)?/, '/'); // Add leading /
69
- return fullPath;
70
- }
71
- registerRoute(route) {
72
- // TODO(bajtos) handle the case where opSpec.parameters contains $ref
73
- // See https://github.com/strongloop/loopback-next/issues/435
74
- debug('Registering route %s %s -> %s(%s)', route.verb, route.path, route.describe(), describeOperationParameters(route.spec));
75
- this._routes.push(route);
76
- }
77
- describeApiPaths() {
78
- const paths = {};
79
- for (const route of this._routes) {
80
- if (!paths[route.path]) {
81
- paths[route.path] = {};
82
- }
83
- paths[route.path][route.verb] = route.spec;
84
- }
85
- return paths;
86
- }
87
- find(request) {
88
- for (const entry of this._routes) {
89
- const match = entry.match(request);
90
- if (match)
91
- return match;
92
- }
93
- throw new HttpErrors.NotFound(`Endpoint "${request.method} ${request.path}" not found.`);
94
- }
95
- }
96
- exports.RoutingTable = RoutingTable;
97
- class BaseRoute {
98
- constructor(verb, path, spec) {
99
- this.path = path;
100
- this.spec = spec;
101
- this._keys = [];
102
- this.verb = verb.toLowerCase();
103
- // In Swagger, path parameters are wrapped in `{}`.
104
- // In Express.js, path parameters are prefixed with `:`
105
- path = path.replace(/{([^}]*)}(\/|$)/g, ':$1$2');
106
- this._pathRegexp = pathToRegexp(path, this._keys, {
107
- strict: false,
108
- end: true,
109
- });
110
- }
111
- match(request) {
112
- debug('trying endpoint', this);
113
- if (this.verb !== request.method.toLowerCase()) {
114
- debug(' -> verb mismatch');
115
- return undefined;
116
- }
117
- const match = this._pathRegexp.exec(request.path);
118
- if (!match) {
119
- debug(' -> path mismatch');
120
- return undefined;
121
- }
122
- const pathParams = this._buildPathParams(match);
123
- debug(' -> found with params: %j', pathParams);
124
- return createResolvedRoute(this, pathParams);
125
- }
126
- describe() {
127
- return `"${this.verb} ${this.path}"`;
128
- }
129
- _buildPathParams(pathMatch) {
130
- const pathParams = Object.create(null);
131
- for (const ix in this._keys) {
132
- const key = this._keys[ix];
133
- const matchIndex = +ix + 1;
134
- pathParams[key.name] = pathMatch[matchIndex];
135
- }
136
- return pathParams;
137
- }
138
- }
139
- exports.BaseRoute = BaseRoute;
140
- function createResolvedRoute(route, pathParams) {
141
- return Object.create(route, {
142
- pathParams: {
143
- writable: false,
144
- value: pathParams,
145
- },
146
- });
147
- }
148
- exports.createResolvedRoute = createResolvedRoute;
149
- class Route extends BaseRoute {
150
- constructor(verb, path, spec, _handler) {
151
- super(verb, path, spec);
152
- this.spec = spec;
153
- this._handler = _handler;
154
- }
155
- describe() {
156
- return this._handler.name || super.describe();
157
- }
158
- updateBindings(requestContext) {
159
- // no-op
160
- }
161
- invokeHandler(requestContext, args) {
162
- return __awaiter(this, void 0, void 0, function* () {
163
- return yield this._handler(...args);
164
- });
165
- }
166
- }
167
- exports.Route = Route;
168
- class ControllerRoute extends BaseRoute {
169
- constructor(verb, path, spec, _controllerCtor, methodName) {
170
- super(verb, path,
171
- // Add x-controller-name and x-operation-name if not present
172
- Object.assign({
173
- 'x-controller-name': _controllerCtor.name,
174
- 'x-operation-name': methodName,
175
- }, spec));
176
- this._controllerCtor = _controllerCtor;
177
- if (!methodName) {
178
- methodName = this.spec['x-operation-name'];
179
- }
180
- if (!methodName) {
181
- throw new Error('methodName must be provided either via the ControllerRoute argument ' +
182
- 'or via "x-operation-name" extension field in OpenAPI spec. ' +
183
- `Operation: "${verb} ${path}" ` +
184
- `Controller: ${this._controllerCtor.name}.`);
185
- }
186
- this._methodName = methodName;
187
- }
188
- describe() {
189
- return `${this._controllerCtor.name}.${this._methodName}`;
190
- }
191
- updateBindings(requestContext) {
192
- const ctor = this._controllerCtor;
193
- requestContext.bind('controller.current.ctor').to(ctor);
194
- requestContext.bind('controller.current.operation').to(this._methodName);
195
- }
196
- invokeHandler(requestContext, args) {
197
- return __awaiter(this, void 0, void 0, function* () {
198
- const controller = yield this._createControllerInstance(requestContext);
199
- if (typeof controller[this._methodName] !== 'function') {
200
- throw new HttpErrors.NotFound(`Controller method not found: ${this.describe()}`);
201
- }
202
- return yield controller[this._methodName](...args);
203
- });
204
- }
205
- _createControllerInstance(requestContext) {
206
- return __awaiter(this, void 0, void 0, function* () {
207
- const valueOrPromise = context_1.instantiateClass(this._controllerCtor, requestContext);
208
- return (yield Promise.resolve(valueOrPromise));
209
- });
210
- }
211
- }
212
- exports.ControllerRoute = ControllerRoute;
213
- function describeOperationParameters(opSpec) {
214
- return (opSpec.parameters || [])
215
- .map(p => p.name)
216
- .join(', ');
217
- }
218
- //# sourceMappingURL=routing-table.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"routing-table.js","sourceRoot":"","sources":["../../../src/router/routing-table.ts"],"names":[],"mappings":"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"}
@@ -1,114 +0,0 @@
1
- "use strict";
2
- // Copyright IBM Corp. 2017. 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
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
7
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
8
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
9
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
10
- return c > 3 && r && Object.defineProperty(target, key, r), r;
11
- };
12
- var __metadata = (this && this.__metadata) || function (k, v) {
13
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
14
- };
15
- var __param = (this && this.__param) || function (paramIndex, decorator) {
16
- return function (target, key) { decorator(target, key, paramIndex); }
17
- };
18
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
19
- return new (P || (P = Promise))(function (resolve, reject) {
20
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
21
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
22
- function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
23
- step((generator = generator.apply(thisArg, _arguments || [])).next());
24
- });
25
- };
26
- Object.defineProperty(exports, "__esModule", { value: true });
27
- const debug = require('debug')('loopback:core:sequence');
28
- const context_1 = require("@loopback/context");
29
- const keys_1 = require("./keys");
30
- const SequenceActions = keys_1.RestBindings.SequenceActions;
31
- /**
32
- * The default implementation of SequenceHandler.
33
- *
34
- * This class implements default Sequence for the LoopBack framework.
35
- * Default sequence is used if user hasn't defined their own Sequence
36
- * for their application.
37
- *
38
- * Sequence constructor() and run() methods are invoked from [[http-handler]]
39
- * when the API request comes in. User defines APIs in their Application
40
- * Controller class.
41
- *
42
- * User can bind their own Sequence to app as shown below
43
- * ```ts
44
- * app.bind(CoreBindings.SEQUENCE).toClass(MySequence);
45
- * ```
46
- */
47
- let DefaultSequence = class DefaultSequence {
48
- /**
49
- * Constructor: Injects findRoute, invokeMethod & logError
50
- * methods as promises.
51
- *
52
- * @param {Context} ctx The context for the sequence (injected via
53
- * RestBindings.Http.CONTEXT).
54
- * @param {FindRoute} findRoute Finds the appropriate controller method,
55
- * spec and args for invocation (injected via SequenceActions.FIND_ROUTE).
56
- * @param {ParseParams} parseParams The parameter parsing function (injected
57
- * via SequenceActions.PARSE_PARAMS).
58
- * @param {InvokeMethod} invoke Invokes the method specified by the route
59
- * (injected via SequenceActions.INVOKE_METHOD).
60
- * @param {Send} send The action to merge the invoke result with the response
61
- * (injected via SequenceActions.SEND)
62
- * @param {Reject} reject The action to take if the invoke returns a rejected
63
- * promise result (injected via SequenceActions.REJECT).
64
- */
65
- constructor(ctx, findRoute, parseParams, invoke, send, reject) {
66
- this.ctx = ctx;
67
- this.findRoute = findRoute;
68
- this.parseParams = parseParams;
69
- this.invoke = invoke;
70
- this.send = send;
71
- this.reject = reject;
72
- }
73
- /**
74
- * Runs the default sequence. Given a request and response, running the
75
- * sequence will produce a response or an error.
76
- *
77
- * Default sequence executes these steps
78
- * - Finds the appropriate controller method, swagger spec
79
- * and args for invocation
80
- * - Parses HTTP request to get API argument list
81
- * - Invokes the API which is defined in the Application Controller
82
- * - Writes the result from API into the HTTP response
83
- * - Error is caught and logged using 'logError' if any of the above steps
84
- * in the sequence fails with an error.
85
- * @param req Parsed incoming HTTP request
86
- * @param res HTTP server response with result from Application controller
87
- * method invocation
88
- */
89
- handle(req, res) {
90
- return __awaiter(this, void 0, void 0, function* () {
91
- try {
92
- const route = this.findRoute(req);
93
- const args = yield this.parseParams(req, route);
94
- const result = yield this.invoke(route, args);
95
- debug('%s result -', route.describe(), result);
96
- this.send(res, result);
97
- }
98
- catch (err) {
99
- this.reject(res, req, err);
100
- }
101
- });
102
- }
103
- };
104
- DefaultSequence = __decorate([
105
- __param(0, context_1.inject(keys_1.RestBindings.Http.CONTEXT)),
106
- __param(1, context_1.inject(SequenceActions.FIND_ROUTE)),
107
- __param(2, context_1.inject(SequenceActions.PARSE_PARAMS)),
108
- __param(3, context_1.inject(SequenceActions.INVOKE_METHOD)),
109
- __param(4, context_1.inject(SequenceActions.SEND)),
110
- __param(5, context_1.inject(SequenceActions.REJECT)),
111
- __metadata("design:paramtypes", [context_1.Context, Function, Function, Function, Function, Function])
112
- ], DefaultSequence);
113
- exports.DefaultSequence = DefaultSequence;
114
- //# sourceMappingURL=sequence.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sequence.js","sourceRoot":"","sources":["../../src/sequence.ts"],"names":[],"mappings":";AAAA,iDAAiD;AACjD,8BAA8B;AAC9B,+CAA+C;AAC/C,gEAAgE;;;;;;;;;;;;;;;;;;;;;;AAEhE,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,wBAAwB,CAAC,CAAC;AAEzD,+CAAkD;AASlD,iCAAoC;AAEpC,MAAM,eAAe,GAAG,mBAAY,CAAC,eAAe,CAAC;AA0BrD;;;;;;;;;;;;;;;GAeG;AACH,IAAa,eAAe,GAA5B;IACE;;;;;;;;;;;;;;;;OAgBG;IACH,YAC4C,GAAY,EACR,SAAoB,EAClB,WAAwB,EACvB,MAAoB,EAChC,IAAU,EACR,MAAc;QALX,QAAG,GAAH,GAAG,CAAS;QACR,cAAS,GAAT,SAAS,CAAW;QAClB,gBAAW,GAAX,WAAW,CAAa;QACvB,WAAM,GAAN,MAAM,CAAc;QAChC,SAAI,GAAJ,IAAI,CAAM;QACR,WAAM,GAAN,MAAM,CAAQ;IACpD,CAAC;IAEJ;;;;;;;;;;;;;;;OAeG;IACG,MAAM,CAAC,GAAkB,EAAE,GAAmB;;YAClD,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;gBAClC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gBAChD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;gBAE9C,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,MAAM,CAAC,CAAC;gBAC/C,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YACzB,CAAC;YAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBACb,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;KAAA;CACF,CAAA;AAvDY,eAAe;IAmBvB,WAAA,gBAAM,CAAC,mBAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACjC,WAAA,gBAAM,CAAC,eAAe,CAAC,UAAU,CAAC,CAAA;IAClC,WAAA,gBAAM,CAAC,eAAe,CAAC,YAAY,CAAC,CAAA;IACpC,WAAA,gBAAM,CAAC,eAAe,CAAC,aAAa,CAAC,CAAA;IACrC,WAAA,gBAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;IAC5B,WAAA,gBAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAA;qCALgB,iBAAO;GAnB7C,eAAe,CAuD3B;AAvDY,0CAAe"}
@@ -1,17 +0,0 @@
1
- /// <reference types="node" />
2
- import { ServerResponse as Response } from 'http';
3
- import { OperationRetval } from './internal-types';
4
- /**
5
- * Writes the result from Application controller method
6
- * into the HTTP response
7
- *
8
- * @param response HTTP Response
9
- * @param result Result from the API to write into HTTP Response
10
- */
11
- export declare function writeResultToResponse(response: Response, result: OperationRetval): void;
12
- /**
13
- * Write an error into the HTTP response
14
- * @param response HTTP response
15
- * @param error Error
16
- */
17
- export declare function writeErrorToResponse(response: Response, error: Error): void;
@@ -1,87 +0,0 @@
1
- "use strict";
2
- // Copyright IBM Corp. 2017. 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 stream_1 = require("stream");
8
- /**
9
- * Writes the result from Application controller method
10
- * into the HTTP response
11
- *
12
- * @param response HTTP Response
13
- * @param result Result from the API to write into HTTP Response
14
- */
15
- function writeResultToResponse(
16
- // not needed and responsibility should be in the sequence.send
17
- response,
18
- // result returned back from invoking controller method
19
- result) {
20
- if (result) {
21
- if (result instanceof stream_1.Readable || typeof result.pipe === 'function') {
22
- response.setHeader('Content-Type', 'application/octet-stream');
23
- // Stream
24
- result.pipe(response);
25
- return;
26
- }
27
- switch (typeof result) {
28
- case 'object':
29
- case 'boolean':
30
- case 'number':
31
- if (Buffer.isBuffer(result)) {
32
- // Buffer for binary data
33
- response.setHeader('Content-Type', 'application/octet-stream');
34
- }
35
- else {
36
- // TODO(ritch) remove this, should be configurable
37
- // See https://github.com/strongloop/loopback-next/issues/436
38
- response.setHeader('Content-Type', 'application/json');
39
- // TODO(bajtos) handle errors - JSON.stringify can throw
40
- result = JSON.stringify(result);
41
- }
42
- break;
43
- default:
44
- response.setHeader('Content-Type', 'text/plain');
45
- result = result.toString();
46
- break;
47
- }
48
- response.write(result);
49
- }
50
- response.end();
51
- }
52
- exports.writeResultToResponse = writeResultToResponse;
53
- /**
54
- * Write an error into the HTTP response
55
- * @param response HTTP response
56
- * @param error Error
57
- */
58
- function writeErrorToResponse(response, error) {
59
- const e = error;
60
- const statusCode = (response.statusCode = e.statusCode || e.status || 500);
61
- if (e.headers) {
62
- // Set response headers for the error
63
- for (const h in e.headers) {
64
- response.setHeader(h, e.headers[h]);
65
- }
66
- }
67
- // Build an error object
68
- const errObj = {
69
- statusCode,
70
- };
71
- if (e.expose) {
72
- // Expose other properties if the `expose` flag is set to `true`
73
- for (const p in e) {
74
- if (p === 'headers' ||
75
- p === 'expose' ||
76
- p === 'status' ||
77
- p === 'statusCode')
78
- continue;
79
- errObj[p] = e[p];
80
- }
81
- }
82
- response.setHeader('Content-Type', 'application/json');
83
- response.write(JSON.stringify(errObj));
84
- response.end();
85
- }
86
- exports.writeErrorToResponse = writeErrorToResponse;
87
- //# sourceMappingURL=writer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"writer.js","sourceRoot":"","sources":["../../src/writer.ts"],"names":[],"mappings":"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"}
package/index.d.ts DELETED
@@ -1,6 +0,0 @@
1
- // Copyright IBM Corp. 2017. All Rights Reserved.
2
- // Node module: @loopback/rest
3
- // This file is licensed under the MIT License.
4
- // License text available at https://opensource.org/licenses/MIT
5
-
6
- export * from './dist/src';
package/index.js DELETED
@@ -1,9 +0,0 @@
1
- // Copyright IBM Corp. 2017. All Rights Reserved.
2
- // Node module: @loopback/rest
3
- // This file is licensed under the MIT License.
4
- // License text available at https://opensource.org/licenses/MIT
5
-
6
- const nodeMajorVersion = +process.versions.node.split('.')[0];
7
- module.exports = nodeMajorVersion >= 7 ?
8
- require('./dist/src') :
9
- require('./dist6/src');
@@ -1,96 +0,0 @@
1
- // Copyright IBM Corp. 2017. All Rights Reserved.
2
- // Node module: @loopback/rest
3
- // This file is licensed under the MIT License.
4
- // License text available at https://opensource.org/licenses/MIT
5
-
6
- import {Binding, BoundValue} from '@loopback/context';
7
- import {ServerRequest, ServerResponse} from 'http';
8
- import {ResolvedRoute, RouteEntry} from './router/routing-table';
9
-
10
- export interface ParsedRequest extends ServerRequest {
11
- // see http://expressjs.com/en/4x/api.html#req.path
12
- path: string;
13
- // see http://expressjs.com/en/4x/api.html#req.query
14
- query: {[key: string]: string};
15
- // see https://github.com/DefinitelyTyped/DefinitelyTyped/issues/15808
16
- url: string;
17
- pathname: string;
18
- method: string;
19
- }
20
-
21
- /**
22
- * Find a route matching the incoming request.
23
- * Throw an error when no route was found.
24
- */
25
- export type FindRoute = (request: ParsedRequest) => ResolvedRoute;
26
-
27
- /**
28
- *
29
- */
30
- export type ParseParams = (
31
- request: ParsedRequest,
32
- route: ResolvedRoute,
33
- ) => Promise<OperationArgs>;
34
-
35
- /**
36
- * Invokes a method defined in the Application Controller
37
- *
38
- * @param controller Name of end-user's application controller
39
- * class which defines the methods.
40
- * @param method Method name in application controller class
41
- * @param args Operation arguments for the method
42
- * @returns OperationRetval Result from method invocation
43
- */
44
- export type InvokeMethod = (
45
- route: RouteEntry,
46
- args: OperationArgs,
47
- ) => Promise<OperationRetval>;
48
-
49
- /**
50
- * Send the operation response back to the client.
51
- *
52
- * @param response The response the response to send to.
53
- * @param result The operation result to send.
54
- */
55
- export type Send = (response: ServerResponse, result: OperationRetval) => void;
56
-
57
- /**
58
- * Reject the request with an error.
59
- *
60
- * @param response The response the response to send to.
61
- * @param request The request that triggered the error.
62
- * @param err The error.
63
- */
64
- export type Reject = (
65
- response: ServerResponse,
66
- request: ServerRequest,
67
- err: Error,
68
- ) => void;
69
-
70
- /**
71
- * Log information about a failed request.
72
- *
73
- * @param err The error reported by request handling code.
74
- * @param statusCode Status code of the HTTP response
75
- * @param request The request that failed.
76
- */
77
- export type LogError = (
78
- err: Error,
79
- statusCode: number,
80
- request: ServerRequest,
81
- ) => void;
82
-
83
- // tslint:disable:no-any
84
- export type PathParameterValues = {[key: string]: any};
85
- export type OperationArgs = any[];
86
-
87
- /**
88
- * Return value of a controller method (a function implementing an operation).
89
- * This is a type alias for "any", used to distinguish
90
- * operation results from other "any" typed values.
91
- */
92
- export type OperationRetval = any;
93
- // tslint:enable:no-any
94
-
95
- export type GetFromContext = (key: string) => Promise<BoundValue>;
96
- export type BindElement = (key: string) => Binding;
@@ -1,15 +0,0 @@
1
- // Copyright IBM Corp. 2017. All Rights Reserved.
2
- // Node module: @loopback/rest
3
- // This file is licensed under the MIT License.
4
- // License text available at https://opensource.org/licenses/MIT
5
-
6
- import {Context, inject, Provider} from '@loopback/context';
7
- import {BindElement} from '../internal-types';
8
- import {RestBindings} from '../keys';
9
-
10
- export class BindElementProvider implements Provider<BindElement> {
11
- constructor(@inject(RestBindings.Http.CONTEXT) protected context: Context) {}
12
- value(): BindElement {
13
- return (key: string) => this.context.bind(key);
14
- }
15
- }
@@ -1,16 +0,0 @@
1
- // Copyright IBM Corp. 2017. All Rights Reserved.
2
- // Node module: @loopback/rest
3
- // This file is licensed under the MIT License.
4
- // License text available at https://opensource.org/licenses/MIT
5
-
6
- import {Context, inject, Provider} from '@loopback/context';
7
- import {GetFromContext} from '../internal-types';
8
- import {RestBindings} from '../keys';
9
-
10
- export class GetFromContextProvider implements Provider<GetFromContext> {
11
- constructor(@inject(RestBindings.Http.CONTEXT) protected context: Context) {}
12
-
13
- value() {
14
- return (key: string) => this.context.get(key);
15
- }
16
- }
@@ -1,23 +0,0 @@
1
- // Copyright IBM Corp. 2017. All Rights Reserved.
2
- // Node module: @loopback/rest
3
- // This file is licensed under the MIT License.
4
- // License text available at https://opensource.org/licenses/MIT
5
-
6
- import {BoundValue, Provider} from '@loopback/context';
7
- import {ServerRequest} from '../';
8
-
9
- export class LogErrorProvider implements Provider<BoundValue> {
10
- value() {
11
- return (err: Error, statusCode: number, req: ServerRequest) => {
12
- if (statusCode >= 500) {
13
- console.error(
14
- 'Unhandled error in %s %s: %s %s',
15
- req.method,
16
- req.url,
17
- statusCode,
18
- err.stack || err,
19
- );
20
- }
21
- };
22
- }
23
- }
@@ -1,20 +0,0 @@
1
- // Copyright IBM Corp. 2017. All Rights Reserved.
2
- // Node module: @loopback/rest
3
- // This file is licensed under the MIT License.
4
- // License text available at https://opensource.org/licenses/MIT
5
-
6
- import {Provider, BoundValue} from '@loopback/context';
7
- import {parseOperationArgs} from '../parser';
8
- /**
9
- * Provides the function for parsing args in requests at runtime.
10
- *
11
- * @export
12
- * @class ParseParamsProvider
13
- * @implements {Provider<BoundValue>}
14
- * @returns {BoundValue} The handler function that will parse request args.
15
- */
16
- export class ParseParamsProvider implements Provider<BoundValue> {
17
- value() {
18
- return parseOperationArgs;
19
- }
20
- }