@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.
- package/CHANGELOG.md +1822 -0
- package/LICENSE +1 -1
- package/README.md +30 -58
- package/dist/body-parsers/body-parser.d.ts +25 -0
- package/dist/body-parsers/body-parser.helpers.d.ts +44 -0
- package/dist/body-parsers/body-parser.helpers.js +102 -0
- package/dist/body-parsers/body-parser.helpers.js.map +1 -0
- package/dist/body-parsers/body-parser.js +159 -0
- package/dist/body-parsers/body-parser.js.map +1 -0
- package/dist/body-parsers/body-parser.json.d.ts +9 -0
- package/dist/body-parsers/body-parser.json.js +43 -0
- package/dist/body-parsers/body-parser.json.js.map +1 -0
- package/dist/body-parsers/body-parser.raw.d.ts +12 -0
- package/dist/body-parsers/body-parser.raw.js +39 -0
- package/dist/body-parsers/body-parser.raw.js.map +1 -0
- package/dist/body-parsers/body-parser.stream.d.ts +12 -0
- package/dist/body-parsers/body-parser.stream.js +28 -0
- package/dist/body-parsers/body-parser.stream.js.map +1 -0
- package/dist/body-parsers/body-parser.text.d.ts +9 -0
- package/dist/body-parsers/body-parser.text.js +38 -0
- package/dist/body-parsers/body-parser.text.js.map +1 -0
- package/dist/body-parsers/body-parser.urlencoded.d.ts +9 -0
- package/dist/body-parsers/body-parser.urlencoded.js +36 -0
- package/dist/body-parsers/body-parser.urlencoded.js.map +1 -0
- package/dist/body-parsers/index.d.ts +8 -0
- package/dist/body-parsers/index.js +16 -0
- package/dist/body-parsers/index.js.map +1 -0
- package/dist/body-parsers/types.d.ts +51 -0
- package/dist/body-parsers/types.js +12 -0
- package/dist/body-parsers/types.js.map +1 -0
- package/dist/coercion/coerce-parameter.d.ts +9 -0
- package/dist/coercion/coerce-parameter.js +166 -0
- package/dist/coercion/coerce-parameter.js.map +1 -0
- package/dist/coercion/utils.d.ts +43 -0
- package/dist/coercion/utils.js +96 -0
- package/dist/coercion/utils.js.map +1 -0
- package/dist/coercion/validator.d.ts +49 -0
- package/dist/coercion/validator.js +85 -0
- package/dist/coercion/validator.js.map +1 -0
- package/dist/http-handler.d.ts +38 -0
- package/dist/http-handler.js +68 -0
- package/dist/http-handler.js.map +1 -0
- package/dist/index.d.ts +36 -1
- package/dist/index.js +40 -6
- package/dist/index.js.map +1 -0
- package/dist/keys.d.ts +198 -0
- package/dist/keys.js +202 -0
- package/dist/keys.js.map +1 -0
- package/dist/parse-json.d.ts +11 -0
- package/dist/parse-json.js +42 -0
- package/dist/parse-json.js.map +1 -0
- package/dist/parser.d.ts +11 -0
- package/dist/parser.js +76 -0
- package/dist/parser.js.map +1 -0
- package/{dist6/src/providers/find-route.d.ts → dist/providers/find-route.provider.d.ts} +3 -1
- package/dist/providers/find-route.provider.js +36 -0
- package/dist/providers/find-route.provider.js.map +1 -0
- package/dist/providers/index.d.ts +6 -0
- package/dist/providers/index.js +14 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/{src/providers/invoke-method.d.ts → providers/invoke-method.provider.d.ts} +3 -1
- package/dist/providers/invoke-method.provider.js +30 -0
- package/dist/providers/invoke-method.provider.js.map +1 -0
- package/dist/providers/log-error.provider.d.ts +6 -0
- package/dist/providers/log-error.provider.js +21 -0
- package/dist/providers/log-error.provider.js.map +1 -0
- package/dist/providers/parse-params.provider.d.ts +15 -0
- package/dist/providers/parse-params.provider.js +41 -0
- package/dist/providers/parse-params.provider.js.map +1 -0
- package/dist/providers/reject.provider.d.ts +10 -0
- package/dist/providers/reject.provider.js +47 -0
- package/dist/providers/reject.provider.js.map +1 -0
- package/dist/{src/providers/send.d.ts → providers/send.provider.d.ts} +1 -4
- package/dist/{src/providers/send.js → providers/send.provider.js} +4 -6
- package/dist/providers/send.provider.js.map +1 -0
- package/dist/request-context.d.ts +36 -0
- package/dist/request-context.js +104 -0
- package/dist/request-context.js.map +1 -0
- package/dist/rest-http-error.d.ts +37 -0
- package/dist/rest-http-error.js +51 -0
- package/dist/rest-http-error.js.map +1 -0
- package/dist/rest.application.d.ts +232 -0
- package/dist/rest.application.js +174 -0
- package/dist/rest.application.js.map +1 -0
- package/dist/rest.component.d.ts +15 -0
- package/dist/rest.component.js +72 -0
- package/dist/rest.component.js.map +1 -0
- package/dist/rest.server.d.ts +443 -0
- package/dist/rest.server.js +748 -0
- package/dist/rest.server.js.map +1 -0
- package/dist/router/base-route.d.ts +29 -0
- package/dist/router/base-route.js +41 -0
- package/dist/router/base-route.js.map +1 -0
- package/dist/router/controller-route.d.ts +61 -0
- package/dist/router/controller-route.js +160 -0
- package/dist/router/controller-route.js.map +1 -0
- package/dist/router/external-express-routes.d.ts +24 -0
- package/dist/router/external-express-routes.js +90 -0
- package/dist/router/external-express-routes.js.map +1 -0
- package/dist/router/handler-route.d.ts +12 -0
- package/dist/router/handler-route.js +30 -0
- package/dist/router/handler-route.js.map +1 -0
- package/dist/router/index.d.ts +14 -0
- package/dist/router/index.js +25 -0
- package/dist/router/index.js.map +1 -0
- package/dist/router/openapi-path.d.ts +14 -0
- package/dist/router/openapi-path.js +64 -0
- package/dist/router/openapi-path.js.map +1 -0
- package/dist/router/redirect-route.d.ts +23 -0
- package/dist/router/redirect-route.js +50 -0
- package/dist/router/redirect-route.js.map +1 -0
- package/dist/router/regexp-router.d.ts +25 -0
- package/dist/router/regexp-router.js +84 -0
- package/dist/router/regexp-router.js.map +1 -0
- package/dist/router/rest-router.d.ts +35 -0
- package/dist/{src/internal-types.js → router/rest-router.js} +2 -2
- package/dist/router/rest-router.js.map +1 -0
- package/dist/router/route-entry.d.ts +46 -0
- package/dist/router/route-entry.js +20 -0
- package/dist/router/route-entry.js.map +1 -0
- package/dist/router/route-sort.d.ts +7 -0
- package/dist/router/route-sort.js +75 -0
- package/dist/router/route-sort.js.map +1 -0
- package/dist/router/router-base.d.ts +42 -0
- package/dist/router/router-base.js +101 -0
- package/dist/router/router-base.js.map +1 -0
- package/dist/router/router-spec.d.ts +3 -0
- package/dist/router/router-spec.js +40 -0
- package/dist/router/router-spec.js.map +1 -0
- package/dist/router/routing-table.d.ts +32 -0
- package/dist/router/routing-table.js +86 -0
- package/dist/router/routing-table.js.map +1 -0
- package/dist/router/trie-router.d.ts +13 -0
- package/dist/router/trie-router.js +55 -0
- package/dist/router/trie-router.js.map +1 -0
- package/dist/router/trie.d.ts +59 -0
- package/dist/router/trie.js +180 -0
- package/dist/router/trie.js.map +1 -0
- package/{dist6/src → dist}/sequence.d.ts +28 -23
- package/dist/sequence.js +112 -0
- package/dist/sequence.js.map +1 -0
- package/dist/spec-enhancers/consolidate.spec-enhancer.d.ts +68 -0
- package/dist/spec-enhancers/consolidate.spec-enhancer.js +145 -0
- package/dist/spec-enhancers/consolidate.spec-enhancer.js.map +1 -0
- package/dist/spec-enhancers/info.spec-enhancer.d.ts +19 -0
- package/dist/spec-enhancers/info.spec-enhancer.js +89 -0
- package/dist/spec-enhancers/info.spec-enhancer.js.map +1 -0
- package/dist/types.d.ts +178 -0
- package/dist/types.js +12 -0
- package/dist/types.js.map +1 -0
- package/dist/validation/ajv-factory.provider.d.ts +12 -0
- package/dist/validation/ajv-factory.provider.js +87 -0
- package/dist/validation/ajv-factory.provider.js.map +1 -0
- package/dist/validation/request-body.validator.d.ts +14 -0
- package/dist/validation/request-body.validator.js +161 -0
- package/dist/validation/request-body.validator.js.map +1 -0
- package/dist/writer.d.ts +9 -0
- package/dist/writer.js +62 -0
- package/dist/writer.js.map +1 -0
- package/package.json +66 -38
- package/src/body-parsers/body-parser.helpers.ts +148 -0
- package/src/body-parsers/body-parser.json.ts +46 -0
- package/src/body-parsers/body-parser.raw.ts +42 -0
- package/src/body-parsers/body-parser.stream.ts +27 -0
- package/src/body-parsers/body-parser.text.ts +44 -0
- package/src/body-parsers/body-parser.ts +208 -0
- package/src/body-parsers/body-parser.urlencoded.ts +42 -0
- package/src/body-parsers/index.ts +13 -0
- package/src/body-parsers/types.ts +60 -0
- package/src/coercion/coerce-parameter.ts +207 -0
- package/src/coercion/utils.ts +103 -0
- package/src/coercion/validator.ts +98 -0
- package/src/http-handler.ts +84 -41
- package/src/index.ts +37 -30
- package/src/keys.ts +273 -20
- package/src/parse-json.ts +42 -0
- package/src/parser.ts +89 -104
- package/src/providers/{find-route.ts → find-route.provider.ts} +10 -7
- package/src/providers/index.ts +7 -9
- package/src/providers/{invoke-method.ts → invoke-method.provider.ts} +8 -5
- package/src/providers/log-error.provider.ts +27 -0
- package/src/providers/parse-params.provider.ts +42 -0
- package/src/providers/reject.provider.ts +44 -0
- package/src/providers/{send.ts → send.provider.ts} +2 -5
- package/src/request-context.ts +123 -0
- package/src/rest-http-error.ts +87 -0
- package/src/rest.application.ts +390 -0
- package/src/rest.component.ts +111 -0
- package/src/rest.server.ts +1192 -0
- package/src/router/base-route.ts +53 -0
- package/src/router/controller-route.ts +241 -0
- package/src/router/external-express-routes.ts +139 -0
- package/src/router/handler-route.ts +44 -0
- package/src/router/index.ts +24 -0
- package/src/router/openapi-path.ts +67 -0
- package/src/router/redirect-route.ts +64 -0
- package/src/router/regexp-router.ts +104 -0
- package/src/router/rest-router.ts +48 -0
- package/src/router/route-entry.ts +74 -0
- package/src/router/route-sort.ts +74 -0
- package/src/router/router-base.ts +124 -0
- package/src/router/router-spec.ts +36 -0
- package/src/router/routing-table.ts +83 -279
- package/src/router/trie-router.ts +57 -0
- package/src/router/trie.ts +233 -0
- package/src/sequence.ts +44 -37
- package/src/spec-enhancers/consolidate.spec-enhancer.ts +182 -0
- package/src/spec-enhancers/info.spec-enhancer.ts +92 -0
- package/src/types.ts +216 -0
- package/src/validation/ajv-factory.provider.ts +94 -0
- package/src/validation/request-body.validator.ts +208 -0
- package/src/writer.ts +41 -68
- package/api-docs/.DS_Store +0 -0
- package/api-docs/apple-touch-icon-114x114-precomposed.png +0 -0
- package/api-docs/apple-touch-icon-144x144-precomposed.png +0 -0
- package/api-docs/apple-touch-icon-57x57-precomposed.png +0 -0
- package/api-docs/apple-touch-icon-72x72-precomposed.png +0 -0
- package/api-docs/apple-touch-icon-precomposed.png +0 -0
- package/api-docs/apple-touch-icon.png +0 -0
- package/api-docs/css/bootstrap.min.css +0 -9
- package/api-docs/css/code-themes/arta.css +0 -158
- package/api-docs/css/code-themes/ascetic.css +0 -50
- package/api-docs/css/code-themes/brown_paper.css +0 -104
- package/api-docs/css/code-themes/brown_papersq.png +0 -0
- package/api-docs/css/code-themes/dark.css +0 -103
- package/api-docs/css/code-themes/default.css +0 -135
- package/api-docs/css/code-themes/far.css +0 -111
- package/api-docs/css/code-themes/github.css +0 -127
- package/api-docs/css/code-themes/googlecode.css +0 -144
- package/api-docs/css/code-themes/idea.css +0 -121
- package/api-docs/css/code-themes/ir_black.css +0 -104
- package/api-docs/css/code-themes/magula.css +0 -121
- package/api-docs/css/code-themes/monokai.css +0 -114
- package/api-docs/css/code-themes/pojoaque.css +0 -104
- package/api-docs/css/code-themes/pojoaque.jpg +0 -0
- package/api-docs/css/code-themes/rainbow.css +0 -114
- package/api-docs/css/code-themes/school_book.css +0 -111
- package/api-docs/css/code-themes/school_book.png +0 -0
- package/api-docs/css/code-themes/sl-theme.css +0 -45
- package/api-docs/css/code-themes/solarized_dark.css +0 -88
- package/api-docs/css/code-themes/solarized_light.css +0 -88
- package/api-docs/css/code-themes/sunburst.css +0 -158
- package/api-docs/css/code-themes/tomorrow-night-blue.css +0 -52
- package/api-docs/css/code-themes/tomorrow-night-bright.css +0 -51
- package/api-docs/css/code-themes/tomorrow-night-eighties.css +0 -51
- package/api-docs/css/code-themes/tomorrow-night.css +0 -52
- package/api-docs/css/code-themes/tomorrow.css +0 -49
- package/api-docs/css/code-themes/vs.css +0 -86
- package/api-docs/css/code-themes/xcode.css +0 -154
- package/api-docs/css/code-themes/zenburn.css +0 -115
- package/api-docs/css/main.css +0 -139
- package/api-docs/favicon.ico +0 -0
- package/api-docs/fonts/0ihfXUL2emPh0ROJezvraLO3LdcAZYWl9Si6vvxL-qU.woff +0 -0
- package/api-docs/fonts/OsJ2DjdpjqFRVUSto6IffLO3LdcAZYWl9Si6vvxL-qU.woff +0 -0
- package/api-docs/fonts/_aijTyevf54tkVDLy-dlnLO3LdcAZYWl9Si6vvxL-qU.woff +0 -0
- package/api-docs/index.html +0 -7082
- package/api-docs/js/main.js +0 -19
- package/api-docs/js/vendor/bootstrap.min.js +0 -6
- package/api-docs/js/vendor/jquery-1.10.1.min.js +0 -6
- package/api-docs/js/vendor/jquery.scrollTo-1.4.3.1.js +0 -218
- package/api-docs/js/vendor/modernizr-2.6.2-respond-1.1.0.min.js +0 -11
- package/dist/src/http-handler.d.ts +0 -19
- package/dist/src/http-handler.js +0 -43
- package/dist/src/http-handler.js.map +0 -1
- package/dist/src/index.d.ts +0 -14
- package/dist/src/index.js +0 -33
- package/dist/src/index.js.map +0 -1
- package/dist/src/internal-types.d.ts +0 -67
- package/dist/src/internal-types.js.map +0 -1
- package/dist/src/keys.d.ts +0 -22
- package/dist/src/keys.js +0 -35
- package/dist/src/keys.js.map +0 -1
- package/dist/src/parser.d.ts +0 -11
- package/dist/src/parser.js +0 -98
- package/dist/src/parser.js.map +0 -1
- package/dist/src/providers/bind-element.d.ts +0 -7
- package/dist/src/providers/bind-element.js +0 -34
- package/dist/src/providers/bind-element.js.map +0 -1
- package/dist/src/providers/find-route.d.ts +0 -9
- package/dist/src/providers/find-route.js +0 -42
- package/dist/src/providers/find-route.js.map +0 -1
- package/dist/src/providers/get-from-context.d.ts +0 -7
- package/dist/src/providers/get-from-context.js +0 -34
- package/dist/src/providers/get-from-context.js.map +0 -1
- package/dist/src/providers/index.d.ts +0 -8
- package/dist/src/providers/index.js +0 -18
- package/dist/src/providers/index.js.map +0 -1
- package/dist/src/providers/invoke-method.js +0 -36
- package/dist/src/providers/invoke-method.js.map +0 -1
- package/dist/src/providers/log-error-provider.d.ts +0 -6
- package/dist/src/providers/log-error-provider.js +0 -17
- package/dist/src/providers/log-error-provider.js.map +0 -1
- package/dist/src/providers/parse-params.d.ts +0 -13
- package/dist/src/providers/parse-params.js +0 -22
- package/dist/src/providers/parse-params.js.map +0 -1
- package/dist/src/providers/reject.d.ts +0 -6
- package/dist/src/providers/reject.js +0 -40
- package/dist/src/providers/reject.js.map +0 -1
- package/dist/src/providers/send.js.map +0 -1
- package/dist/src/rest-component.d.ts +0 -12
- package/dist/src/rest-component.js +0 -50
- package/dist/src/rest-component.js.map +0 -1
- package/dist/src/rest-server.d.ts +0 -211
- package/dist/src/rest-server.js +0 -426
- package/dist/src/rest-server.js.map +0 -1
- package/dist/src/router/metadata.d.ts +0 -150
- package/dist/src/router/metadata.js +0 -410
- package/dist/src/router/metadata.js.map +0 -1
- package/dist/src/router/routing-table.d.ts +0 -68
- package/dist/src/router/routing-table.js +0 -204
- package/dist/src/router/routing-table.js.map +0 -1
- package/dist/src/sequence.d.ts +0 -81
- package/dist/src/sequence.js +0 -104
- package/dist/src/sequence.js.map +0 -1
- package/dist/src/writer.d.ts +0 -17
- package/dist/src/writer.js +0 -87
- package/dist/src/writer.js.map +0 -1
- package/dist6/index.d.ts +0 -1
- package/dist6/index.js +0 -12
- package/dist6/src/http-handler.d.ts +0 -19
- package/dist6/src/http-handler.js +0 -53
- package/dist6/src/http-handler.js.map +0 -1
- package/dist6/src/index.d.ts +0 -14
- package/dist6/src/index.js +0 -33
- package/dist6/src/index.js.map +0 -1
- package/dist6/src/internal-types.d.ts +0 -67
- package/dist6/src/internal-types.js +0 -7
- package/dist6/src/internal-types.js.map +0 -1
- package/dist6/src/keys.d.ts +0 -22
- package/dist6/src/keys.js +0 -35
- package/dist6/src/keys.js.map +0 -1
- package/dist6/src/parser.d.ts +0 -11
- package/dist6/src/parser.js +0 -108
- package/dist6/src/parser.js.map +0 -1
- package/dist6/src/providers/bind-element.d.ts +0 -7
- package/dist6/src/providers/bind-element.js +0 -34
- package/dist6/src/providers/bind-element.js.map +0 -1
- package/dist6/src/providers/find-route.js +0 -42
- package/dist6/src/providers/find-route.js.map +0 -1
- package/dist6/src/providers/get-from-context.d.ts +0 -7
- package/dist6/src/providers/get-from-context.js +0 -34
- package/dist6/src/providers/get-from-context.js.map +0 -1
- package/dist6/src/providers/index.d.ts +0 -8
- package/dist6/src/providers/index.js +0 -18
- package/dist6/src/providers/index.js.map +0 -1
- package/dist6/src/providers/invoke-method.d.ts +0 -7
- package/dist6/src/providers/invoke-method.js +0 -44
- package/dist6/src/providers/invoke-method.js.map +0 -1
- package/dist6/src/providers/log-error-provider.d.ts +0 -6
- package/dist6/src/providers/log-error-provider.js +0 -17
- package/dist6/src/providers/log-error-provider.js.map +0 -1
- package/dist6/src/providers/parse-params.d.ts +0 -13
- package/dist6/src/providers/parse-params.js +0 -22
- package/dist6/src/providers/parse-params.js.map +0 -1
- package/dist6/src/providers/reject.d.ts +0 -6
- package/dist6/src/providers/reject.js +0 -40
- package/dist6/src/providers/reject.js.map +0 -1
- package/dist6/src/providers/send.d.ts +0 -15
- package/dist6/src/providers/send.js +0 -24
- package/dist6/src/providers/send.js.map +0 -1
- package/dist6/src/rest-component.d.ts +0 -12
- package/dist6/src/rest-component.js +0 -50
- package/dist6/src/rest-component.js.map +0 -1
- package/dist6/src/rest-server.d.ts +0 -211
- package/dist6/src/rest-server.js +0 -444
- package/dist6/src/rest-server.js.map +0 -1
- package/dist6/src/router/metadata.d.ts +0 -150
- package/dist6/src/router/metadata.js +0 -410
- package/dist6/src/router/metadata.js.map +0 -1
- package/dist6/src/router/routing-table.d.ts +0 -68
- package/dist6/src/router/routing-table.js +0 -218
- package/dist6/src/router/routing-table.js.map +0 -1
- package/dist6/src/sequence.js +0 -114
- package/dist6/src/sequence.js.map +0 -1
- package/dist6/src/writer.d.ts +0 -17
- package/dist6/src/writer.js +0 -87
- package/dist6/src/writer.js.map +0 -1
- package/index.d.ts +0 -6
- package/index.js +0 -9
- package/src/internal-types.ts +0 -96
- package/src/providers/bind-element.ts +0 -15
- package/src/providers/get-from-context.ts +0 -16
- package/src/providers/log-error-provider.ts +0 -23
- package/src/providers/parse-params.ts +0 -20
- package/src/providers/reject.ts +0 -27
- package/src/rest-component.ts +0 -54
- package/src/rest-server.ts +0 -584
- 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;
|