@loopback/rest 4.0.0-alpha.8 → 5.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (388) hide show
  1. package/CHANGELOG.md +1822 -0
  2. package/LICENSE +1 -1
  3. package/README.md +30 -58
  4. package/dist/body-parsers/body-parser.d.ts +25 -0
  5. package/dist/body-parsers/body-parser.helpers.d.ts +44 -0
  6. package/dist/body-parsers/body-parser.helpers.js +102 -0
  7. package/dist/body-parsers/body-parser.helpers.js.map +1 -0
  8. package/dist/body-parsers/body-parser.js +159 -0
  9. package/dist/body-parsers/body-parser.js.map +1 -0
  10. package/dist/body-parsers/body-parser.json.d.ts +9 -0
  11. package/dist/body-parsers/body-parser.json.js +43 -0
  12. package/dist/body-parsers/body-parser.json.js.map +1 -0
  13. package/dist/body-parsers/body-parser.raw.d.ts +12 -0
  14. package/dist/body-parsers/body-parser.raw.js +39 -0
  15. package/dist/body-parsers/body-parser.raw.js.map +1 -0
  16. package/dist/body-parsers/body-parser.stream.d.ts +12 -0
  17. package/dist/body-parsers/body-parser.stream.js +28 -0
  18. package/dist/body-parsers/body-parser.stream.js.map +1 -0
  19. package/dist/body-parsers/body-parser.text.d.ts +9 -0
  20. package/dist/body-parsers/body-parser.text.js +38 -0
  21. package/dist/body-parsers/body-parser.text.js.map +1 -0
  22. package/dist/body-parsers/body-parser.urlencoded.d.ts +9 -0
  23. package/dist/body-parsers/body-parser.urlencoded.js +36 -0
  24. package/dist/body-parsers/body-parser.urlencoded.js.map +1 -0
  25. package/dist/body-parsers/index.d.ts +8 -0
  26. package/dist/body-parsers/index.js +16 -0
  27. package/dist/body-parsers/index.js.map +1 -0
  28. package/dist/body-parsers/types.d.ts +51 -0
  29. package/dist/body-parsers/types.js +12 -0
  30. package/dist/body-parsers/types.js.map +1 -0
  31. package/dist/coercion/coerce-parameter.d.ts +9 -0
  32. package/dist/coercion/coerce-parameter.js +166 -0
  33. package/dist/coercion/coerce-parameter.js.map +1 -0
  34. package/dist/coercion/utils.d.ts +43 -0
  35. package/dist/coercion/utils.js +96 -0
  36. package/dist/coercion/utils.js.map +1 -0
  37. package/dist/coercion/validator.d.ts +49 -0
  38. package/dist/coercion/validator.js +85 -0
  39. package/dist/coercion/validator.js.map +1 -0
  40. package/dist/http-handler.d.ts +38 -0
  41. package/dist/http-handler.js +68 -0
  42. package/dist/http-handler.js.map +1 -0
  43. package/dist/index.d.ts +36 -1
  44. package/dist/index.js +40 -6
  45. package/dist/index.js.map +1 -0
  46. package/dist/keys.d.ts +198 -0
  47. package/dist/keys.js +202 -0
  48. package/dist/keys.js.map +1 -0
  49. package/dist/parse-json.d.ts +11 -0
  50. package/dist/parse-json.js +42 -0
  51. package/dist/parse-json.js.map +1 -0
  52. package/dist/parser.d.ts +11 -0
  53. package/dist/parser.js +76 -0
  54. package/dist/parser.js.map +1 -0
  55. package/{dist6/src/providers/find-route.d.ts → dist/providers/find-route.provider.d.ts} +3 -1
  56. package/dist/providers/find-route.provider.js +36 -0
  57. package/dist/providers/find-route.provider.js.map +1 -0
  58. package/dist/providers/index.d.ts +6 -0
  59. package/dist/providers/index.js +14 -0
  60. package/dist/providers/index.js.map +1 -0
  61. package/dist/{src/providers/invoke-method.d.ts → providers/invoke-method.provider.d.ts} +3 -1
  62. package/dist/providers/invoke-method.provider.js +30 -0
  63. package/dist/providers/invoke-method.provider.js.map +1 -0
  64. package/dist/providers/log-error.provider.d.ts +6 -0
  65. package/dist/providers/log-error.provider.js +21 -0
  66. package/dist/providers/log-error.provider.js.map +1 -0
  67. package/dist/providers/parse-params.provider.d.ts +15 -0
  68. package/dist/providers/parse-params.provider.js +41 -0
  69. package/dist/providers/parse-params.provider.js.map +1 -0
  70. package/dist/providers/reject.provider.d.ts +10 -0
  71. package/dist/providers/reject.provider.js +47 -0
  72. package/dist/providers/reject.provider.js.map +1 -0
  73. package/dist/{src/providers/send.d.ts → providers/send.provider.d.ts} +1 -4
  74. package/dist/{src/providers/send.js → providers/send.provider.js} +4 -6
  75. package/dist/providers/send.provider.js.map +1 -0
  76. package/dist/request-context.d.ts +36 -0
  77. package/dist/request-context.js +104 -0
  78. package/dist/request-context.js.map +1 -0
  79. package/dist/rest-http-error.d.ts +37 -0
  80. package/dist/rest-http-error.js +51 -0
  81. package/dist/rest-http-error.js.map +1 -0
  82. package/dist/rest.application.d.ts +232 -0
  83. package/dist/rest.application.js +174 -0
  84. package/dist/rest.application.js.map +1 -0
  85. package/dist/rest.component.d.ts +15 -0
  86. package/dist/rest.component.js +72 -0
  87. package/dist/rest.component.js.map +1 -0
  88. package/dist/rest.server.d.ts +443 -0
  89. package/dist/rest.server.js +748 -0
  90. package/dist/rest.server.js.map +1 -0
  91. package/dist/router/base-route.d.ts +29 -0
  92. package/dist/router/base-route.js +41 -0
  93. package/dist/router/base-route.js.map +1 -0
  94. package/dist/router/controller-route.d.ts +61 -0
  95. package/dist/router/controller-route.js +160 -0
  96. package/dist/router/controller-route.js.map +1 -0
  97. package/dist/router/external-express-routes.d.ts +24 -0
  98. package/dist/router/external-express-routes.js +90 -0
  99. package/dist/router/external-express-routes.js.map +1 -0
  100. package/dist/router/handler-route.d.ts +12 -0
  101. package/dist/router/handler-route.js +30 -0
  102. package/dist/router/handler-route.js.map +1 -0
  103. package/dist/router/index.d.ts +14 -0
  104. package/dist/router/index.js +25 -0
  105. package/dist/router/index.js.map +1 -0
  106. package/dist/router/openapi-path.d.ts +14 -0
  107. package/dist/router/openapi-path.js +64 -0
  108. package/dist/router/openapi-path.js.map +1 -0
  109. package/dist/router/redirect-route.d.ts +23 -0
  110. package/dist/router/redirect-route.js +50 -0
  111. package/dist/router/redirect-route.js.map +1 -0
  112. package/dist/router/regexp-router.d.ts +25 -0
  113. package/dist/router/regexp-router.js +84 -0
  114. package/dist/router/regexp-router.js.map +1 -0
  115. package/dist/router/rest-router.d.ts +35 -0
  116. package/dist/{src/internal-types.js → router/rest-router.js} +2 -2
  117. package/dist/router/rest-router.js.map +1 -0
  118. package/dist/router/route-entry.d.ts +46 -0
  119. package/dist/router/route-entry.js +20 -0
  120. package/dist/router/route-entry.js.map +1 -0
  121. package/dist/router/route-sort.d.ts +7 -0
  122. package/dist/router/route-sort.js +75 -0
  123. package/dist/router/route-sort.js.map +1 -0
  124. package/dist/router/router-base.d.ts +42 -0
  125. package/dist/router/router-base.js +101 -0
  126. package/dist/router/router-base.js.map +1 -0
  127. package/dist/router/router-spec.d.ts +3 -0
  128. package/dist/router/router-spec.js +40 -0
  129. package/dist/router/router-spec.js.map +1 -0
  130. package/dist/router/routing-table.d.ts +32 -0
  131. package/dist/router/routing-table.js +86 -0
  132. package/dist/router/routing-table.js.map +1 -0
  133. package/dist/router/trie-router.d.ts +13 -0
  134. package/dist/router/trie-router.js +55 -0
  135. package/dist/router/trie-router.js.map +1 -0
  136. package/dist/router/trie.d.ts +59 -0
  137. package/dist/router/trie.js +180 -0
  138. package/dist/router/trie.js.map +1 -0
  139. package/{dist6/src → dist}/sequence.d.ts +28 -23
  140. package/dist/sequence.js +112 -0
  141. package/dist/sequence.js.map +1 -0
  142. package/dist/spec-enhancers/consolidate.spec-enhancer.d.ts +68 -0
  143. package/dist/spec-enhancers/consolidate.spec-enhancer.js +145 -0
  144. package/dist/spec-enhancers/consolidate.spec-enhancer.js.map +1 -0
  145. package/dist/spec-enhancers/info.spec-enhancer.d.ts +19 -0
  146. package/dist/spec-enhancers/info.spec-enhancer.js +89 -0
  147. package/dist/spec-enhancers/info.spec-enhancer.js.map +1 -0
  148. package/dist/types.d.ts +178 -0
  149. package/dist/types.js +12 -0
  150. package/dist/types.js.map +1 -0
  151. package/dist/validation/ajv-factory.provider.d.ts +12 -0
  152. package/dist/validation/ajv-factory.provider.js +87 -0
  153. package/dist/validation/ajv-factory.provider.js.map +1 -0
  154. package/dist/validation/request-body.validator.d.ts +14 -0
  155. package/dist/validation/request-body.validator.js +161 -0
  156. package/dist/validation/request-body.validator.js.map +1 -0
  157. package/dist/writer.d.ts +9 -0
  158. package/dist/writer.js +62 -0
  159. package/dist/writer.js.map +1 -0
  160. package/package.json +66 -38
  161. package/src/body-parsers/body-parser.helpers.ts +148 -0
  162. package/src/body-parsers/body-parser.json.ts +46 -0
  163. package/src/body-parsers/body-parser.raw.ts +42 -0
  164. package/src/body-parsers/body-parser.stream.ts +27 -0
  165. package/src/body-parsers/body-parser.text.ts +44 -0
  166. package/src/body-parsers/body-parser.ts +208 -0
  167. package/src/body-parsers/body-parser.urlencoded.ts +42 -0
  168. package/src/body-parsers/index.ts +13 -0
  169. package/src/body-parsers/types.ts +60 -0
  170. package/src/coercion/coerce-parameter.ts +207 -0
  171. package/src/coercion/utils.ts +103 -0
  172. package/src/coercion/validator.ts +98 -0
  173. package/src/http-handler.ts +84 -41
  174. package/src/index.ts +37 -30
  175. package/src/keys.ts +273 -20
  176. package/src/parse-json.ts +42 -0
  177. package/src/parser.ts +89 -104
  178. package/src/providers/{find-route.ts → find-route.provider.ts} +10 -7
  179. package/src/providers/index.ts +7 -9
  180. package/src/providers/{invoke-method.ts → invoke-method.provider.ts} +8 -5
  181. package/src/providers/log-error.provider.ts +27 -0
  182. package/src/providers/parse-params.provider.ts +42 -0
  183. package/src/providers/reject.provider.ts +44 -0
  184. package/src/providers/{send.ts → send.provider.ts} +2 -5
  185. package/src/request-context.ts +123 -0
  186. package/src/rest-http-error.ts +87 -0
  187. package/src/rest.application.ts +390 -0
  188. package/src/rest.component.ts +111 -0
  189. package/src/rest.server.ts +1192 -0
  190. package/src/router/base-route.ts +53 -0
  191. package/src/router/controller-route.ts +241 -0
  192. package/src/router/external-express-routes.ts +139 -0
  193. package/src/router/handler-route.ts +44 -0
  194. package/src/router/index.ts +24 -0
  195. package/src/router/openapi-path.ts +67 -0
  196. package/src/router/redirect-route.ts +64 -0
  197. package/src/router/regexp-router.ts +104 -0
  198. package/src/router/rest-router.ts +48 -0
  199. package/src/router/route-entry.ts +74 -0
  200. package/src/router/route-sort.ts +74 -0
  201. package/src/router/router-base.ts +124 -0
  202. package/src/router/router-spec.ts +36 -0
  203. package/src/router/routing-table.ts +83 -279
  204. package/src/router/trie-router.ts +57 -0
  205. package/src/router/trie.ts +233 -0
  206. package/src/sequence.ts +44 -37
  207. package/src/spec-enhancers/consolidate.spec-enhancer.ts +182 -0
  208. package/src/spec-enhancers/info.spec-enhancer.ts +92 -0
  209. package/src/types.ts +216 -0
  210. package/src/validation/ajv-factory.provider.ts +94 -0
  211. package/src/validation/request-body.validator.ts +208 -0
  212. package/src/writer.ts +41 -68
  213. package/api-docs/.DS_Store +0 -0
  214. package/api-docs/apple-touch-icon-114x114-precomposed.png +0 -0
  215. package/api-docs/apple-touch-icon-144x144-precomposed.png +0 -0
  216. package/api-docs/apple-touch-icon-57x57-precomposed.png +0 -0
  217. package/api-docs/apple-touch-icon-72x72-precomposed.png +0 -0
  218. package/api-docs/apple-touch-icon-precomposed.png +0 -0
  219. package/api-docs/apple-touch-icon.png +0 -0
  220. package/api-docs/css/bootstrap.min.css +0 -9
  221. package/api-docs/css/code-themes/arta.css +0 -158
  222. package/api-docs/css/code-themes/ascetic.css +0 -50
  223. package/api-docs/css/code-themes/brown_paper.css +0 -104
  224. package/api-docs/css/code-themes/brown_papersq.png +0 -0
  225. package/api-docs/css/code-themes/dark.css +0 -103
  226. package/api-docs/css/code-themes/default.css +0 -135
  227. package/api-docs/css/code-themes/far.css +0 -111
  228. package/api-docs/css/code-themes/github.css +0 -127
  229. package/api-docs/css/code-themes/googlecode.css +0 -144
  230. package/api-docs/css/code-themes/idea.css +0 -121
  231. package/api-docs/css/code-themes/ir_black.css +0 -104
  232. package/api-docs/css/code-themes/magula.css +0 -121
  233. package/api-docs/css/code-themes/monokai.css +0 -114
  234. package/api-docs/css/code-themes/pojoaque.css +0 -104
  235. package/api-docs/css/code-themes/pojoaque.jpg +0 -0
  236. package/api-docs/css/code-themes/rainbow.css +0 -114
  237. package/api-docs/css/code-themes/school_book.css +0 -111
  238. package/api-docs/css/code-themes/school_book.png +0 -0
  239. package/api-docs/css/code-themes/sl-theme.css +0 -45
  240. package/api-docs/css/code-themes/solarized_dark.css +0 -88
  241. package/api-docs/css/code-themes/solarized_light.css +0 -88
  242. package/api-docs/css/code-themes/sunburst.css +0 -158
  243. package/api-docs/css/code-themes/tomorrow-night-blue.css +0 -52
  244. package/api-docs/css/code-themes/tomorrow-night-bright.css +0 -51
  245. package/api-docs/css/code-themes/tomorrow-night-eighties.css +0 -51
  246. package/api-docs/css/code-themes/tomorrow-night.css +0 -52
  247. package/api-docs/css/code-themes/tomorrow.css +0 -49
  248. package/api-docs/css/code-themes/vs.css +0 -86
  249. package/api-docs/css/code-themes/xcode.css +0 -154
  250. package/api-docs/css/code-themes/zenburn.css +0 -115
  251. package/api-docs/css/main.css +0 -139
  252. package/api-docs/favicon.ico +0 -0
  253. package/api-docs/fonts/0ihfXUL2emPh0ROJezvraLO3LdcAZYWl9Si6vvxL-qU.woff +0 -0
  254. package/api-docs/fonts/OsJ2DjdpjqFRVUSto6IffLO3LdcAZYWl9Si6vvxL-qU.woff +0 -0
  255. package/api-docs/fonts/_aijTyevf54tkVDLy-dlnLO3LdcAZYWl9Si6vvxL-qU.woff +0 -0
  256. package/api-docs/index.html +0 -7082
  257. package/api-docs/js/main.js +0 -19
  258. package/api-docs/js/vendor/bootstrap.min.js +0 -6
  259. package/api-docs/js/vendor/jquery-1.10.1.min.js +0 -6
  260. package/api-docs/js/vendor/jquery.scrollTo-1.4.3.1.js +0 -218
  261. package/api-docs/js/vendor/modernizr-2.6.2-respond-1.1.0.min.js +0 -11
  262. package/dist/src/http-handler.d.ts +0 -19
  263. package/dist/src/http-handler.js +0 -43
  264. package/dist/src/http-handler.js.map +0 -1
  265. package/dist/src/index.d.ts +0 -14
  266. package/dist/src/index.js +0 -33
  267. package/dist/src/index.js.map +0 -1
  268. package/dist/src/internal-types.d.ts +0 -67
  269. package/dist/src/internal-types.js.map +0 -1
  270. package/dist/src/keys.d.ts +0 -22
  271. package/dist/src/keys.js +0 -35
  272. package/dist/src/keys.js.map +0 -1
  273. package/dist/src/parser.d.ts +0 -11
  274. package/dist/src/parser.js +0 -98
  275. package/dist/src/parser.js.map +0 -1
  276. package/dist/src/providers/bind-element.d.ts +0 -7
  277. package/dist/src/providers/bind-element.js +0 -34
  278. package/dist/src/providers/bind-element.js.map +0 -1
  279. package/dist/src/providers/find-route.d.ts +0 -9
  280. package/dist/src/providers/find-route.js +0 -42
  281. package/dist/src/providers/find-route.js.map +0 -1
  282. package/dist/src/providers/get-from-context.d.ts +0 -7
  283. package/dist/src/providers/get-from-context.js +0 -34
  284. package/dist/src/providers/get-from-context.js.map +0 -1
  285. package/dist/src/providers/index.d.ts +0 -8
  286. package/dist/src/providers/index.js +0 -18
  287. package/dist/src/providers/index.js.map +0 -1
  288. package/dist/src/providers/invoke-method.js +0 -36
  289. package/dist/src/providers/invoke-method.js.map +0 -1
  290. package/dist/src/providers/log-error-provider.d.ts +0 -6
  291. package/dist/src/providers/log-error-provider.js +0 -17
  292. package/dist/src/providers/log-error-provider.js.map +0 -1
  293. package/dist/src/providers/parse-params.d.ts +0 -13
  294. package/dist/src/providers/parse-params.js +0 -22
  295. package/dist/src/providers/parse-params.js.map +0 -1
  296. package/dist/src/providers/reject.d.ts +0 -6
  297. package/dist/src/providers/reject.js +0 -40
  298. package/dist/src/providers/reject.js.map +0 -1
  299. package/dist/src/providers/send.js.map +0 -1
  300. package/dist/src/rest-component.d.ts +0 -12
  301. package/dist/src/rest-component.js +0 -50
  302. package/dist/src/rest-component.js.map +0 -1
  303. package/dist/src/rest-server.d.ts +0 -211
  304. package/dist/src/rest-server.js +0 -426
  305. package/dist/src/rest-server.js.map +0 -1
  306. package/dist/src/router/metadata.d.ts +0 -150
  307. package/dist/src/router/metadata.js +0 -410
  308. package/dist/src/router/metadata.js.map +0 -1
  309. package/dist/src/router/routing-table.d.ts +0 -68
  310. package/dist/src/router/routing-table.js +0 -204
  311. package/dist/src/router/routing-table.js.map +0 -1
  312. package/dist/src/sequence.d.ts +0 -81
  313. package/dist/src/sequence.js +0 -104
  314. package/dist/src/sequence.js.map +0 -1
  315. package/dist/src/writer.d.ts +0 -17
  316. package/dist/src/writer.js +0 -87
  317. package/dist/src/writer.js.map +0 -1
  318. package/dist6/index.d.ts +0 -1
  319. package/dist6/index.js +0 -12
  320. package/dist6/src/http-handler.d.ts +0 -19
  321. package/dist6/src/http-handler.js +0 -53
  322. package/dist6/src/http-handler.js.map +0 -1
  323. package/dist6/src/index.d.ts +0 -14
  324. package/dist6/src/index.js +0 -33
  325. package/dist6/src/index.js.map +0 -1
  326. package/dist6/src/internal-types.d.ts +0 -67
  327. package/dist6/src/internal-types.js +0 -7
  328. package/dist6/src/internal-types.js.map +0 -1
  329. package/dist6/src/keys.d.ts +0 -22
  330. package/dist6/src/keys.js +0 -35
  331. package/dist6/src/keys.js.map +0 -1
  332. package/dist6/src/parser.d.ts +0 -11
  333. package/dist6/src/parser.js +0 -108
  334. package/dist6/src/parser.js.map +0 -1
  335. package/dist6/src/providers/bind-element.d.ts +0 -7
  336. package/dist6/src/providers/bind-element.js +0 -34
  337. package/dist6/src/providers/bind-element.js.map +0 -1
  338. package/dist6/src/providers/find-route.js +0 -42
  339. package/dist6/src/providers/find-route.js.map +0 -1
  340. package/dist6/src/providers/get-from-context.d.ts +0 -7
  341. package/dist6/src/providers/get-from-context.js +0 -34
  342. package/dist6/src/providers/get-from-context.js.map +0 -1
  343. package/dist6/src/providers/index.d.ts +0 -8
  344. package/dist6/src/providers/index.js +0 -18
  345. package/dist6/src/providers/index.js.map +0 -1
  346. package/dist6/src/providers/invoke-method.d.ts +0 -7
  347. package/dist6/src/providers/invoke-method.js +0 -44
  348. package/dist6/src/providers/invoke-method.js.map +0 -1
  349. package/dist6/src/providers/log-error-provider.d.ts +0 -6
  350. package/dist6/src/providers/log-error-provider.js +0 -17
  351. package/dist6/src/providers/log-error-provider.js.map +0 -1
  352. package/dist6/src/providers/parse-params.d.ts +0 -13
  353. package/dist6/src/providers/parse-params.js +0 -22
  354. package/dist6/src/providers/parse-params.js.map +0 -1
  355. package/dist6/src/providers/reject.d.ts +0 -6
  356. package/dist6/src/providers/reject.js +0 -40
  357. package/dist6/src/providers/reject.js.map +0 -1
  358. package/dist6/src/providers/send.d.ts +0 -15
  359. package/dist6/src/providers/send.js +0 -24
  360. package/dist6/src/providers/send.js.map +0 -1
  361. package/dist6/src/rest-component.d.ts +0 -12
  362. package/dist6/src/rest-component.js +0 -50
  363. package/dist6/src/rest-component.js.map +0 -1
  364. package/dist6/src/rest-server.d.ts +0 -211
  365. package/dist6/src/rest-server.js +0 -444
  366. package/dist6/src/rest-server.js.map +0 -1
  367. package/dist6/src/router/metadata.d.ts +0 -150
  368. package/dist6/src/router/metadata.js +0 -410
  369. package/dist6/src/router/metadata.js.map +0 -1
  370. package/dist6/src/router/routing-table.d.ts +0 -68
  371. package/dist6/src/router/routing-table.js +0 -218
  372. package/dist6/src/router/routing-table.js.map +0 -1
  373. package/dist6/src/sequence.js +0 -114
  374. package/dist6/src/sequence.js.map +0 -1
  375. package/dist6/src/writer.d.ts +0 -17
  376. package/dist6/src/writer.js +0 -87
  377. package/dist6/src/writer.js.map +0 -1
  378. package/index.d.ts +0 -6
  379. package/index.js +0 -9
  380. package/src/internal-types.ts +0 -96
  381. package/src/providers/bind-element.ts +0 -15
  382. package/src/providers/get-from-context.ts +0 -16
  383. package/src/providers/log-error-provider.ts +0 -23
  384. package/src/providers/parse-params.ts +0 -20
  385. package/src/providers/reject.ts +0 -27
  386. package/src/rest-component.ts +0 -54
  387. package/src/rest-server.ts +0 -584
  388. package/src/router/metadata.ts +0 -517
@@ -0,0 +1,443 @@
1
+ /// <reference types="node" />
2
+ import { Binding, BindingAddress, Constructor } from '@loopback/context';
3
+ import { Application, Server } from '@loopback/core';
4
+ import { BaseMiddlewareRegistry, ExpressRequestHandler } from '@loopback/express';
5
+ import { HttpServer, HttpServerOptions } from '@loopback/http-server';
6
+ import { OASEnhancerService, OpenApiSpec, OperationObject, ServerObject } from '@loopback/openapi-v3';
7
+ import cors from 'cors';
8
+ import express, { ErrorRequestHandler } from 'express';
9
+ import { PathParams } from 'express-serve-static-core';
10
+ import { IncomingMessage, ServerResponse } from 'http';
11
+ import { ServeStaticOptions } from 'serve-static';
12
+ import { BodyParser } from './body-parsers';
13
+ import { HttpHandler } from './http-handler';
14
+ import { RequestContext } from './request-context';
15
+ import { ControllerClass, ControllerFactory, ControllerInstance, RestRouterOptions, RouteEntry, RouterSpec } from './router';
16
+ import { SequenceFunction, SequenceHandler } from './sequence';
17
+ import { Request, RequestBodyParserOptions, Response } from './types';
18
+ export declare type HttpRequestListener = (req: IncomingMessage, res: ServerResponse) => void;
19
+ export interface HttpServerLike {
20
+ requestHandler: HttpRequestListener;
21
+ }
22
+ /**
23
+ * A REST API server for use with Loopback.
24
+ * Add this server to your application by importing the RestComponent.
25
+ *
26
+ * @example
27
+ * ```ts
28
+ * const app = new MyApplication();
29
+ * app.component(RestComponent);
30
+ * ```
31
+ *
32
+ * To add additional instances of RestServer to your application, use the
33
+ * `.server` function:
34
+ * ```ts
35
+ * app.server(RestServer, 'nameOfYourServer');
36
+ * ```
37
+ *
38
+ * By default, one instance of RestServer will be created when the RestComponent
39
+ * is bootstrapped. This instance can be retrieved with
40
+ * `app.getServer(RestServer)`, or by calling `app.get('servers.RestServer')`
41
+ * Note that retrieving other instances of RestServer must be done using the
42
+ * server's name:
43
+ * ```ts
44
+ * const server = await app.getServer('foo')
45
+ * // OR
46
+ * const server = await app.get('servers.foo');
47
+ * ```
48
+ */
49
+ export declare class RestServer extends BaseMiddlewareRegistry implements Server, HttpServerLike {
50
+ /**
51
+ * Handle incoming HTTP(S) request by invoking the corresponding
52
+ * Controller method via the configured Sequence.
53
+ *
54
+ * @example
55
+ *
56
+ * ```ts
57
+ * const app = new Application();
58
+ * app.component(RestComponent);
59
+ * // setup controllers, etc.
60
+ *
61
+ * const restServer = await app.getServer(RestServer);
62
+ * const httpServer = http.createServer(restServer.requestHandler);
63
+ * httpServer.listen(3000);
64
+ * ```
65
+ *
66
+ * @param req - The request.
67
+ * @param res - The response.
68
+ */
69
+ protected _OASEnhancer: OASEnhancerService;
70
+ get OASEnhancer(): OASEnhancerService;
71
+ protected _requestHandler: HttpRequestListener;
72
+ get requestHandler(): HttpRequestListener;
73
+ readonly config: RestServerResolvedConfig;
74
+ private _basePath;
75
+ protected _httpHandler: HttpHandler;
76
+ protected get httpHandler(): HttpHandler;
77
+ /**
78
+ * Context event subscriptions for route related changes
79
+ */
80
+ private _routesEventSubscription;
81
+ protected _httpServer: HttpServer | undefined;
82
+ protected _expressApp?: express.Application;
83
+ get listening(): boolean;
84
+ /**
85
+ * The base url for the server, including the basePath if set. For example,
86
+ * the value will be 'http://localhost:3000/api' if `basePath` is set to
87
+ * '/api'.
88
+ */
89
+ get url(): string | undefined;
90
+ /**
91
+ * The root url for the server without the basePath. For example, the value
92
+ * will be 'http://localhost:3000' regardless of the `basePath`.
93
+ */
94
+ get rootUrl(): string | undefined;
95
+ /**
96
+ *
97
+ * Creates an instance of RestServer.
98
+ *
99
+ * @param app - The application instance (injected via
100
+ * CoreBindings.APPLICATION_INSTANCE).
101
+ * @param config - The configuration options (injected via
102
+ * RestBindings.CONFIG).
103
+ *
104
+ */
105
+ constructor(app: Application, config?: RestServerConfig);
106
+ protected _setupOASEnhancerIfNeeded(): void;
107
+ protected _setupRequestHandlerIfNeeded(): void;
108
+ /**
109
+ * Get an Express handler for unexpected errors
110
+ */
111
+ protected _unexpectedErrorHandler(): ErrorRequestHandler;
112
+ /**
113
+ * Apply express settings.
114
+ */
115
+ protected _applyExpressSettings(): void;
116
+ /**
117
+ * Mount /openapi.json, /openapi.yaml for specs and /swagger-ui, /explorer
118
+ * to redirect to externally hosted API explorer
119
+ */
120
+ protected _setupOpenApiSpecEndpoints(): void;
121
+ /**
122
+ * Add a new non-controller endpoint hosting a form of the OpenAPI spec.
123
+ *
124
+ * @param path Path at which to host the copy of the OpenAPI
125
+ * @param form Form that should be rendered from that path
126
+ */
127
+ addOpenApiSpecEndpoint(path: string, form: OpenApiSpecForm, router?: express.Router): void;
128
+ protected _handleHttpRequest(request: Request, response: Response): Promise<void>;
129
+ protected _setupHandlerIfNeeded(): void;
130
+ /**
131
+ * Create an instance of HttpHandler and populates it with routes
132
+ */
133
+ private _createHttpHandler;
134
+ private _setupOperation;
135
+ private _serveOpenApiSpec;
136
+ private _redirectToSwaggerUI;
137
+ /**
138
+ * Register a controller class with this server.
139
+ *
140
+ * @param controllerCtor - The controller class
141
+ * (constructor function).
142
+ * @returns The newly created binding, you can use the reference to
143
+ * further modify the binding, e.g. lock the value to prevent further
144
+ * modifications.
145
+ *
146
+ * @example
147
+ * ```ts
148
+ * class MyController {
149
+ * }
150
+ * app.controller(MyController).lock();
151
+ * ```
152
+ *
153
+ */
154
+ controller(controllerCtor: ControllerClass<ControllerInstance>): Binding;
155
+ /**
156
+ * Register a new Controller-based route.
157
+ *
158
+ * @example
159
+ * ```ts
160
+ * class MyController {
161
+ * greet(name: string) {
162
+ * return `hello ${name}`;
163
+ * }
164
+ * }
165
+ * app.route('get', '/greet', operationSpec, MyController, 'greet');
166
+ * ```
167
+ *
168
+ * @param verb - HTTP verb of the endpoint
169
+ * @param path - URL path of the endpoint
170
+ * @param spec - The OpenAPI spec describing the endpoint (operation)
171
+ * @param controllerCtor - Controller constructor
172
+ * @param controllerFactory - A factory function to create controller instance
173
+ * @param methodName - The name of the controller method
174
+ */
175
+ route<I>(verb: string, path: string, spec: OperationObject, controllerCtor: ControllerClass<I>, controllerFactory: ControllerFactory<I>, methodName: string): Binding;
176
+ /**
177
+ * Register a new route invoking a handler function.
178
+ *
179
+ * @example
180
+ * ```ts
181
+ * function greet(name: string) {
182
+ * return `hello ${name}`;
183
+ * }
184
+ * app.route('get', '/', operationSpec, greet);
185
+ * ```
186
+ *
187
+ * @param verb - HTTP verb of the endpoint
188
+ * @param path - URL path of the endpoint
189
+ * @param spec - The OpenAPI spec describing the endpoint (operation)
190
+ * @param handler - The function to invoke with the request parameters
191
+ * described in the spec.
192
+ */
193
+ route(verb: string, path: string, spec: OperationObject, handler: Function): Binding;
194
+ /**
195
+ * Register a new generic route.
196
+ *
197
+ * @example
198
+ * ```ts
199
+ * function greet(name: string) {
200
+ * return `hello ${name}`;
201
+ * }
202
+ * const route = new Route('get', '/', operationSpec, greet);
203
+ * app.route(route);
204
+ * ```
205
+ *
206
+ * @param route - The route to add.
207
+ */
208
+ route(route: RouteEntry): Binding;
209
+ private bindRoute;
210
+ /**
211
+ * Register a route redirecting callers to a different URL.
212
+ *
213
+ * @example
214
+ * ```ts
215
+ * server.redirect('/explorer', '/explorer/');
216
+ * ```
217
+ *
218
+ * @param fromPath - URL path of the redirect endpoint
219
+ * @param toPathOrUrl - Location (URL path or full URL) where to redirect to.
220
+ * If your server is configured with a custom `basePath`, then the base path
221
+ * is prepended to the target location.
222
+ * @param statusCode - HTTP status code to respond with,
223
+ * defaults to 303 (See Other).
224
+ */
225
+ redirect(fromPath: string, toPathOrUrl: string, statusCode?: number): Binding;
226
+ private _externalRoutes;
227
+ /**
228
+ * Mount static assets to the REST server.
229
+ * See https://expressjs.com/en/4x/api.html#express.static
230
+ * @param path - The path(s) to serve the asset.
231
+ * See examples at https://expressjs.com/en/4x/api.html#path-examples
232
+ * @param rootDir - The root directory from which to serve static assets
233
+ * @param options - Options for serve-static
234
+ */
235
+ static(path: PathParams, rootDir: string, options?: ServeStaticOptions): void;
236
+ /**
237
+ * Set the OpenAPI specification that defines the REST API schema for this
238
+ * server. All routes, parameter definitions and return types will be defined
239
+ * in this way.
240
+ *
241
+ * Note that this will override any routes defined via decorators at the
242
+ * controller level (this function takes precedent).
243
+ *
244
+ * @param spec - The OpenAPI specification, as an object.
245
+ * @returns Binding for the spec
246
+ *
247
+ */
248
+ api(spec: OpenApiSpec): Binding;
249
+ /**
250
+ * Get the OpenAPI specification describing the REST API provided by
251
+ * this application.
252
+ *
253
+ * This method merges operations (HTTP endpoints) from the following sources:
254
+ * - `app.api(spec)`
255
+ * - `app.controller(MyController)`
256
+ * - `app.route(route)`
257
+ * - `app.route('get', '/greet', operationSpec, MyController, 'greet')`
258
+ *
259
+ * If the optional `requestContext` is provided, then the `servers` list
260
+ * in the returned spec will be updated to work in that context.
261
+ * Specifically:
262
+ * 1. if `config.openApi.setServersFromRequest` is enabled, the servers
263
+ * list will be replaced with the context base url
264
+ * 2. Any `servers` entries with a path of `/` will have that path
265
+ * replaced with `requestContext.basePath`
266
+ *
267
+ * @param requestContext - Optional context to update the `servers` list
268
+ * in the returned spec
269
+ */
270
+ getApiSpec(requestContext?: RequestContext): Promise<OpenApiSpec>;
271
+ /**
272
+ * Update or rebuild OpenAPI Spec object to be appropriate for the context of
273
+ * a specific request for the spec, leveraging both app config and request
274
+ * path information.
275
+ *
276
+ * @param spec base spec object from which to start
277
+ * @param requestContext request to use to infer path information
278
+ * @returns Updated or rebuilt spec object to use in the context of the request
279
+ */
280
+ private updateSpecFromRequest;
281
+ /**
282
+ * Configure a custom sequence class for handling incoming requests.
283
+ *
284
+ * @example
285
+ * ```ts
286
+ * class MySequence implements SequenceHandler {
287
+ * constructor(
288
+ * @inject('send) public send: Send)) {
289
+ * }
290
+ *
291
+ * public async handle({response}: RequestContext) {
292
+ * send(response, 'hello world');
293
+ * }
294
+ * }
295
+ * ```
296
+ *
297
+ * @param value - The sequence to invoke for each incoming request.
298
+ */
299
+ sequence(value: Constructor<SequenceHandler>): void;
300
+ /**
301
+ * Configure a custom sequence function for handling incoming requests.
302
+ *
303
+ * @example
304
+ * ```ts
305
+ * app.handler(({request, response}, sequence) => {
306
+ * sequence.send(response, 'hello world');
307
+ * });
308
+ * ```
309
+ *
310
+ * @param handlerFn - The handler to invoke for each incoming request.
311
+ */
312
+ handler(handlerFn: SequenceFunction): void;
313
+ /**
314
+ * Bind a body parser to the server context
315
+ * @param parserClass - Body parser class
316
+ * @param address - Optional binding address
317
+ */
318
+ bodyParser(bodyParserClass: Constructor<BodyParser>, address?: BindingAddress<BodyParser>): Binding<BodyParser>;
319
+ /**
320
+ * Configure the `basePath` for the rest server
321
+ * @param path - Base path
322
+ */
323
+ basePath(path?: string): void;
324
+ /**
325
+ * Start this REST API's HTTP/HTTPS server.
326
+ */
327
+ start(): Promise<void>;
328
+ /**
329
+ * Stop this REST API's HTTP/HTTPS server.
330
+ */
331
+ stop(): Promise<void>;
332
+ /**
333
+ * Mount an Express router to expose additional REST endpoints handled
334
+ * via legacy Express-based stack.
335
+ *
336
+ * @param basePath - Path where to mount the router at, e.g. `/` or `/api`.
337
+ * @param router - The Express router to handle the requests.
338
+ * @param spec - A partial OpenAPI spec describing endpoints provided by the
339
+ * router. LoopBack will prepend `basePath` to all endpoints automatically.
340
+ * This argument is optional. You can leave it out if you don't want to
341
+ * document the routes.
342
+ */
343
+ mountExpressRouter(basePath: string, router: ExpressRequestHandler, spec?: RouterSpec): void;
344
+ }
345
+ /**
346
+ * Create a binding for the given body parser class
347
+ * @param parserClass - Body parser class
348
+ * @param key - Optional binding address
349
+ */
350
+ export declare function createBodyParserBinding(parserClass: Constructor<BodyParser>, key?: BindingAddress<BodyParser>): Binding<BodyParser>;
351
+ /**
352
+ * The form of OpenAPI specs to be served
353
+ */
354
+ export interface OpenApiSpecForm {
355
+ version?: string;
356
+ format?: string;
357
+ }
358
+ /**
359
+ * Options to customize how OpenAPI specs are served
360
+ */
361
+ export interface OpenApiSpecOptions {
362
+ /**
363
+ * Mapping of urls to spec forms, by default:
364
+ * ```
365
+ * {
366
+ * '/openapi.json': {version: '3.0.0', format: 'json'},
367
+ * '/openapi.yaml': {version: '3.0.0', format: 'yaml'},
368
+ * }
369
+ * ```
370
+ */
371
+ endpointMapping?: {
372
+ [key: string]: OpenApiSpecForm;
373
+ };
374
+ /**
375
+ * A flag to force `servers` to be set from the http request for the OpenAPI
376
+ * spec
377
+ */
378
+ setServersFromRequest?: boolean;
379
+ /**
380
+ * Configure servers for OpenAPI spec
381
+ */
382
+ servers?: ServerObject[];
383
+ /**
384
+ * Set this flag to disable the endpoint for OpenAPI spec
385
+ */
386
+ disabled?: true;
387
+ /**
388
+ * Set this flag to `false` to disable OAS schema consolidation. If not set,
389
+ * the value defaults to `true`.
390
+ */
391
+ consolidate?: boolean;
392
+ }
393
+ export interface ApiExplorerOptions {
394
+ /**
395
+ * URL for the hosted API explorer UI
396
+ * default to https://loopback.io/api-explorer
397
+ */
398
+ url?: string;
399
+ /**
400
+ * URL for the API explorer served over `http` protocol to deal with mixed
401
+ * content security imposed by browsers as the spec is exposed over `http` by
402
+ * default.
403
+ * See https://github.com/strongloop/loopback-next/issues/1603
404
+ */
405
+ httpUrl?: string;
406
+ /**
407
+ * Set this flag to disable the built-in redirect to externally
408
+ * hosted API Explorer UI.
409
+ */
410
+ disabled?: true;
411
+ }
412
+ /**
413
+ * RestServer options
414
+ */
415
+ export declare type RestServerOptions = Partial<RestServerResolvedOptions>;
416
+ export interface RestServerResolvedOptions {
417
+ port: number;
418
+ path?: string;
419
+ /**
420
+ * Base path for API/static routes
421
+ */
422
+ basePath?: string;
423
+ cors: cors.CorsOptions;
424
+ openApiSpec: OpenApiSpecOptions;
425
+ apiExplorer: ApiExplorerOptions;
426
+ requestBodyParser?: RequestBodyParserOptions;
427
+ sequence?: Constructor<SequenceHandler>;
428
+ expressSettings: {
429
+ [name: string]: any;
430
+ };
431
+ router: RestRouterOptions;
432
+ /**
433
+ * Set this flag to `false` to not listen on connections when the REST server
434
+ * is started. It's useful to mount a LoopBack REST server as a route to the
435
+ * facade Express application. If not set, the value is default to `true`.
436
+ */
437
+ listenOnStart?: boolean;
438
+ }
439
+ /**
440
+ * Valid configuration for the RestServer constructor.
441
+ */
442
+ export declare type RestServerConfig = RestServerOptions & HttpServerOptions;
443
+ export declare type RestServerResolvedConfig = RestServerResolvedOptions & HttpServerOptions;