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