@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,426 +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
- Object.defineProperty(exports, "__esModule", { value: true });
19
- const assert_1 = require("assert");
20
- const swagger2openapi = require('swagger2openapi');
21
- const js_yaml_1 = require("js-yaml");
22
- const context_1 = require("@loopback/context");
23
- const _1 = require(".");
24
- const openapi_spec_1 = require("@loopback/openapi-spec");
25
- const http_1 = require("http");
26
- const core_1 = require("@loopback/core");
27
- const metadata_1 = require("./router/metadata");
28
- const http_handler_1 = require("./http-handler");
29
- const sequence_1 = require("./sequence");
30
- const keys_1 = require("./keys");
31
- const SequenceActions = keys_1.RestBindings.SequenceActions;
32
- // NOTE(bajtos) we cannot use `import * as cloneDeep from 'lodash/cloneDeep'
33
- // because it produces the following TypeScript error:
34
- // Module '"(...)/node_modules/@types/lodash/cloneDeep/index"' resolves to
35
- // a non-module entity and cannot be imported using this construct.
36
- const cloneDeep = require('lodash/cloneDeep');
37
- const OPENAPI_SPEC_MAPPING = {
38
- '/openapi.json': { version: '3.0.0', format: 'json' },
39
- '/openapi.yaml': { version: '3.0.0', format: 'yaml' },
40
- '/swagger.json': { version: '2.0', format: 'json' },
41
- '/swagger.yaml': { version: '2.0', format: 'yaml' },
42
- };
43
- /**
44
- * A REST API server for use with Loopback.
45
- * Add this server to your application by importing the RestComponent.
46
- * ```ts
47
- * const app = new MyApplication({
48
- * components: [RestComponent]
49
- * });
50
- * // OR
51
- * app.component(RestComponent);
52
- * ```
53
- *
54
- * To add additional instances of RestServer to your application, use the
55
- * `.server` function:
56
- * ```ts
57
- * app.server(RestServer, 'nameOfYourServer');
58
- * ```
59
- *
60
- * By default, one instance of RestServer will be created when the RestComponent
61
- * is bootstrapped. This instance can be retrieved with
62
- * `app.getServer(RestServer)`, or by calling `app.get('servers.RestServer')`
63
- * Note that retrieving other instances of RestServer must be done using the
64
- * server's name:
65
- * ```ts
66
- * const server = await app.getServer('foo')
67
- * // OR
68
- * const server = await app.get('servers.foo');
69
- * ```
70
- *
71
- * @export
72
- * @class RestServer
73
- * @extends {Context}
74
- * @implements {Server}
75
- */
76
- let RestServer = class RestServer extends context_1.Context {
77
- /**
78
- * @memberof RestServer
79
- * Creates an instance of RestServer.
80
- *
81
- * @param {Application} app The application instance (injected via
82
- * CoreBindings.APPLICATION_INSTANCE).
83
- * @param {RestServerConfig=} options The configuration options (injected via
84
- * RestBindings.CONFIG).
85
- *
86
- */
87
- constructor(app, options) {
88
- super(app);
89
- if (!options)
90
- options = {};
91
- // Can't check falsiness, 0 is a valid port.
92
- if (options.port === null || options.port === undefined) {
93
- options.port = 3000;
94
- }
95
- this.bind(keys_1.RestBindings.PORT).to(options.port);
96
- this.api(openapi_spec_1.createEmptyApiSpec());
97
- this.sequence(options.sequence ? options.sequence : sequence_1.DefaultSequence);
98
- this.handleHttp = (req, res) => {
99
- try {
100
- this._handleHttpRequest(req, res).catch(err => this._onUnhandledError(req, res, err));
101
- }
102
- catch (err) {
103
- this._onUnhandledError(req, res, err);
104
- }
105
- };
106
- this.bind(keys_1.RestBindings.HANDLER).toDynamicValue(() => this.httpHandler);
107
- }
108
- get httpHandler() {
109
- this._setupHandlerIfNeeded();
110
- return this._httpHandler;
111
- }
112
- _handleHttpRequest(request, response) {
113
- // allow CORS support for all endpoints so that users
114
- // can test with online SwaggerUI instance
115
- response.setHeader('Access-Control-Allow-Origin', '*');
116
- response.setHeader('Access-Control-Allow-Credentials', 'true');
117
- response.setHeader('Access-Control-Allow-Max-Age', '86400');
118
- if (request.method === 'GET' &&
119
- request.url &&
120
- request.url in OPENAPI_SPEC_MAPPING) {
121
- // NOTE(bajtos) Regular routes are handled through Sequence.
122
- // IMO, this built-in endpoint should not run through a Sequence,
123
- // because it's not part of the application API itself.
124
- // E.g. if the app implements access/audit logs, I don't want
125
- // this endpoint to trigger a log entry. If the server implements
126
- // content-negotiation to support XML clients, I don't want the OpenAPI
127
- // spec to be converted into an XML response.
128
- const options = OPENAPI_SPEC_MAPPING[request.url];
129
- return this._serveOpenApiSpec(request, response, options);
130
- }
131
- if (request.method === 'GET' &&
132
- request.url &&
133
- request.url === '/swagger-ui') {
134
- return this._redirectToSwaggerUI(request, response);
135
- }
136
- return this.httpHandler.handleRequest(request, response);
137
- }
138
- _setupHandlerIfNeeded() {
139
- // TODO(bajtos) support hot-reloading of controllers
140
- // after the app started. The idea is to rebuild the HttpHandler
141
- // instance whenever a controller was added/deleted.
142
- // See https://github.com/strongloop/loopback-next/issues/433
143
- if (this._httpHandler)
144
- return;
145
- this._httpHandler = new http_handler_1.HttpHandler(this);
146
- for (const b of this.find('controllers.*')) {
147
- const controllerName = b.key.replace(/^controllers\./, '');
148
- const ctor = b.valueConstructor;
149
- if (!ctor) {
150
- throw new Error(`The controller ${controllerName} was not bound via .toClass()`);
151
- }
152
- const apiSpec = metadata_1.getControllerSpec(ctor);
153
- if (!apiSpec) {
154
- // controller methods are specified through app.api() spec
155
- continue;
156
- }
157
- this._httpHandler.registerController(ctor, apiSpec);
158
- }
159
- for (const b of this.find('routes.*')) {
160
- // TODO(bajtos) should we support routes defined asynchronously?
161
- const route = this.getSync(b.key);
162
- this._httpHandler.registerRoute(route);
163
- }
164
- // TODO(bajtos) should we support API spec defined asynchronously?
165
- const spec = this.getSync(keys_1.RestBindings.API_SPEC);
166
- for (const path in spec.paths) {
167
- for (const verb in spec.paths[path]) {
168
- const routeSpec = spec.paths[path][verb];
169
- this._setupOperation(verb, path, routeSpec);
170
- }
171
- }
172
- }
173
- _setupOperation(verb, path, spec) {
174
- const handler = spec['x-operation'];
175
- if (typeof handler === 'function') {
176
- // Remove a field value that cannot be represented in JSON.
177
- // Start by creating a shallow-copy of the spec, so that we don't
178
- // modify the original spec object provided by user.
179
- spec = Object.assign({}, spec);
180
- delete spec['x-operation'];
181
- const route = new _1.Route(verb, path, spec, handler);
182
- this._httpHandler.registerRoute(route);
183
- return;
184
- }
185
- const controllerName = spec['x-controller-name'];
186
- if (typeof controllerName === 'string') {
187
- const b = this.find(`controllers.${controllerName}`)[0];
188
- if (!b) {
189
- throw new Error(`Unknown controller ${controllerName} used by "${verb} ${path}"`);
190
- }
191
- const ctor = b.valueConstructor;
192
- if (!ctor) {
193
- throw new Error(`The controller ${controllerName} was not bound via .toClass()`);
194
- }
195
- const route = new _1.ControllerRoute(verb, path, spec, ctor);
196
- this._httpHandler.registerRoute(route);
197
- return;
198
- }
199
- throw new Error(`There is no handler configured for operation "${verb} ${path}`);
200
- }
201
- async _serveOpenApiSpec(request, response, options) {
202
- options = options || { version: '2.0', format: 'json' };
203
- let specObj = this.getApiSpec();
204
- if (options.version === '3.0.0') {
205
- specObj = await swagger2openapi.convertObj(specObj, { direct: true });
206
- }
207
- if (options.format === 'json') {
208
- const spec = JSON.stringify(specObj, null, 2);
209
- response.setHeader('content-type', 'application/json; charset=utf-8');
210
- response.end(spec, 'utf-8');
211
- }
212
- else {
213
- const yaml = js_yaml_1.safeDump(specObj, {});
214
- response.setHeader('content-type', 'text/yaml; charset=utf-8');
215
- response.end(yaml, 'utf-8');
216
- }
217
- }
218
- async _redirectToSwaggerUI(request, response) {
219
- response.statusCode = 308;
220
- response.setHeader('Location', 'http://petstore.swagger.io/?url=' +
221
- 'http://' +
222
- request.headers.host +
223
- '/swagger.json');
224
- response.end();
225
- }
226
- /**
227
- * Register a controller class with this server.
228
- *
229
- * @param {Constructor} controllerCtor The controller class
230
- * (constructor function).
231
- * @returns {Binding} The newly created binding, you can use the reference to
232
- * further modify the binding, e.g. lock the value to prevent further
233
- * modifications.
234
- *
235
- * ```ts
236
- * class MyController {
237
- * }
238
- * app.controller(MyController).lock();
239
- * ```
240
- *
241
- */
242
- controller(controllerCtor) {
243
- return this.bind('controllers.' + controllerCtor.name).toClass(controllerCtor);
244
- }
245
- route(routeOrVerb, path, spec, controller, methodName) {
246
- if (typeof routeOrVerb === 'object') {
247
- const r = routeOrVerb;
248
- return this.bind(`routes.${r.verb} ${r.path}`).to(r);
249
- }
250
- if (!path) {
251
- throw new assert_1.AssertionError({
252
- message: 'path is required for a controller-based route',
253
- });
254
- }
255
- if (!spec) {
256
- throw new assert_1.AssertionError({
257
- message: 'spec is required for a controller-based route',
258
- });
259
- }
260
- if (!controller) {
261
- throw new assert_1.AssertionError({
262
- message: 'controller is required for a controller-based route',
263
- });
264
- }
265
- if (!methodName) {
266
- throw new assert_1.AssertionError({
267
- message: 'methodName is required for a controller-based route',
268
- });
269
- }
270
- return this.route(new _1.ControllerRoute(routeOrVerb, path, spec, controller, methodName));
271
- }
272
- /**
273
- * Set the OpenAPI specification that defines the REST API schema for this
274
- * server. All routes, parameter definitions and return types will be defined
275
- * in this way.
276
- *
277
- * Note that this will override any routes defined via decorators at the
278
- * controller level (this function takes precedent).
279
- *
280
- * @param {OpenApiSpec} spec The OpenAPI specification, as an object.
281
- * @returns {Binding}
282
- * @memberof RestServer
283
- */
284
- api(spec) {
285
- return this.bind(keys_1.RestBindings.API_SPEC).to(spec);
286
- }
287
- /**
288
- * Get the OpenAPI specification describing the REST API provided by
289
- * this application.
290
- *
291
- * This method merges operations (HTTP endpoints) from the following sources:
292
- * - `app.api(spec)`
293
- * - `app.controller(MyController)`
294
- * - `app.route(route)`
295
- * - `app.route('get', '/greet', operationSpec, MyController, 'greet')`
296
- */
297
- getApiSpec() {
298
- const spec = this.getSync(keys_1.RestBindings.API_SPEC);
299
- // Apply deep clone to prevent getApiSpec() callers from
300
- // accidentally modifying our internal routing data
301
- spec.paths = cloneDeep(this.httpHandler.describeApiPaths());
302
- return spec;
303
- }
304
- /**
305
- * Configure a custom sequence class for handling incoming requests.
306
- *
307
- * ```ts
308
- * class MySequence implements SequenceHandler {
309
- * constructor(
310
- * @inject('send) public send: Send)) {
311
- * }
312
- *
313
- * public async handle(request: ParsedRequest, response: ServerResponse) {
314
- * send(response, 'hello world');
315
- * }
316
- * }
317
- * ```
318
- *
319
- * @param value The sequence to invoke for each incoming request.
320
- */
321
- sequence(value) {
322
- this.bind(keys_1.RestBindings.SEQUENCE).toClass(value);
323
- }
324
- /**
325
- * Configure a custom sequence function for handling incoming requests.
326
- *
327
- * ```ts
328
- * app.handler((sequence, request, response) => {
329
- * sequence.send(response, 'hello world');
330
- * });
331
- * ```
332
- *
333
- * @param handlerFn The handler to invoke for each incoming request.
334
- */
335
- handler(handlerFn) {
336
- let SequenceFromFunction = class SequenceFromFunction extends sequence_1.DefaultSequence {
337
- // NOTE(bajtos) Unfortunately, we have to duplicate the constructor
338
- // in order for our DI/IoC framework to inject constructor arguments
339
- constructor(ctx, findRoute, parseParams, invoke, send, reject) {
340
- super(ctx, findRoute, parseParams, invoke, send, reject);
341
- this.ctx = ctx;
342
- this.findRoute = findRoute;
343
- this.parseParams = parseParams;
344
- this.invoke = invoke;
345
- this.send = send;
346
- this.reject = reject;
347
- }
348
- async handle(request, response) {
349
- await Promise.resolve(handlerFn(this, request, response));
350
- }
351
- };
352
- SequenceFromFunction = __decorate([
353
- __param(0, context_1.inject(keys_1.RestBindings.Http.CONTEXT)),
354
- __param(1, context_1.inject(SequenceActions.FIND_ROUTE)),
355
- __param(2, context_1.inject(SequenceActions.PARSE_PARAMS)),
356
- __param(3, context_1.inject(SequenceActions.INVOKE_METHOD)),
357
- __param(4, context_1.inject(SequenceActions.SEND)),
358
- __param(5, context_1.inject(SequenceActions.REJECT)),
359
- __metadata("design:paramtypes", [context_1.Context, Function, Function, Function, Function, Function])
360
- ], SequenceFromFunction);
361
- this.sequence(SequenceFromFunction);
362
- }
363
- /**
364
- * Start this REST API's HTTP/HTTPS server.
365
- *
366
- * @returns {Promise<void>}
367
- * @memberof RestServer
368
- */
369
- async start() {
370
- // Setup the HTTP handler so that we can verify the configuration
371
- // of API spec, controllers and routes at startup time.
372
- this._setupHandlerIfNeeded();
373
- const httpPort = await this.get(keys_1.RestBindings.PORT);
374
- this._httpServer = http_1.createServer(this.handleHttp);
375
- const httpServer = this._httpServer;
376
- // TODO(bajtos) support httpHostname too
377
- // See https://github.com/strongloop/loopback-next/issues/434
378
- httpServer.listen(httpPort);
379
- return new Promise((resolve, reject) => {
380
- httpServer.once('listening', () => {
381
- this.bind(keys_1.RestBindings.PORT).to(httpServer.address().port);
382
- resolve();
383
- });
384
- httpServer.once('error', reject);
385
- });
386
- }
387
- /**
388
- * Stop this REST API's HTTP/HTTPS server.
389
- *
390
- * @returns {Promise<void>}
391
- * @memberof RestServer
392
- */
393
- async stop() {
394
- // Kill the server instance.
395
- const server = this._httpServer;
396
- return new Promise((resolve, reject) => {
397
- server.close((err) => {
398
- if (err) {
399
- reject(err);
400
- }
401
- else {
402
- resolve();
403
- }
404
- });
405
- });
406
- }
407
- _onUnhandledError(req, res, err) {
408
- if (!res.headersSent) {
409
- res.statusCode = 500;
410
- res.end();
411
- }
412
- // It's the responsibility of the Sequence to handle any errors.
413
- // If an unhandled error escaped, then something very wrong happened
414
- // and it's best to crash the process immediately.
415
- process.nextTick(() => {
416
- throw err;
417
- });
418
- }
419
- };
420
- RestServer = __decorate([
421
- __param(0, context_1.inject(core_1.CoreBindings.APPLICATION_INSTANCE)),
422
- __param(1, context_1.inject(keys_1.RestBindings.CONFIG)),
423
- __metadata("design:paramtypes", [core_1.Application, Object])
424
- ], RestServer);
425
- exports.RestServer = RestServer;
426
- //# sourceMappingURL=rest-server.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rest-server.js","sourceRoot":"","sources":["../../src/rest-server.ts"],"names":[],"mappings":"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"}
@@ -1,150 +0,0 @@
1
- import { OperationObject, ParameterObject, SchemaObject, PathsObject } from '@loopback/openapi-spec';
2
- export interface ControllerSpec {
3
- /**
4
- * The base path on which the Controller API is served.
5
- * If it is not included, the API is served directly under the host.
6
- * The value MUST start with a leading slash (/).
7
- */
8
- basePath?: string;
9
- /**
10
- * The available paths and operations for the API.
11
- */
12
- paths: PathsObject;
13
- }
14
- /**
15
- * Decorate the given Controller constructor with metadata describing
16
- * the HTTP/REST API the Controller implements/provides.
17
- *
18
- * `@api` can be applied to controller classes. For example,
19
- * ```
20
- * @api({basePath: '/my'})
21
- * class MyController {
22
- * // ...
23
- * }
24
- * ```
25
- *
26
- * @param spec OpenAPI specification describing the endpoints
27
- * handled by this controller
28
- *
29
- * @decorator
30
- */
31
- export declare function api(spec: ControllerSpec): (constructor: Function) => void;
32
- /**
33
- * Get the controller spec for the given class
34
- * @param constructor Controller class
35
- */
36
- export declare function getControllerSpec(constructor: Function): ControllerSpec;
37
- /**
38
- * Expose a Controller method as a REST API operation
39
- * mapped to `GET` request method.
40
- *
41
- * @param path The URL path of this operation, e.g. `/product/{id}`
42
- * @param spec The OpenAPI specification describing parameters and responses
43
- * of this operation.
44
- */
45
- export declare function get(path: string, spec?: OperationObject): (target: any, propertyKey: string, descriptor: PropertyDescriptor) => void;
46
- /**
47
- * Expose a Controller method as a REST API operation
48
- * mapped to `POST` request method.
49
- *
50
- * @param path The URL path of this operation, e.g. `/product/{id}`
51
- * @param spec The OpenAPI specification describing parameters and responses
52
- * of this operation.
53
- */
54
- export declare function post(path: string, spec?: OperationObject): (target: any, propertyKey: string, descriptor: PropertyDescriptor) => void;
55
- /**
56
- * Expose a Controller method as a REST API operation
57
- * mapped to `PUT` request method.
58
- *
59
- * @param path The URL path of this operation, e.g. `/product/{id}`
60
- * @param spec The OpenAPI specification describing parameters and responses
61
- * of this operation.
62
- */
63
- export declare function put(path: string, spec?: OperationObject): (target: any, propertyKey: string, descriptor: PropertyDescriptor) => void;
64
- /**
65
- * Expose a Controller method as a REST API operation
66
- * mapped to `PATCH` request method.
67
- *
68
- * @param path The URL path of this operation, e.g. `/product/{id}`
69
- * @param spec The OpenAPI specification describing parameters and responses
70
- * of this operation.
71
- */
72
- export declare function patch(path: string, spec?: OperationObject): (target: any, propertyKey: string, descriptor: PropertyDescriptor) => void;
73
- /**
74
- * Expose a Controller method as a REST API operation
75
- * mapped to `DELETE` request method.
76
- *
77
- * @param path The URL path of this operation, e.g. `/product/{id}`
78
- * @param spec The OpenAPI specification describing parameters and responses
79
- * of this operation.
80
- */
81
- export declare function del(path: string, spec?: OperationObject): (target: any, propertyKey: string, descriptor: PropertyDescriptor) => void;
82
- /**
83
- * Expose a Controller method as a REST API operation.
84
- *
85
- * @param verb HTTP verb, e.g. `GET` or `POST`.
86
- * @param path The URL path of this operation, e.g. `/product/{id}`
87
- * @param spec The OpenAPI specification describing parameters and responses
88
- * of this operation.
89
- */
90
- export declare function operation(verb: string, path: string, spec?: OperationObject): (target: any, propertyKey: string, descriptor: PropertyDescriptor) => void;
91
- /**
92
- * Describe an input parameter of a Controller method.
93
- *
94
- * `@param` can be applied to method itself or specific parameters. For example,
95
- * ```
96
- * class MyController {
97
- * @get('/')
98
- * @param(offsetSpec)
99
- * @param(pageSizeSpec)
100
- * list(offset?: number, pageSize?: number) {}
101
- * }
102
- * ```
103
- * or
104
- * ```
105
- * class MyController {
106
- * @get('/')
107
- * list(
108
- * @param(offsetSpec) offset?: number,
109
- * @param(pageSizeSpec) pageSize?: number,
110
- * ) {}
111
- * }
112
- * ```
113
- * Please note mixed usage of `@param` at method/parameter level is not allowed.
114
- *
115
- * @param paramSpec Parameter specification.
116
- */
117
- export declare function param(paramSpec: ParameterObject): (target: any, propertyKey: string, descriptorOrParameterIndex: number | PropertyDescriptor) => void;
118
- export declare namespace param {
119
- const query: {
120
- string: (name: string) => (target: any, propertyKey: string, descriptorOrParameterIndex: number | PropertyDescriptor) => void;
121
- number: (name: string) => (target: any, propertyKey: string, descriptorOrParameterIndex: number | PropertyDescriptor) => void;
122
- integer: (name: string) => (target: any, propertyKey: string, descriptorOrParameterIndex: number | PropertyDescriptor) => void;
123
- boolean: (name: string) => (target: any, propertyKey: string, descriptorOrParameterIndex: number | PropertyDescriptor) => void;
124
- };
125
- const header: {
126
- string: (name: string) => (target: any, propertyKey: string, descriptorOrParameterIndex: number | PropertyDescriptor) => void;
127
- number: (name: string) => (target: any, propertyKey: string, descriptorOrParameterIndex: number | PropertyDescriptor) => void;
128
- integer: (name: string) => (target: any, propertyKey: string, descriptorOrParameterIndex: number | PropertyDescriptor) => void;
129
- boolean: (name: string) => (target: any, propertyKey: string, descriptorOrParameterIndex: number | PropertyDescriptor) => void;
130
- };
131
- const path: {
132
- string: (name: string) => (target: any, propertyKey: string, descriptorOrParameterIndex: number | PropertyDescriptor) => void;
133
- number: (name: string) => (target: any, propertyKey: string, descriptorOrParameterIndex: number | PropertyDescriptor) => void;
134
- integer: (name: string) => (target: any, propertyKey: string, descriptorOrParameterIndex: number | PropertyDescriptor) => void;
135
- boolean: (name: string) => (target: any, propertyKey: string, descriptorOrParameterIndex: number | PropertyDescriptor) => void;
136
- };
137
- const formData: {
138
- string: (name: string) => (target: any, propertyKey: string, descriptorOrParameterIndex: number | PropertyDescriptor) => void;
139
- number: (name: string) => (target: any, propertyKey: string, descriptorOrParameterIndex: number | PropertyDescriptor) => void;
140
- integer: (name: string) => (target: any, propertyKey: string, descriptorOrParameterIndex: number | PropertyDescriptor) => void;
141
- boolean: (name: string) => (target: any, propertyKey: string, descriptorOrParameterIndex: number | PropertyDescriptor) => void;
142
- };
143
- /**
144
- * Define a parameter that's set to the full request body.
145
- *
146
- * @param name Parameter name
147
- * @param schema The schema defining the type used for the body parameter.
148
- */
149
- const body: (name: string, schema: SchemaObject) => (target: any, propertyKey: string, descriptorOrParameterIndex: number | PropertyDescriptor) => void;
150
- }