@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,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright IBM Corp. 2018,2020. All Rights Reserved.
|
|
3
|
+
// Node module: @loopback/rest
|
|
4
|
+
// This file is licensed under the MIT License.
|
|
5
|
+
// License text available at https://opensource.org/licenses/MIT
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.RestHttpErrors = void 0;
|
|
8
|
+
const tslib_1 = require("tslib");
|
|
9
|
+
const http_errors_1 = tslib_1.__importDefault(require("http-errors"));
|
|
10
|
+
var RestHttpErrors;
|
|
11
|
+
(function (RestHttpErrors) {
|
|
12
|
+
function invalidData(data, name, extraProperties) {
|
|
13
|
+
const msg = `Invalid data ${JSON.stringify(data)} for parameter ${name}!`;
|
|
14
|
+
return Object.assign(new http_errors_1.default.BadRequest(msg), {
|
|
15
|
+
code: 'INVALID_PARAMETER_VALUE',
|
|
16
|
+
parameterName: name,
|
|
17
|
+
}, extraProperties);
|
|
18
|
+
}
|
|
19
|
+
RestHttpErrors.invalidData = invalidData;
|
|
20
|
+
function unsupportedMediaType(contentType, allowedTypes = []) {
|
|
21
|
+
const msg = (allowedTypes === null || allowedTypes === void 0 ? void 0 : allowedTypes.length) ? `Content-type ${contentType} does not match [${allowedTypes}].`
|
|
22
|
+
: `Content-type ${contentType} is not supported.`;
|
|
23
|
+
return Object.assign(new http_errors_1.default.UnsupportedMediaType(msg), {
|
|
24
|
+
code: 'UNSUPPORTED_MEDIA_TYPE',
|
|
25
|
+
contentType: contentType,
|
|
26
|
+
allowedMediaTypes: allowedTypes,
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
RestHttpErrors.unsupportedMediaType = unsupportedMediaType;
|
|
30
|
+
function missingRequired(name) {
|
|
31
|
+
const msg = `Required parameter ${name} is missing!`;
|
|
32
|
+
return Object.assign(new http_errors_1.default.BadRequest(msg), {
|
|
33
|
+
code: 'MISSING_REQUIRED_PARAMETER',
|
|
34
|
+
parameterName: name,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
RestHttpErrors.missingRequired = missingRequired;
|
|
38
|
+
function invalidParamLocation(location) {
|
|
39
|
+
const msg = `Parameters with "in: ${location}" are not supported yet.`;
|
|
40
|
+
return new http_errors_1.default.NotImplemented(msg);
|
|
41
|
+
}
|
|
42
|
+
RestHttpErrors.invalidParamLocation = invalidParamLocation;
|
|
43
|
+
RestHttpErrors.INVALID_REQUEST_BODY_MESSAGE = 'The request body is invalid. See error object `details` property for more info.';
|
|
44
|
+
function invalidRequestBody() {
|
|
45
|
+
return Object.assign(new http_errors_1.default.UnprocessableEntity(RestHttpErrors.INVALID_REQUEST_BODY_MESSAGE), {
|
|
46
|
+
code: 'VALIDATION_FAILED',
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
RestHttpErrors.invalidRequestBody = invalidRequestBody;
|
|
50
|
+
})(RestHttpErrors = exports.RestHttpErrors || (exports.RestHttpErrors = {}));
|
|
51
|
+
//# sourceMappingURL=rest-http-error.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rest-http-error.js","sourceRoot":"","sources":["../src/rest-http-error.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,8BAA8B;AAC9B,+CAA+C;AAC/C,gEAAgE;;;;AAEhE,sEAAqC;AAErC,IAAiB,cAAc,CA+E9B;AA/ED,WAAiB,cAAc;IAC7B,SAAgB,WAAW,CACzB,IAAO,EACP,IAAY,EACZ,eAAuB;QAEvB,MAAM,GAAG,GAAG,gBAAgB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,kBAAkB,IAAI,GAAG,CAAC;QAC1E,OAAO,MAAM,CAAC,MAAM,CAClB,IAAI,qBAAU,CAAC,UAAU,CAAC,GAAG,CAAC,EAC9B;YACE,IAAI,EAAE,yBAAyB;YAC/B,aAAa,EAAE,IAAI;SACpB,EACD,eAAe,CAChB,CAAC;IACJ,CAAC;IAde,0BAAW,cAc1B,CAAA;IAED,SAAgB,oBAAoB,CAClC,WAAmB,EACnB,eAAyB,EAAE;QAE3B,MAAM,GAAG,GAAG,CAAA,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,MAAM,EAC9B,CAAC,CAAC,gBAAgB,WAAW,oBAAoB,YAAY,IAAI;YACjE,CAAC,CAAC,gBAAgB,WAAW,oBAAoB,CAAC;QACpD,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,qBAAU,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE;YAC7D,IAAI,EAAE,wBAAwB;YAC9B,WAAW,EAAE,WAAW;YACxB,iBAAiB,EAAE,YAAY;SAChC,CAAC,CAAC;IACL,CAAC;IAZe,mCAAoB,uBAYnC,CAAA;IAED,SAAgB,eAAe,CAAC,IAAY;QAC1C,MAAM,GAAG,GAAG,sBAAsB,IAAI,cAAc,CAAC;QACrD,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,qBAAU,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;YACnD,IAAI,EAAE,4BAA4B;YAClC,aAAa,EAAE,IAAI;SACpB,CAAC,CAAC;IACL,CAAC;IANe,8BAAe,kBAM9B,CAAA;IAED,SAAgB,oBAAoB,CAAC,QAAgB;QACnD,MAAM,GAAG,GAAG,wBAAwB,QAAQ,0BAA0B,CAAC;QACvE,OAAO,IAAI,qBAAU,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;IAC5C,CAAC;IAHe,mCAAoB,uBAGnC,CAAA;IAEY,2CAA4B,GACvC,iFAAiF,CAAC;IACpF,SAAgB,kBAAkB;QAChC,OAAO,MAAM,CAAC,MAAM,CAClB,IAAI,qBAAU,CAAC,mBAAmB,CAAC,eAAA,4BAA4B,CAAC,EAChE;YACE,IAAI,EAAE,mBAAmB;SAC1B,CACF,CAAC;IACJ,CAAC;IAPe,iCAAkB,qBAOjC,CAAA;AA0BH,CAAC,EA/EgB,cAAc,GAAd,sBAAc,KAAd,sBAAc,QA+E9B"}
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
import { Binding, BindingAddress, Constructor, Context, Provider } from '@loopback/context';
|
|
2
|
+
import { Application, ApplicationConfig, Server } from '@loopback/core';
|
|
3
|
+
import { ExpressMiddlewareFactory, ExpressRequestHandler, Middleware, MiddlewareBindingOptions } from '@loopback/express';
|
|
4
|
+
import { OpenApiSpec, OperationObject } from '@loopback/openapi-v3';
|
|
5
|
+
import { PathParams } from 'express-serve-static-core';
|
|
6
|
+
import { ServeStaticOptions } from 'serve-static';
|
|
7
|
+
import { BodyParser } from './body-parsers';
|
|
8
|
+
import { RestBindings } from './keys';
|
|
9
|
+
import { HttpRequestListener, HttpServerLike, RestServer } from './rest.server';
|
|
10
|
+
import { ControllerClass, ControllerFactory, RouteEntry } from './router';
|
|
11
|
+
import { RouterSpec } from './router/router-spec';
|
|
12
|
+
import { SequenceFunction, SequenceHandler } from './sequence';
|
|
13
|
+
export declare const ERR_NO_MULTI_SERVER: string;
|
|
14
|
+
export declare const SequenceActions: typeof RestBindings.SequenceActions;
|
|
15
|
+
/**
|
|
16
|
+
* An implementation of the Application class that automatically provides
|
|
17
|
+
* an instance of a REST server. This application class is intended to be
|
|
18
|
+
* a single-server implementation. Any attempt to bind additional servers
|
|
19
|
+
* will throw an error.
|
|
20
|
+
*
|
|
21
|
+
*/
|
|
22
|
+
export declare class RestApplication extends Application implements HttpServerLike {
|
|
23
|
+
/**
|
|
24
|
+
* The main REST server instance providing REST API for this application.
|
|
25
|
+
*/
|
|
26
|
+
get restServer(): RestServer;
|
|
27
|
+
/**
|
|
28
|
+
* Handle incoming HTTP(S) request by invoking the corresponding
|
|
29
|
+
* Controller method via the configured Sequence.
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
*
|
|
33
|
+
* ```ts
|
|
34
|
+
* const app = new RestApplication();
|
|
35
|
+
* // setup controllers, etc.
|
|
36
|
+
*
|
|
37
|
+
* const server = http.createServer(app.requestHandler);
|
|
38
|
+
* server.listen(3000);
|
|
39
|
+
* ```
|
|
40
|
+
*
|
|
41
|
+
* @param req - The request.
|
|
42
|
+
* @param res - The response.
|
|
43
|
+
*/
|
|
44
|
+
get requestHandler(): HttpRequestListener;
|
|
45
|
+
/**
|
|
46
|
+
* Create a REST application with the given parent context
|
|
47
|
+
* @param parent - Parent context
|
|
48
|
+
*/
|
|
49
|
+
constructor(parent: Context);
|
|
50
|
+
/**
|
|
51
|
+
* Create a REST application with the given configuration and parent context
|
|
52
|
+
* @param config - Application configuration
|
|
53
|
+
* @param parent - Parent context
|
|
54
|
+
*/
|
|
55
|
+
constructor(config?: ApplicationConfig, parent?: Context);
|
|
56
|
+
server(server: Constructor<Server>, name?: string): Binding;
|
|
57
|
+
sequence(sequence: Constructor<SequenceHandler>): Binding;
|
|
58
|
+
handler(handlerFn: SequenceFunction): void;
|
|
59
|
+
/**
|
|
60
|
+
* Mount static assets to the REST server.
|
|
61
|
+
* See https://expressjs.com/en/4x/api.html#express.static
|
|
62
|
+
* @param path - The path(s) to serve the asset.
|
|
63
|
+
* See examples at https://expressjs.com/en/4x/api.html#path-examples
|
|
64
|
+
* To avoid performance penalty, `/` is not allowed for now.
|
|
65
|
+
* @param rootDir - The root directory from which to serve static assets
|
|
66
|
+
* @param options - Options for serve-static
|
|
67
|
+
*/
|
|
68
|
+
static(path: PathParams, rootDir: string, options?: ServeStaticOptions): void;
|
|
69
|
+
/**
|
|
70
|
+
* Bind a body parser to the server context
|
|
71
|
+
* @param parserClass - Body parser class
|
|
72
|
+
* @param address - Optional binding address
|
|
73
|
+
*/
|
|
74
|
+
bodyParser(bodyParserClass: Constructor<BodyParser>, address?: BindingAddress<BodyParser>): Binding<BodyParser>;
|
|
75
|
+
/**
|
|
76
|
+
* Configure the `basePath` for the rest server
|
|
77
|
+
* @param path - Base path
|
|
78
|
+
*/
|
|
79
|
+
basePath(path?: string): void;
|
|
80
|
+
/**
|
|
81
|
+
* Bind an Express middleware to this server context
|
|
82
|
+
*
|
|
83
|
+
* @example
|
|
84
|
+
* ```ts
|
|
85
|
+
* import myExpressMiddlewareFactory from 'my-express-middleware';
|
|
86
|
+
* const myExpressMiddlewareConfig= {};
|
|
87
|
+
* const myExpressMiddleware = myExpressMiddlewareFactory(myExpressMiddlewareConfig);
|
|
88
|
+
* server.expressMiddleware('middleware.express.my', myExpressMiddleware);
|
|
89
|
+
* ```
|
|
90
|
+
* @param key - Middleware binding key
|
|
91
|
+
* @param middleware - Express middleware handler function(s)
|
|
92
|
+
*
|
|
93
|
+
*/
|
|
94
|
+
expressMiddleware(key: BindingAddress, middleware: ExpressRequestHandler | ExpressRequestHandler[], options?: MiddlewareBindingOptions): Binding<Middleware>;
|
|
95
|
+
/**
|
|
96
|
+
* Bind an Express middleware to this server context
|
|
97
|
+
*
|
|
98
|
+
* @example
|
|
99
|
+
* ```ts
|
|
100
|
+
* import myExpressMiddlewareFactory from 'my-express-middleware';
|
|
101
|
+
* const myExpressMiddlewareConfig= {};
|
|
102
|
+
* server.expressMiddleware(myExpressMiddlewareFactory, myExpressMiddlewareConfig);
|
|
103
|
+
* ```
|
|
104
|
+
* @param middlewareFactory - Middleware module name or factory function
|
|
105
|
+
* @param middlewareConfig - Middleware config
|
|
106
|
+
* @param options - Options for registration
|
|
107
|
+
*
|
|
108
|
+
* @typeParam CFG - Configuration type
|
|
109
|
+
*/
|
|
110
|
+
expressMiddleware<CFG>(middlewareFactory: ExpressMiddlewareFactory<CFG>, middlewareConfig?: CFG, options?: MiddlewareBindingOptions): Binding<Middleware>;
|
|
111
|
+
/**
|
|
112
|
+
* Register a middleware function or provider class
|
|
113
|
+
*
|
|
114
|
+
* @example
|
|
115
|
+
* ```ts
|
|
116
|
+
* const log: Middleware = async (requestCtx, next) {
|
|
117
|
+
* // ...
|
|
118
|
+
* }
|
|
119
|
+
* server.middleware(log);
|
|
120
|
+
* ```
|
|
121
|
+
*
|
|
122
|
+
* @param middleware - Middleware function or provider class
|
|
123
|
+
* @param options - Middleware binding options
|
|
124
|
+
*/
|
|
125
|
+
middleware(middleware: Middleware | Constructor<Provider<Middleware>>, options?: MiddlewareBindingOptions): Binding<Middleware>;
|
|
126
|
+
/**
|
|
127
|
+
* Register a new Controller-based route.
|
|
128
|
+
*
|
|
129
|
+
* @example
|
|
130
|
+
* ```ts
|
|
131
|
+
* class MyController {
|
|
132
|
+
* greet(name: string) {
|
|
133
|
+
* return `hello ${name}`;
|
|
134
|
+
* }
|
|
135
|
+
* }
|
|
136
|
+
* app.route('get', '/greet', operationSpec, MyController, 'greet');
|
|
137
|
+
* ```
|
|
138
|
+
*
|
|
139
|
+
* @param verb - HTTP verb of the endpoint
|
|
140
|
+
* @param path - URL path of the endpoint
|
|
141
|
+
* @param spec - The OpenAPI spec describing the endpoint (operation)
|
|
142
|
+
* @param controllerCtor - Controller constructor
|
|
143
|
+
* @param controllerFactory - A factory function to create controller instance
|
|
144
|
+
* @param methodName - The name of the controller method
|
|
145
|
+
*/
|
|
146
|
+
route<T>(verb: string, path: string, spec: OperationObject, controllerCtor: ControllerClass<T>, controllerFactory: ControllerFactory<T>, methodName: string): Binding;
|
|
147
|
+
/**
|
|
148
|
+
* Register a new route invoking a handler function.
|
|
149
|
+
*
|
|
150
|
+
* @example
|
|
151
|
+
* ```ts
|
|
152
|
+
* function greet(name: string) {
|
|
153
|
+
* return `hello ${name}`;
|
|
154
|
+
* }
|
|
155
|
+
* app.route('get', '/', operationSpec, greet);
|
|
156
|
+
* ```
|
|
157
|
+
*
|
|
158
|
+
* @param verb - HTTP verb of the endpoint
|
|
159
|
+
* @param path - URL path of the endpoint
|
|
160
|
+
* @param spec - The OpenAPI spec describing the endpoint (operation)
|
|
161
|
+
* @param handler - The function to invoke with the request parameters
|
|
162
|
+
* described in the spec.
|
|
163
|
+
*/
|
|
164
|
+
route(verb: string, path: string, spec: OperationObject, handler: Function): Binding;
|
|
165
|
+
/**
|
|
166
|
+
* Register a new route.
|
|
167
|
+
*
|
|
168
|
+
* @example
|
|
169
|
+
* ```ts
|
|
170
|
+
* function greet(name: string) {
|
|
171
|
+
* return `hello ${name}`;
|
|
172
|
+
* }
|
|
173
|
+
* const route = new Route('get', '/', operationSpec, greet);
|
|
174
|
+
* app.route(route);
|
|
175
|
+
* ```
|
|
176
|
+
*
|
|
177
|
+
* @param route - The route to add.
|
|
178
|
+
*/
|
|
179
|
+
route(route: RouteEntry): Binding;
|
|
180
|
+
/**
|
|
181
|
+
* Register a new route.
|
|
182
|
+
*
|
|
183
|
+
* @example
|
|
184
|
+
* ```ts
|
|
185
|
+
* function greet(name: string) {
|
|
186
|
+
* return `hello ${name}`;
|
|
187
|
+
* }
|
|
188
|
+
* app.route('get', '/', operationSpec, greet);
|
|
189
|
+
* ```
|
|
190
|
+
*/
|
|
191
|
+
route(verb: string, path: string, spec: OperationObject, handler: Function): Binding;
|
|
192
|
+
/**
|
|
193
|
+
* Register a route redirecting callers to a different URL.
|
|
194
|
+
*
|
|
195
|
+
* @example
|
|
196
|
+
* ```ts
|
|
197
|
+
* app.redirect('/explorer', '/explorer/');
|
|
198
|
+
* ```
|
|
199
|
+
*
|
|
200
|
+
* @param fromPath - URL path of the redirect endpoint
|
|
201
|
+
* @param toPathOrUrl - Location (URL path or full URL) where to redirect to.
|
|
202
|
+
* If your server is configured with a custom `basePath`, then the base path
|
|
203
|
+
* is prepended to the target location.
|
|
204
|
+
* @param statusCode - HTTP status code to respond with,
|
|
205
|
+
* defaults to 303 (See Other).
|
|
206
|
+
*/
|
|
207
|
+
redirect(fromPath: string, toPathOrUrl: string, statusCode?: number): Binding;
|
|
208
|
+
/**
|
|
209
|
+
* Set the OpenAPI specification that defines the REST API schema for this
|
|
210
|
+
* application. All routes, parameter definitions and return types will be
|
|
211
|
+
* defined in this way.
|
|
212
|
+
*
|
|
213
|
+
* Note that this will override any routes defined via decorators at the
|
|
214
|
+
* controller level (this function takes precedent).
|
|
215
|
+
*
|
|
216
|
+
* @param spec - The OpenAPI specification, as an object.
|
|
217
|
+
* @returns Binding for the api spec
|
|
218
|
+
*/
|
|
219
|
+
api(spec: OpenApiSpec): Binding;
|
|
220
|
+
/**
|
|
221
|
+
* Mount an Express router to expose additional REST endpoints handled
|
|
222
|
+
* via legacy Express-based stack.
|
|
223
|
+
*
|
|
224
|
+
* @param basePath - Path where to mount the router at, e.g. `/` or `/api`.
|
|
225
|
+
* @param router - The Express router to handle the requests.
|
|
226
|
+
* @param spec - A partial OpenAPI spec describing endpoints provided by the
|
|
227
|
+
* router. LoopBack will prepend `basePath` to all endpoints automatically.
|
|
228
|
+
* This argument is optional. You can leave it out if you don't want to
|
|
229
|
+
* document the routes.
|
|
230
|
+
*/
|
|
231
|
+
mountExpressRouter(basePath: string, router: ExpressRequestHandler, spec?: RouterSpec): void;
|
|
232
|
+
}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright IBM Corp. 2018,2019. All Rights Reserved.
|
|
3
|
+
// Node module: @loopback/rest
|
|
4
|
+
// This file is licensed under the MIT License.
|
|
5
|
+
// License text available at https://opensource.org/licenses/MIT
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.RestApplication = exports.SequenceActions = exports.ERR_NO_MULTI_SERVER = void 0;
|
|
8
|
+
const core_1 = require("@loopback/core");
|
|
9
|
+
const util_1 = require("util");
|
|
10
|
+
const keys_1 = require("./keys");
|
|
11
|
+
const rest_component_1 = require("./rest.component");
|
|
12
|
+
exports.ERR_NO_MULTI_SERVER = util_1.format('RestApplication does not support multiple servers!', 'To create your own server bindings, please extend the Application class.');
|
|
13
|
+
// To help cut down on verbosity!
|
|
14
|
+
exports.SequenceActions = keys_1.RestBindings.SequenceActions;
|
|
15
|
+
/**
|
|
16
|
+
* An implementation of the Application class that automatically provides
|
|
17
|
+
* an instance of a REST server. This application class is intended to be
|
|
18
|
+
* a single-server implementation. Any attempt to bind additional servers
|
|
19
|
+
* will throw an error.
|
|
20
|
+
*
|
|
21
|
+
*/
|
|
22
|
+
class RestApplication extends core_1.Application {
|
|
23
|
+
/**
|
|
24
|
+
* The main REST server instance providing REST API for this application.
|
|
25
|
+
*/
|
|
26
|
+
get restServer() {
|
|
27
|
+
// FIXME(kjdelisle): I attempted to mimic the pattern found in RestServer
|
|
28
|
+
// with no success, so until I've got a better way, this is functional.
|
|
29
|
+
return this.getSync('servers.RestServer');
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Handle incoming HTTP(S) request by invoking the corresponding
|
|
33
|
+
* Controller method via the configured Sequence.
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
*
|
|
37
|
+
* ```ts
|
|
38
|
+
* const app = new RestApplication();
|
|
39
|
+
* // setup controllers, etc.
|
|
40
|
+
*
|
|
41
|
+
* const server = http.createServer(app.requestHandler);
|
|
42
|
+
* server.listen(3000);
|
|
43
|
+
* ```
|
|
44
|
+
*
|
|
45
|
+
* @param req - The request.
|
|
46
|
+
* @param res - The response.
|
|
47
|
+
*/
|
|
48
|
+
get requestHandler() {
|
|
49
|
+
return this.restServer.requestHandler;
|
|
50
|
+
}
|
|
51
|
+
constructor(configOrParent, parent) {
|
|
52
|
+
super(configOrParent, parent);
|
|
53
|
+
this.component(rest_component_1.RestComponent);
|
|
54
|
+
}
|
|
55
|
+
server(server, name) {
|
|
56
|
+
if (this.findByTag('server').length > 0) {
|
|
57
|
+
throw new Error(exports.ERR_NO_MULTI_SERVER);
|
|
58
|
+
}
|
|
59
|
+
return super.server(server, name);
|
|
60
|
+
}
|
|
61
|
+
sequence(sequence) {
|
|
62
|
+
return this.bind(keys_1.RestBindings.SEQUENCE).toClass(sequence);
|
|
63
|
+
}
|
|
64
|
+
handler(handlerFn) {
|
|
65
|
+
this.restServer.handler(handlerFn);
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Mount static assets to the REST server.
|
|
69
|
+
* See https://expressjs.com/en/4x/api.html#express.static
|
|
70
|
+
* @param path - The path(s) to serve the asset.
|
|
71
|
+
* See examples at https://expressjs.com/en/4x/api.html#path-examples
|
|
72
|
+
* To avoid performance penalty, `/` is not allowed for now.
|
|
73
|
+
* @param rootDir - The root directory from which to serve static assets
|
|
74
|
+
* @param options - Options for serve-static
|
|
75
|
+
*/
|
|
76
|
+
static(path, rootDir, options) {
|
|
77
|
+
this.restServer.static(path, rootDir, options);
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Bind a body parser to the server context
|
|
81
|
+
* @param parserClass - Body parser class
|
|
82
|
+
* @param address - Optional binding address
|
|
83
|
+
*/
|
|
84
|
+
bodyParser(bodyParserClass, address) {
|
|
85
|
+
return this.restServer.bodyParser(bodyParserClass, address);
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Configure the `basePath` for the rest server
|
|
89
|
+
* @param path - Base path
|
|
90
|
+
*/
|
|
91
|
+
basePath(path = '') {
|
|
92
|
+
this.restServer.basePath(path);
|
|
93
|
+
}
|
|
94
|
+
expressMiddleware(factoryOrKey, configOrHandlers, options = {}) {
|
|
95
|
+
return this.restServer.expressMiddleware(factoryOrKey, configOrHandlers, options);
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Register a middleware function or provider class
|
|
99
|
+
*
|
|
100
|
+
* @example
|
|
101
|
+
* ```ts
|
|
102
|
+
* const log: Middleware = async (requestCtx, next) {
|
|
103
|
+
* // ...
|
|
104
|
+
* }
|
|
105
|
+
* server.middleware(log);
|
|
106
|
+
* ```
|
|
107
|
+
*
|
|
108
|
+
* @param middleware - Middleware function or provider class
|
|
109
|
+
* @param options - Middleware binding options
|
|
110
|
+
*/
|
|
111
|
+
middleware(middleware, options = {}) {
|
|
112
|
+
return this.restServer.middleware(middleware, options);
|
|
113
|
+
}
|
|
114
|
+
route(routeOrVerb, path, spec, controllerCtorOrHandler, controllerFactory, methodName) {
|
|
115
|
+
const server = this.restServer;
|
|
116
|
+
if (typeof routeOrVerb === 'object') {
|
|
117
|
+
return server.route(routeOrVerb);
|
|
118
|
+
}
|
|
119
|
+
else if (arguments.length === 4) {
|
|
120
|
+
return server.route(routeOrVerb, path, spec, controllerCtorOrHandler);
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
return server.route(routeOrVerb, path, spec, controllerCtorOrHandler, controllerFactory, methodName);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Register a route redirecting callers to a different URL.
|
|
128
|
+
*
|
|
129
|
+
* @example
|
|
130
|
+
* ```ts
|
|
131
|
+
* app.redirect('/explorer', '/explorer/');
|
|
132
|
+
* ```
|
|
133
|
+
*
|
|
134
|
+
* @param fromPath - URL path of the redirect endpoint
|
|
135
|
+
* @param toPathOrUrl - Location (URL path or full URL) where to redirect to.
|
|
136
|
+
* If your server is configured with a custom `basePath`, then the base path
|
|
137
|
+
* is prepended to the target location.
|
|
138
|
+
* @param statusCode - HTTP status code to respond with,
|
|
139
|
+
* defaults to 303 (See Other).
|
|
140
|
+
*/
|
|
141
|
+
redirect(fromPath, toPathOrUrl, statusCode) {
|
|
142
|
+
return this.restServer.redirect(fromPath, toPathOrUrl, statusCode);
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Set the OpenAPI specification that defines the REST API schema for this
|
|
146
|
+
* application. All routes, parameter definitions and return types will be
|
|
147
|
+
* defined in this way.
|
|
148
|
+
*
|
|
149
|
+
* Note that this will override any routes defined via decorators at the
|
|
150
|
+
* controller level (this function takes precedent).
|
|
151
|
+
*
|
|
152
|
+
* @param spec - The OpenAPI specification, as an object.
|
|
153
|
+
* @returns Binding for the api spec
|
|
154
|
+
*/
|
|
155
|
+
api(spec) {
|
|
156
|
+
return this.bind(keys_1.RestBindings.API_SPEC).to(spec);
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Mount an Express router to expose additional REST endpoints handled
|
|
160
|
+
* via legacy Express-based stack.
|
|
161
|
+
*
|
|
162
|
+
* @param basePath - Path where to mount the router at, e.g. `/` or `/api`.
|
|
163
|
+
* @param router - The Express router to handle the requests.
|
|
164
|
+
* @param spec - A partial OpenAPI spec describing endpoints provided by the
|
|
165
|
+
* router. LoopBack will prepend `basePath` to all endpoints automatically.
|
|
166
|
+
* This argument is optional. You can leave it out if you don't want to
|
|
167
|
+
* document the routes.
|
|
168
|
+
*/
|
|
169
|
+
mountExpressRouter(basePath, router, spec) {
|
|
170
|
+
this.restServer.mountExpressRouter(basePath, router, spec);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
exports.RestApplication = RestApplication;
|
|
174
|
+
//# sourceMappingURL=rest.application.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rest.application.js","sourceRoot":"","sources":["../src/rest.application.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Binding, Constructor } from '@loopback/context';
|
|
2
|
+
import { Application, Component, ProviderMap, Server } from '@loopback/core';
|
|
3
|
+
import { RestServerConfig } from './rest.server';
|
|
4
|
+
export declare class RestComponent implements Component {
|
|
5
|
+
providers: ProviderMap;
|
|
6
|
+
/**
|
|
7
|
+
* Add built-in body parsers
|
|
8
|
+
*/
|
|
9
|
+
bindings: Binding[];
|
|
10
|
+
servers: {
|
|
11
|
+
[name: string]: Constructor<Server>;
|
|
12
|
+
};
|
|
13
|
+
constructor(app: Application, config?: RestComponentConfig);
|
|
14
|
+
}
|
|
15
|
+
export declare type RestComponentConfig = RestServerConfig;
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright IBM Corp. 2018,2020. All Rights Reserved.
|
|
3
|
+
// Node module: @loopback/rest
|
|
4
|
+
// This file is licensed under the MIT License.
|
|
5
|
+
// License text available at https://opensource.org/licenses/MIT
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.RestComponent = void 0;
|
|
8
|
+
const tslib_1 = require("tslib");
|
|
9
|
+
const context_1 = require("@loopback/context");
|
|
10
|
+
const core_1 = require("@loopback/core");
|
|
11
|
+
const express_1 = require("@loopback/express");
|
|
12
|
+
const openapi_v3_1 = require("@loopback/openapi-v3");
|
|
13
|
+
const body_parsers_1 = require("./body-parsers");
|
|
14
|
+
const body_parser_raw_1 = require("./body-parsers/body-parser.raw");
|
|
15
|
+
const keys_1 = require("./keys");
|
|
16
|
+
const providers_1 = require("./providers");
|
|
17
|
+
const rest_server_1 = require("./rest.server");
|
|
18
|
+
const sequence_1 = require("./sequence");
|
|
19
|
+
const consolidate_spec_enhancer_1 = require("./spec-enhancers/consolidate.spec-enhancer");
|
|
20
|
+
const info_spec_enhancer_1 = require("./spec-enhancers/info.spec-enhancer");
|
|
21
|
+
const ajv_factory_provider_1 = require("./validation/ajv-factory.provider");
|
|
22
|
+
let RestComponent = /** @class */ (() => {
|
|
23
|
+
let RestComponent = class RestComponent {
|
|
24
|
+
constructor(app, config) {
|
|
25
|
+
var _a;
|
|
26
|
+
this.providers = {
|
|
27
|
+
[keys_1.RestBindings.SequenceActions.LOG_ERROR.key]: providers_1.LogErrorProvider,
|
|
28
|
+
[keys_1.RestBindings.SequenceActions.INVOKE_MIDDLEWARE
|
|
29
|
+
.key]: express_1.InvokeMiddlewareProvider,
|
|
30
|
+
[keys_1.RestBindings.SequenceActions.FIND_ROUTE.key]: providers_1.FindRouteProvider,
|
|
31
|
+
[keys_1.RestBindings.SequenceActions.INVOKE_METHOD.key]: providers_1.InvokeMethodProvider,
|
|
32
|
+
[keys_1.RestBindings.SequenceActions.REJECT.key]: providers_1.RejectProvider,
|
|
33
|
+
[keys_1.RestBindings.SequenceActions.PARSE_PARAMS.key]: providers_1.ParseParamsProvider,
|
|
34
|
+
[keys_1.RestBindings.SequenceActions.SEND.key]: providers_1.SendProvider,
|
|
35
|
+
[keys_1.RestBindings.AJV_FACTORY.key]: ajv_factory_provider_1.AjvFactoryProvider,
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Add built-in body parsers
|
|
39
|
+
*/
|
|
40
|
+
this.bindings = [
|
|
41
|
+
// FIXME(rfeng): We now register request body parsers in TRANSIENT scope
|
|
42
|
+
// so that they can be bound at application or server level
|
|
43
|
+
context_1.Binding.bind(keys_1.RestBindings.REQUEST_BODY_PARSER).toClass(body_parsers_1.RequestBodyParser),
|
|
44
|
+
rest_server_1.createBodyParserBinding(body_parsers_1.JsonBodyParser, keys_1.RestBindings.REQUEST_BODY_PARSER_JSON),
|
|
45
|
+
rest_server_1.createBodyParserBinding(body_parsers_1.TextBodyParser, keys_1.RestBindings.REQUEST_BODY_PARSER_TEXT),
|
|
46
|
+
rest_server_1.createBodyParserBinding(body_parsers_1.UrlEncodedBodyParser, keys_1.RestBindings.REQUEST_BODY_PARSER_URLENCODED),
|
|
47
|
+
rest_server_1.createBodyParserBinding(body_parser_raw_1.RawBodyParser, keys_1.RestBindings.REQUEST_BODY_PARSER_RAW),
|
|
48
|
+
rest_server_1.createBodyParserBinding(body_parsers_1.StreamBodyParser, keys_1.RestBindings.REQUEST_BODY_PARSER_STREAM),
|
|
49
|
+
context_1.createBindingFromClass(info_spec_enhancer_1.InfoSpecEnhancer),
|
|
50
|
+
context_1.createBindingFromClass(consolidate_spec_enhancer_1.ConsolidationEnhancer),
|
|
51
|
+
];
|
|
52
|
+
this.servers = {
|
|
53
|
+
RestServer: rest_server_1.RestServer,
|
|
54
|
+
};
|
|
55
|
+
app.bind(keys_1.RestBindings.SEQUENCE).toClass(sequence_1.DefaultSequence);
|
|
56
|
+
const apiSpec = openapi_v3_1.createEmptyApiSpec();
|
|
57
|
+
// Merge the OpenAPI `servers` spec from the config into the empty one
|
|
58
|
+
if ((_a = config === null || config === void 0 ? void 0 : config.openApiSpec) === null || _a === void 0 ? void 0 : _a.servers) {
|
|
59
|
+
Object.assign(apiSpec, { servers: config.openApiSpec.servers });
|
|
60
|
+
}
|
|
61
|
+
app.bind(keys_1.RestBindings.API_SPEC).to(apiSpec);
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
RestComponent = tslib_1.__decorate([
|
|
65
|
+
tslib_1.__param(0, context_1.inject(core_1.CoreBindings.APPLICATION_INSTANCE)),
|
|
66
|
+
tslib_1.__param(1, context_1.inject(keys_1.RestBindings.CONFIG)),
|
|
67
|
+
tslib_1.__metadata("design:paramtypes", [core_1.Application, Object])
|
|
68
|
+
], RestComponent);
|
|
69
|
+
return RestComponent;
|
|
70
|
+
})();
|
|
71
|
+
exports.RestComponent = RestComponent;
|
|
72
|
+
//# sourceMappingURL=rest.component.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rest.component.js","sourceRoot":"","sources":["../src/rest.component.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,8BAA8B;AAC9B,+CAA+C;AAC/C,gEAAgE;;;;AAEhE,+CAK2B;AAC3B,yCAMwB;AACxB,+CAA2D;AAC3D,qDAAwD;AACxD,iDAMwB;AACxB,oEAA6D;AAC7D,iCAAoC;AACpC,2CAOqB;AACrB,+CAIuB;AACvB,yCAA2C;AAC3C,0FAAiF;AACjF,4EAAqE;AACrE,4EAAqE;AAErE;IAAA,IAAa,aAAa,GAA1B,MAAa,aAAa;QAgDxB,YAC6C,GAAgB,EAC9B,MAA4B;;YAjD3D,cAAS,GAAgB;gBACvB,CAAC,mBAAY,CAAC,eAAe,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,4BAAgB;gBAC9D,CAAC,mBAAY,CAAC,eAAe,CAAC,iBAAiB;qBAC5C,GAAG,CAAC,EAAE,kCAAwB;gBACjC,CAAC,mBAAY,CAAC,eAAe,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,6BAAiB;gBAChE,CAAC,mBAAY,CAAC,eAAe,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,gCAAoB;gBACtE,CAAC,mBAAY,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,0BAAc;gBACzD,CAAC,mBAAY,CAAC,eAAe,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,+BAAmB;gBACpE,CAAC,mBAAY,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,wBAAY;gBACrD,CAAC,mBAAY,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,yCAAkB;aACnD,CAAC;YACF;;eAEG;YACH,aAAQ,GAAc;gBACpB,wEAAwE;gBACxE,2DAA2D;gBAC3D,iBAAO,CAAC,IAAI,CAAC,mBAAY,CAAC,mBAAmB,CAAC,CAAC,OAAO,CAAC,gCAAiB,CAAC;gBACzE,qCAAuB,CACrB,6BAAc,EACd,mBAAY,CAAC,wBAAwB,CACtC;gBACD,qCAAuB,CACrB,6BAAc,EACd,mBAAY,CAAC,wBAAwB,CACtC;gBACD,qCAAuB,CACrB,mCAAoB,EACpB,mBAAY,CAAC,8BAA8B,CAC5C;gBACD,qCAAuB,CACrB,+BAAa,EACb,mBAAY,CAAC,uBAAuB,CACrC;gBACD,qCAAuB,CACrB,+BAAgB,EAChB,mBAAY,CAAC,0BAA0B,CACxC;gBACD,gCAAsB,CAAC,qCAAgB,CAAC;gBACxC,gCAAsB,CAAC,iDAAqB,CAAC;aAC9C,CAAC;YACF,YAAO,GAEH;gBACF,UAAU,EAAV,wBAAU;aACX,CAAC;YAMA,GAAG,CAAC,IAAI,CAAC,mBAAY,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,0BAAe,CAAC,CAAC;YACzD,MAAM,OAAO,GAAG,+BAAkB,EAAE,CAAC;YACrC,sEAAsE;YACtE,UAAI,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,WAAW,0CAAE,OAAO,EAAE;gBAChC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,EAAC,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,OAAO,EAAC,CAAC,CAAC;aAC/D;YACD,GAAG,CAAC,IAAI,CAAC,mBAAY,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;QAC9C,CAAC;KACF,CAAA;IA5DY,aAAa;QAiDrB,mBAAA,gBAAM,CAAC,mBAAY,CAAC,oBAAoB,CAAC,CAAA;QACzC,mBAAA,gBAAM,CAAC,mBAAY,CAAC,MAAM,CAAC,CAAA;iDADoB,kBAAW;OAjDlD,aAAa,CA4DzB;IAAD,oBAAC;KAAA;AA5DY,sCAAa"}
|