@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,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright IBM Corp. 2017,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.RoutingTable = void 0;
|
|
8
|
+
const tslib_1 = require("tslib");
|
|
9
|
+
const debug_1 = tslib_1.__importDefault(require("debug"));
|
|
10
|
+
const http_errors_1 = tslib_1.__importDefault(require("http-errors"));
|
|
11
|
+
const controller_route_1 = require("./controller-route");
|
|
12
|
+
const openapi_path_1 = require("./openapi-path");
|
|
13
|
+
const trie_router_1 = require("./trie-router");
|
|
14
|
+
const debug = debug_1.default('loopback:rest:routing-table');
|
|
15
|
+
/**
|
|
16
|
+
* Routing table
|
|
17
|
+
*/
|
|
18
|
+
class RoutingTable {
|
|
19
|
+
constructor(_router = new trie_router_1.TrieRouter(), _externalRoutes) {
|
|
20
|
+
this._router = _router;
|
|
21
|
+
this._externalRoutes = _externalRoutes;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Register a controller as the route
|
|
25
|
+
* @param spec
|
|
26
|
+
* @param controllerCtor
|
|
27
|
+
* @param controllerFactory
|
|
28
|
+
*/
|
|
29
|
+
registerController(spec, controllerCtor, controllerFactory) {
|
|
30
|
+
const routes = controller_route_1.createRoutesForController(spec, controllerCtor, controllerFactory);
|
|
31
|
+
for (const route of routes) {
|
|
32
|
+
this.registerRoute(route);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Register a route
|
|
37
|
+
* @param route - A route entry
|
|
38
|
+
*/
|
|
39
|
+
registerRoute(route) {
|
|
40
|
+
// TODO(bajtos) handle the case where opSpec.parameters contains $ref
|
|
41
|
+
// See https://github.com/strongloop/loopback-next/issues/435
|
|
42
|
+
/* istanbul ignore if */
|
|
43
|
+
if (debug.enabled) {
|
|
44
|
+
debug('Registering route %s %s -> %s(%s)', route.verb.toUpperCase(), route.path, route.describe(), describeOperationParameters(route.spec));
|
|
45
|
+
}
|
|
46
|
+
openapi_path_1.validateApiPath(route.path);
|
|
47
|
+
this._router.add(route);
|
|
48
|
+
}
|
|
49
|
+
describeApiPaths() {
|
|
50
|
+
const paths = {};
|
|
51
|
+
for (const route of this._router.list()) {
|
|
52
|
+
if (route.spec['x-visibility'] === 'undocumented')
|
|
53
|
+
continue;
|
|
54
|
+
if (!paths[route.path]) {
|
|
55
|
+
paths[route.path] = {};
|
|
56
|
+
}
|
|
57
|
+
paths[route.path][route.verb] = route.spec;
|
|
58
|
+
}
|
|
59
|
+
return paths;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Map a request to a route
|
|
63
|
+
* @param request
|
|
64
|
+
*/
|
|
65
|
+
find(request) {
|
|
66
|
+
debug('Finding route for %s %s', request.method, request.path);
|
|
67
|
+
const found = this._router.find(request);
|
|
68
|
+
if (found) {
|
|
69
|
+
debug('Route matched: %j', found);
|
|
70
|
+
return found;
|
|
71
|
+
}
|
|
72
|
+
if (this._externalRoutes) {
|
|
73
|
+
debug('No API route found for %s %s, trying to find an external Express route', request.method, request.path);
|
|
74
|
+
return this._externalRoutes.find(request);
|
|
75
|
+
}
|
|
76
|
+
debug('No route found for %s %s', request.method, request.path);
|
|
77
|
+
throw new http_errors_1.default.NotFound(`Endpoint "${request.method} ${request.path}" not found.`);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
exports.RoutingTable = RoutingTable;
|
|
81
|
+
function describeOperationParameters(opSpec) {
|
|
82
|
+
return (opSpec.parameters || [])
|
|
83
|
+
.map(p => (p === null || p === void 0 ? void 0 : p.name) || '')
|
|
84
|
+
.join(', ');
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=routing-table.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routing-table.js","sourceRoot":"","sources":["../../src/router/routing-table.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { RestRouterOptions } from './rest-router';
|
|
2
|
+
import { ResolvedRoute, RouteEntry } from './route-entry';
|
|
3
|
+
import { BaseRouter } from './router-base';
|
|
4
|
+
/**
|
|
5
|
+
* Router implementation based on trie
|
|
6
|
+
*/
|
|
7
|
+
export declare class TrieRouter extends BaseRouter {
|
|
8
|
+
private trie;
|
|
9
|
+
constructor(options?: RestRouterOptions);
|
|
10
|
+
protected addRouteWithPathVars(route: RouteEntry): void;
|
|
11
|
+
protected findRouteWithPathVars(verb: string, path: string): ResolvedRoute | undefined;
|
|
12
|
+
protected listRoutesWithPathVars(): RouteEntry[];
|
|
13
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
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.TrieRouter = void 0;
|
|
8
|
+
const tslib_1 = require("tslib");
|
|
9
|
+
const context_1 = require("@loopback/context");
|
|
10
|
+
const util_1 = require("util");
|
|
11
|
+
const keys_1 = require("../keys");
|
|
12
|
+
const route_entry_1 = require("./route-entry");
|
|
13
|
+
const router_base_1 = require("./router-base");
|
|
14
|
+
const trie_1 = require("./trie");
|
|
15
|
+
const debug = require('debug')('loopback:rest:router:trie');
|
|
16
|
+
/**
|
|
17
|
+
* Router implementation based on trie
|
|
18
|
+
*/
|
|
19
|
+
let TrieRouter = /** @class */ (() => {
|
|
20
|
+
let TrieRouter = class TrieRouter extends router_base_1.BaseRouter {
|
|
21
|
+
constructor(options) {
|
|
22
|
+
super(options);
|
|
23
|
+
this.trie = new trie_1.Trie();
|
|
24
|
+
}
|
|
25
|
+
addRouteWithPathVars(route) {
|
|
26
|
+
// Add the route to the trie
|
|
27
|
+
const key = this.getKeyForRoute(route);
|
|
28
|
+
this.trie.create(key, route);
|
|
29
|
+
}
|
|
30
|
+
findRouteWithPathVars(verb, path) {
|
|
31
|
+
var _a;
|
|
32
|
+
const key = this.getKey(verb, path);
|
|
33
|
+
const found = this.trie.match(key);
|
|
34
|
+
debug('Route matched: %j', found);
|
|
35
|
+
if (found) {
|
|
36
|
+
const route = found.node.value;
|
|
37
|
+
if (route) {
|
|
38
|
+
debug('Route found: %s', util_1.inspect(route, { depth: 5 }));
|
|
39
|
+
return route_entry_1.createResolvedRoute(route, (_a = found.params) !== null && _a !== void 0 ? _a : {});
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return undefined;
|
|
43
|
+
}
|
|
44
|
+
listRoutesWithPathVars() {
|
|
45
|
+
return this.trie.list().map(n => n.value);
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
TrieRouter = tslib_1.__decorate([
|
|
49
|
+
tslib_1.__param(0, context_1.inject(keys_1.RestBindings.ROUTER_OPTIONS, { optional: true })),
|
|
50
|
+
tslib_1.__metadata("design:paramtypes", [Object])
|
|
51
|
+
], TrieRouter);
|
|
52
|
+
return TrieRouter;
|
|
53
|
+
})();
|
|
54
|
+
exports.TrieRouter = TrieRouter;
|
|
55
|
+
//# sourceMappingURL=trie-router.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trie-router.js","sourceRoot":"","sources":["../../src/router/trie-router.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,8BAA8B;AAC9B,+CAA+C;AAC/C,gEAAgE;;;;AAEhE,+CAAyC;AACzC,+BAA6B;AAC7B,kCAAqC;AAErC,+CAA6E;AAC7E,+CAAyC;AACzC,iCAA4B;AAE5B,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,2BAA2B,CAAC,CAAC;AAE5D;;GAEG;AACH;IAAA,IAAa,UAAU,GAAvB,MAAa,UAAW,SAAQ,wBAAU;QAGxC,YAEE,OAA2B;YAE3B,KAAK,CAAC,OAAO,CAAC,CAAC;YANT,SAAI,GAAG,IAAI,WAAI,EAAc,CAAC;QAOtC,CAAC;QAES,oBAAoB,CAAC,KAAiB;YAC9C,4BAA4B;YAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;YACvC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC/B,CAAC;QAES,qBAAqB,CAC7B,IAAY,EACZ,IAAY;;YAEZ,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAEpC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACnC,KAAK,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC;YAElC,IAAI,KAAK,EAAE;gBACT,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAM,CAAC;gBAChC,IAAI,KAAK,EAAE;oBACT,KAAK,CAAC,iBAAiB,EAAE,cAAO,CAAC,KAAK,EAAE,EAAC,KAAK,EAAE,CAAC,EAAC,CAAC,CAAC,CAAC;oBACrD,OAAO,iCAAmB,CAAC,KAAK,QAAE,KAAK,CAAC,MAAM,mCAAI,EAAE,CAAC,CAAC;iBACvD;aACF;YACD,OAAO,SAAS,CAAC;QACnB,CAAC;QAES,sBAAsB;YAC9B,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAC5C,CAAC;KACF,CAAA;IAtCY,UAAU;QAIlB,mBAAA,gBAAM,CAAC,mBAAY,CAAC,cAAc,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC,CAAA;;OAJ7C,UAAU,CAsCtB;IAAD,iBAAC;KAAA;AAtCY,gCAAU"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { PathParameterValues } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* A Node in the trie
|
|
4
|
+
*/
|
|
5
|
+
export interface Node<T> {
|
|
6
|
+
/**
|
|
7
|
+
* Key of the node
|
|
8
|
+
*/
|
|
9
|
+
key: string;
|
|
10
|
+
/**
|
|
11
|
+
* Value of the node
|
|
12
|
+
*/
|
|
13
|
+
value?: T;
|
|
14
|
+
/**
|
|
15
|
+
* Children of the node
|
|
16
|
+
*/
|
|
17
|
+
readonly children: {
|
|
18
|
+
[key: string]: Node<T>;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Regular expression for the template
|
|
22
|
+
*/
|
|
23
|
+
regexp?: RegExp;
|
|
24
|
+
/**
|
|
25
|
+
* Names of the node if it contains named parameters
|
|
26
|
+
*/
|
|
27
|
+
names?: string[];
|
|
28
|
+
}
|
|
29
|
+
export declare type NodeWithValue<T> = Node<T> & {
|
|
30
|
+
value: T;
|
|
31
|
+
};
|
|
32
|
+
export interface ResolvedNode<T> {
|
|
33
|
+
node: Node<T>;
|
|
34
|
+
params?: PathParameterValues;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* An implementation of trie for routes. The key hierarchy is built with parts
|
|
38
|
+
* of the route path delimited by `/`
|
|
39
|
+
*/
|
|
40
|
+
export declare class Trie<T> {
|
|
41
|
+
readonly root: Node<T>;
|
|
42
|
+
/**
|
|
43
|
+
* Create a node for a given path template
|
|
44
|
+
* @param pathTemplate - The path template,
|
|
45
|
+
* @param value - Value of the route
|
|
46
|
+
*/
|
|
47
|
+
create(routeTemplate: string, value: T): Node<T>;
|
|
48
|
+
/**
|
|
49
|
+
* Match a route path against the trie
|
|
50
|
+
* @param path - The route path, such as `/customers/c01`
|
|
51
|
+
*/
|
|
52
|
+
match(path: string): (ResolvedNode<T> & {
|
|
53
|
+
node: NodeWithValue<T>;
|
|
54
|
+
}) | undefined;
|
|
55
|
+
/**
|
|
56
|
+
* List all nodes with value of the trie
|
|
57
|
+
*/
|
|
58
|
+
list(): NodeWithValue<T>[];
|
|
59
|
+
}
|
|
@@ -0,0 +1,180 @@
|
|
|
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.Trie = void 0;
|
|
8
|
+
const path_to_regexp_1 = require("path-to-regexp");
|
|
9
|
+
const openapi_path_1 = require("./openapi-path");
|
|
10
|
+
/**
|
|
11
|
+
* An implementation of trie for routes. The key hierarchy is built with parts
|
|
12
|
+
* of the route path delimited by `/`
|
|
13
|
+
*/
|
|
14
|
+
class Trie {
|
|
15
|
+
constructor() {
|
|
16
|
+
this.root = { key: '', children: {} };
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Create a node for a given path template
|
|
20
|
+
* @param pathTemplate - The path template,
|
|
21
|
+
* @param value - Value of the route
|
|
22
|
+
*/
|
|
23
|
+
create(routeTemplate, value) {
|
|
24
|
+
const keys = routeTemplate.split('/').filter(Boolean);
|
|
25
|
+
return createNode(keys, 0, value, this.root);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Match a route path against the trie
|
|
29
|
+
* @param path - The route path, such as `/customers/c01`
|
|
30
|
+
*/
|
|
31
|
+
match(path) {
|
|
32
|
+
const keys = path.split('/').filter(Boolean);
|
|
33
|
+
const params = {};
|
|
34
|
+
const resolved = search(keys, 0, params, this.root);
|
|
35
|
+
if (resolved == null || !isNodeWithValue(resolved.node))
|
|
36
|
+
return undefined;
|
|
37
|
+
return {
|
|
38
|
+
node: resolved.node,
|
|
39
|
+
params: resolved.params,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* List all nodes with value of the trie
|
|
44
|
+
*/
|
|
45
|
+
list() {
|
|
46
|
+
const nodes = [];
|
|
47
|
+
traverse(this.root, node => {
|
|
48
|
+
nodes.push(node);
|
|
49
|
+
});
|
|
50
|
+
return nodes;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
exports.Trie = Trie;
|
|
54
|
+
function isNodeWithValue(node) {
|
|
55
|
+
return node.value != null;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Use depth-first preorder traversal to list all nodes with values
|
|
59
|
+
* @param root - Root node
|
|
60
|
+
* @param visitor - A function to process nodes with values
|
|
61
|
+
*/
|
|
62
|
+
function traverse(root, visitor) {
|
|
63
|
+
if (isNodeWithValue(root))
|
|
64
|
+
visitor(root);
|
|
65
|
+
for (const k in root.children) {
|
|
66
|
+
traverse(root.children[k], visitor);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Match the given key to one or more children of the parent node
|
|
71
|
+
* @param key - Key
|
|
72
|
+
* @param parent - Parent node
|
|
73
|
+
*/
|
|
74
|
+
function matchChildren(key, parent) {
|
|
75
|
+
const resolvedNodes = [];
|
|
76
|
+
// Match key literal first
|
|
77
|
+
let child = parent.children[key];
|
|
78
|
+
if (child) {
|
|
79
|
+
resolvedNodes.push({
|
|
80
|
+
node: child,
|
|
81
|
+
});
|
|
82
|
+
return resolvedNodes;
|
|
83
|
+
}
|
|
84
|
+
// Match templates
|
|
85
|
+
for (const k in parent.children) {
|
|
86
|
+
child = parent.children[k];
|
|
87
|
+
if (!child.names || !child.regexp)
|
|
88
|
+
continue;
|
|
89
|
+
const match = child.regexp.exec(key);
|
|
90
|
+
if (match) {
|
|
91
|
+
const resolved = { params: {}, node: child };
|
|
92
|
+
let i = 0;
|
|
93
|
+
for (const n of child.names) {
|
|
94
|
+
const val = match[++i];
|
|
95
|
+
resolved.params[n] = decodeURIComponent(val);
|
|
96
|
+
}
|
|
97
|
+
resolvedNodes.push(resolved);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
return resolvedNodes;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Search a sub list of keys against the parent node
|
|
104
|
+
* @param keys - An array of keys
|
|
105
|
+
* @param index - Starting index of the key list
|
|
106
|
+
* @param params - An object to receive resolved parameter values
|
|
107
|
+
* @param parent - Parent node
|
|
108
|
+
*/
|
|
109
|
+
function search(keys, index,
|
|
110
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
111
|
+
params, parent) {
|
|
112
|
+
const key = keys[index];
|
|
113
|
+
const resolved = { node: parent, params };
|
|
114
|
+
if (key === undefined)
|
|
115
|
+
return resolved;
|
|
116
|
+
const children = matchChildren(key, parent);
|
|
117
|
+
if (children.length === 0)
|
|
118
|
+
return undefined;
|
|
119
|
+
// There might be multiple matches, such as `/users/{id}` and `/users/{userId}`
|
|
120
|
+
for (const child of children) {
|
|
121
|
+
const result = search(keys, index + 1, params, child.node);
|
|
122
|
+
if (result && isNodeWithValue(result.node)) {
|
|
123
|
+
Object.assign(params, child.params);
|
|
124
|
+
return result;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
// no matches found
|
|
128
|
+
return undefined;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Create a node for a sub list of keys against the parent node
|
|
132
|
+
* @param keys - An array of keys
|
|
133
|
+
* @param index - Starting index of the key list
|
|
134
|
+
* @param value - Value of the node
|
|
135
|
+
* @param parent - Parent node
|
|
136
|
+
*/
|
|
137
|
+
function createNode(keys, index, value, parent) {
|
|
138
|
+
const key = keys[index];
|
|
139
|
+
if (key === undefined)
|
|
140
|
+
return parent;
|
|
141
|
+
const isLast = keys.length - 1 === index;
|
|
142
|
+
let child = parent.children[key];
|
|
143
|
+
if (child != null) {
|
|
144
|
+
// Found an existing node
|
|
145
|
+
if (isLast) {
|
|
146
|
+
if (child.value == null) {
|
|
147
|
+
child.value = value;
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
if (child.value !== value) {
|
|
151
|
+
throw new Error('Duplicate key found with different value: ' + keys.join('/'));
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
return createNode(keys, index + 1, value, child);
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Build a new node
|
|
159
|
+
*/
|
|
160
|
+
child = {
|
|
161
|
+
children: {},
|
|
162
|
+
key: key,
|
|
163
|
+
};
|
|
164
|
+
if (isLast) {
|
|
165
|
+
child.value = value;
|
|
166
|
+
}
|
|
167
|
+
// Check if the key has variables such as `{var}`
|
|
168
|
+
const path = openapi_path_1.toExpressPath(key);
|
|
169
|
+
const params = [];
|
|
170
|
+
const re = path_to_regexp_1.pathToRegexp(path, params);
|
|
171
|
+
if (params.length) {
|
|
172
|
+
child.names = params.map(p => `${p.name}`);
|
|
173
|
+
child.regexp = re;
|
|
174
|
+
}
|
|
175
|
+
// Add the node to the parent
|
|
176
|
+
parent.children[key] = child;
|
|
177
|
+
// Create nodes for rest of the keys
|
|
178
|
+
return createNode(keys, index + 1, value, child);
|
|
179
|
+
}
|
|
180
|
+
//# sourceMappingURL=trie.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trie.js","sourceRoot":"","sources":["../../src/router/trie.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,8BAA8B;AAC9B,+CAA+C;AAC/C,gEAAgE;;;AAEhE,mDAAiD;AAEjD,iDAA6C;AAoC7C;;;GAGG;AACH,MAAa,IAAI;IAAjB;QACW,SAAI,GAAY,EAAC,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAC,CAAC;IAuCnD,CAAC;IArCC;;;;OAIG;IACH,MAAM,CAAC,aAAqB,EAAE,KAAQ;QACpC,MAAM,IAAI,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACtD,OAAO,UAAU,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/C,CAAC;IAED;;;OAGG;IACH,KAAK,CACH,IAAY;QAEZ,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,EAAE,CAAC;QAClB,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACpD,IAAI,QAAQ,IAAI,IAAI,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,OAAO,SAAS,CAAC;QAC1E,OAAO;YACL,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,MAAM,EAAE,QAAQ,CAAC,MAAM;SACxB,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,IAAI;QACF,MAAM,KAAK,GAAuB,EAAE,CAAC;QACrC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE;YACzB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC,CAAC,CAAC;QACH,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AAxCD,oBAwCC;AAED,SAAS,eAAe,CAAI,IAAa;IACvC,OAAO,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC;AAC5B,CAAC;AAED;;;;GAIG;AACH,SAAS,QAAQ,CAAI,IAAa,EAAE,OAAyC;IAC3E,IAAI,eAAe,CAAC,IAAI,CAAC;QAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE;QAC7B,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;KACrC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,aAAa,CAAI,GAAW,EAAE,MAAe;IACpD,MAAM,aAAa,GAAsB,EAAE,CAAC;IAC5C,0BAA0B;IAC1B,IAAI,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,KAAK,EAAE;QACT,aAAa,CAAC,IAAI,CAAC;YACjB,IAAI,EAAE,KAAK;SACZ,CAAC,CAAC;QACH,OAAO,aAAa,CAAC;KACtB;IAED,kBAAkB;IAClB,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,EAAE;QAC/B,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC3B,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM;YAAE,SAAS;QAC5C,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,KAAK,EAAE;YACT,MAAM,QAAQ,GAAoB,EAAC,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAC,CAAC;YAC5D,IAAI,CAAC,GAAG,CAAC,CAAC;YACV,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE;gBAC3B,MAAM,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;gBACvB,QAAQ,CAAC,MAAO,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;aAC/C;YACD,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SAC9B;KACF;IACD,OAAO,aAAa,CAAC;AACvB,CAAC;AAED;;;;;;GAMG;AACH,SAAS,MAAM,CACb,IAAc,EACd,KAAa;AACb,8DAA8D;AAC9D,MAA6B,EAC7B,MAAe;IAEf,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;IACxB,MAAM,QAAQ,GAAoB,EAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAC,CAAC;IACzD,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC;IAEvC,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC5C,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC5C,+EAA+E;IAC/E,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE;QAC5B,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3D,IAAI,MAAM,IAAI,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;YAC1C,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;YACpC,OAAO,MAAM,CAAC;SACf;KACF;IACD,mBAAmB;IACnB,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;GAMG;AACH,SAAS,UAAU,CACjB,IAAc,EACd,KAAa,EACb,KAAQ,EACR,MAAe;IAEf,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;IACxB,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IAErC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,KAAK,KAAK,CAAC;IACzC,IAAI,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,KAAK,IAAI,IAAI,EAAE;QACjB,yBAAyB;QACzB,IAAI,MAAM,EAAE;YACV,IAAI,KAAK,CAAC,KAAK,IAAI,IAAI,EAAE;gBACvB,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;aACrB;iBAAM;gBACL,IAAI,KAAK,CAAC,KAAK,KAAK,KAAK,EAAE;oBACzB,MAAM,IAAI,KAAK,CACb,4CAA4C,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAC9D,CAAC;iBACH;aACF;SACF;QACD,OAAO,UAAU,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;KAClD;IAED;;OAEG;IACH,KAAK,GAAG;QACN,QAAQ,EAAE,EAAE;QACZ,GAAG,EAAE,GAAG;KACT,CAAC;IAEF,IAAI,MAAM,EAAE;QACV,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;KACrB;IAED,iDAAiD;IACjD,MAAM,IAAI,GAAG,4BAAa,CAAC,GAAG,CAAC,CAAC;IAChC,MAAM,MAAM,GAAU,EAAE,CAAC;IACzB,MAAM,EAAE,GAAG,6BAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAEtC,IAAI,MAAM,CAAC,MAAM,EAAE;QACjB,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAC3C,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC;KACnB;IAED,6BAA6B;IAC7B,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IAE7B,oCAAoC;IACpC,OAAO,UAAU,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AACnD,CAAC"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { FindRoute, InvokeMethod,
|
|
1
|
+
import { ValueOrPromise } from '@loopback/context';
|
|
2
|
+
import { InvokeMiddleware } from '@loopback/express';
|
|
3
|
+
import { RequestContext } from './request-context';
|
|
4
|
+
import { FindRoute, InvokeMethod, ParseParams, Reject, Send } from './types';
|
|
5
5
|
/**
|
|
6
6
|
* A sequence function is a function implementing a custom
|
|
7
7
|
* sequence of actions to handle an incoming request.
|
|
8
8
|
*/
|
|
9
|
-
export declare type SequenceFunction = (
|
|
9
|
+
export declare type SequenceFunction = (context: RequestContext, sequence: DefaultSequence) => ValueOrPromise<void>;
|
|
10
10
|
/**
|
|
11
11
|
* A sequence handler is a class implementing sequence of actions
|
|
12
12
|
* required to handle an incoming request.
|
|
@@ -15,14 +15,15 @@ export interface SequenceHandler {
|
|
|
15
15
|
/**
|
|
16
16
|
* Handle the request by running the configured sequence of actions.
|
|
17
17
|
*
|
|
18
|
-
* @param
|
|
19
|
-
*
|
|
18
|
+
* @param context - The request context: HTTP request and response objects,
|
|
19
|
+
* per-request IoC container and more.
|
|
20
20
|
*/
|
|
21
|
-
handle(
|
|
21
|
+
handle(context: RequestContext): Promise<void>;
|
|
22
22
|
}
|
|
23
23
|
/**
|
|
24
24
|
* The default implementation of SequenceHandler.
|
|
25
25
|
*
|
|
26
|
+
* @remarks
|
|
26
27
|
* This class implements default Sequence for the LoopBack framework.
|
|
27
28
|
* Default sequence is used if user hasn't defined their own Sequence
|
|
28
29
|
* for their application.
|
|
@@ -31,41 +32,45 @@ export interface SequenceHandler {
|
|
|
31
32
|
* when the API request comes in. User defines APIs in their Application
|
|
32
33
|
* Controller class.
|
|
33
34
|
*
|
|
35
|
+
* @example
|
|
34
36
|
* User can bind their own Sequence to app as shown below
|
|
35
37
|
* ```ts
|
|
36
38
|
* app.bind(CoreBindings.SEQUENCE).toClass(MySequence);
|
|
37
39
|
* ```
|
|
38
40
|
*/
|
|
39
41
|
export declare class DefaultSequence implements SequenceHandler {
|
|
40
|
-
ctx: Context;
|
|
41
42
|
protected findRoute: FindRoute;
|
|
42
43
|
protected parseParams: ParseParams;
|
|
43
44
|
protected invoke: InvokeMethod;
|
|
44
45
|
send: Send;
|
|
45
46
|
reject: Reject;
|
|
47
|
+
/**
|
|
48
|
+
* Optional invoker for registered middleware in a chain.
|
|
49
|
+
* To be injected via SequenceActions.INVOKE_MIDDLEWARE.
|
|
50
|
+
*/
|
|
51
|
+
protected invokeMiddleware: InvokeMiddleware;
|
|
46
52
|
/**
|
|
47
53
|
* Constructor: Injects findRoute, invokeMethod & logError
|
|
48
54
|
* methods as promises.
|
|
49
55
|
*
|
|
50
|
-
* @param
|
|
51
|
-
* RestBindings.Http.CONTEXT).
|
|
52
|
-
* @param {FindRoute} findRoute Finds the appropriate controller method,
|
|
56
|
+
* @param findRoute - Finds the appropriate controller method,
|
|
53
57
|
* spec and args for invocation (injected via SequenceActions.FIND_ROUTE).
|
|
54
|
-
* @param
|
|
58
|
+
* @param parseParams - The parameter parsing function (injected
|
|
55
59
|
* via SequenceActions.PARSE_PARAMS).
|
|
56
|
-
* @param
|
|
60
|
+
* @param invoke - Invokes the method specified by the route
|
|
57
61
|
* (injected via SequenceActions.INVOKE_METHOD).
|
|
58
|
-
* @param
|
|
62
|
+
* @param send - The action to merge the invoke result with the response
|
|
59
63
|
* (injected via SequenceActions.SEND)
|
|
60
|
-
* @param
|
|
64
|
+
* @param reject - The action to take if the invoke returns a rejected
|
|
61
65
|
* promise result (injected via SequenceActions.REJECT).
|
|
62
66
|
*/
|
|
63
|
-
constructor(
|
|
67
|
+
constructor(findRoute: FindRoute, parseParams: ParseParams, invoke: InvokeMethod, send: Send, reject: Reject);
|
|
64
68
|
/**
|
|
65
|
-
* Runs the default sequence. Given a request and response,
|
|
66
|
-
* sequence will produce a response or an error.
|
|
69
|
+
* Runs the default sequence. Given a handler context (request and response),
|
|
70
|
+
* running the sequence will produce a response or an error.
|
|
67
71
|
*
|
|
68
72
|
* Default sequence executes these steps
|
|
73
|
+
* - Executes middleware for CORS, OpenAPI spec endpoints
|
|
69
74
|
* - Finds the appropriate controller method, swagger spec
|
|
70
75
|
* and args for invocation
|
|
71
76
|
* - Parses HTTP request to get API argument list
|
|
@@ -73,9 +78,9 @@ export declare class DefaultSequence implements SequenceHandler {
|
|
|
73
78
|
* - Writes the result from API into the HTTP response
|
|
74
79
|
* - Error is caught and logged using 'logError' if any of the above steps
|
|
75
80
|
* in the sequence fails with an error.
|
|
76
|
-
*
|
|
77
|
-
* @param
|
|
78
|
-
*
|
|
81
|
+
*
|
|
82
|
+
* @param context - The request context: HTTP request and response objects,
|
|
83
|
+
* per-request IoC container and more.
|
|
79
84
|
*/
|
|
80
|
-
handle(
|
|
85
|
+
handle(context: RequestContext): Promise<void>;
|
|
81
86
|
}
|
package/dist/sequence.js
ADDED
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright IBM Corp. 2017,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.DefaultSequence = void 0;
|
|
8
|
+
const tslib_1 = require("tslib");
|
|
9
|
+
const debug = require('debug')('loopback:rest:sequence');
|
|
10
|
+
const context_1 = require("@loopback/context");
|
|
11
|
+
const keys_1 = require("./keys");
|
|
12
|
+
const SequenceActions = keys_1.RestBindings.SequenceActions;
|
|
13
|
+
/**
|
|
14
|
+
* The default implementation of SequenceHandler.
|
|
15
|
+
*
|
|
16
|
+
* @remarks
|
|
17
|
+
* This class implements default Sequence for the LoopBack framework.
|
|
18
|
+
* Default sequence is used if user hasn't defined their own Sequence
|
|
19
|
+
* for their application.
|
|
20
|
+
*
|
|
21
|
+
* Sequence constructor() and run() methods are invoked from [[http-handler]]
|
|
22
|
+
* when the API request comes in. User defines APIs in their Application
|
|
23
|
+
* Controller class.
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* User can bind their own Sequence to app as shown below
|
|
27
|
+
* ```ts
|
|
28
|
+
* app.bind(CoreBindings.SEQUENCE).toClass(MySequence);
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
let DefaultSequence = /** @class */ (() => {
|
|
32
|
+
let DefaultSequence = class DefaultSequence {
|
|
33
|
+
/**
|
|
34
|
+
* Constructor: Injects findRoute, invokeMethod & logError
|
|
35
|
+
* methods as promises.
|
|
36
|
+
*
|
|
37
|
+
* @param findRoute - Finds the appropriate controller method,
|
|
38
|
+
* spec and args for invocation (injected via SequenceActions.FIND_ROUTE).
|
|
39
|
+
* @param parseParams - The parameter parsing function (injected
|
|
40
|
+
* via SequenceActions.PARSE_PARAMS).
|
|
41
|
+
* @param invoke - Invokes the method specified by the route
|
|
42
|
+
* (injected via SequenceActions.INVOKE_METHOD).
|
|
43
|
+
* @param send - The action to merge the invoke result with the response
|
|
44
|
+
* (injected via SequenceActions.SEND)
|
|
45
|
+
* @param reject - The action to take if the invoke returns a rejected
|
|
46
|
+
* promise result (injected via SequenceActions.REJECT).
|
|
47
|
+
*/
|
|
48
|
+
constructor(findRoute, parseParams, invoke, send, reject) {
|
|
49
|
+
this.findRoute = findRoute;
|
|
50
|
+
this.parseParams = parseParams;
|
|
51
|
+
this.invoke = invoke;
|
|
52
|
+
this.send = send;
|
|
53
|
+
this.reject = reject;
|
|
54
|
+
/**
|
|
55
|
+
* Optional invoker for registered middleware in a chain.
|
|
56
|
+
* To be injected via SequenceActions.INVOKE_MIDDLEWARE.
|
|
57
|
+
*/
|
|
58
|
+
this.invokeMiddleware = () => false;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Runs the default sequence. Given a handler context (request and response),
|
|
62
|
+
* running the sequence will produce a response or an error.
|
|
63
|
+
*
|
|
64
|
+
* Default sequence executes these steps
|
|
65
|
+
* - Executes middleware for CORS, OpenAPI spec endpoints
|
|
66
|
+
* - Finds the appropriate controller method, swagger spec
|
|
67
|
+
* and args for invocation
|
|
68
|
+
* - Parses HTTP request to get API argument list
|
|
69
|
+
* - Invokes the API which is defined in the Application Controller
|
|
70
|
+
* - Writes the result from API into the HTTP response
|
|
71
|
+
* - Error is caught and logged using 'logError' if any of the above steps
|
|
72
|
+
* in the sequence fails with an error.
|
|
73
|
+
*
|
|
74
|
+
* @param context - The request context: HTTP request and response objects,
|
|
75
|
+
* per-request IoC container and more.
|
|
76
|
+
*/
|
|
77
|
+
async handle(context) {
|
|
78
|
+
try {
|
|
79
|
+
const { request, response } = context;
|
|
80
|
+
// Invoke registered Express middleware
|
|
81
|
+
const finished = await this.invokeMiddleware(context);
|
|
82
|
+
if (finished) {
|
|
83
|
+
// The response been produced by the middleware chain
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
const route = this.findRoute(request);
|
|
87
|
+
const args = await this.parseParams(request, route);
|
|
88
|
+
const result = await this.invoke(route, args);
|
|
89
|
+
debug('%s result -', route.describe(), result);
|
|
90
|
+
this.send(response, result);
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
this.reject(context, error);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
tslib_1.__decorate([
|
|
98
|
+
context_1.inject(SequenceActions.INVOKE_MIDDLEWARE, { optional: true }),
|
|
99
|
+
tslib_1.__metadata("design:type", Function)
|
|
100
|
+
], DefaultSequence.prototype, "invokeMiddleware", void 0);
|
|
101
|
+
DefaultSequence = tslib_1.__decorate([
|
|
102
|
+
tslib_1.__param(0, context_1.inject(SequenceActions.FIND_ROUTE)),
|
|
103
|
+
tslib_1.__param(1, context_1.inject(SequenceActions.PARSE_PARAMS)),
|
|
104
|
+
tslib_1.__param(2, context_1.inject(SequenceActions.INVOKE_METHOD)),
|
|
105
|
+
tslib_1.__param(3, context_1.inject(SequenceActions.SEND)),
|
|
106
|
+
tslib_1.__param(4, context_1.inject(SequenceActions.REJECT)),
|
|
107
|
+
tslib_1.__metadata("design:paramtypes", [Function, Function, Function, Function, Function])
|
|
108
|
+
], DefaultSequence);
|
|
109
|
+
return DefaultSequence;
|
|
110
|
+
})();
|
|
111
|
+
exports.DefaultSequence = DefaultSequence;
|
|
112
|
+
//# sourceMappingURL=sequence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sequence.js","sourceRoot":"","sources":["../src/sequence.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,8BAA8B;AAC9B,+CAA+C;AAC/C,gEAAgE;;;;AAEhE,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,wBAAwB,CAAC,CAAC;AACzD,+CAAyD;AAEzD,iCAAoC;AAIpC,MAAM,eAAe,GAAG,mBAAY,CAAC,eAAe,CAAC;AAyBrD;;;;;;;;;;;;;;;;;GAiBG;AACH;IAAA,IAAa,eAAe,GAA5B,MAAa,eAAe;QAQ1B;;;;;;;;;;;;;;WAcG;QACH,YACgD,SAAoB,EAClB,WAAwB,EACvB,MAAoB,EAChC,IAAU,EACR,MAAc;YAJP,cAAS,GAAT,SAAS,CAAW;YAClB,gBAAW,GAAX,WAAW,CAAa;YACvB,WAAM,GAAN,MAAM,CAAc;YAChC,SAAI,GAAJ,IAAI,CAAM;YACR,WAAM,GAAN,MAAM,CAAQ;YA3BvD;;;eAGG;YAEO,qBAAgB,GAAqB,GAAG,EAAE,CAAC,KAAK,CAAC;QAuBxD,CAAC;QAEJ;;;;;;;;;;;;;;;;WAgBG;QACH,KAAK,CAAC,MAAM,CAAC,OAAuB;YAClC,IAAI;gBACF,MAAM,EAAC,OAAO,EAAE,QAAQ,EAAC,GAAG,OAAO,CAAC;gBACpC,uCAAuC;gBACvC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;gBACtD,IAAI,QAAQ,EAAE;oBACZ,qDAAqD;oBACrD,OAAO;iBACR;gBACD,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;gBACtC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBACpD,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,QAAQ,EAAE,MAAM,CAAC,CAAC;aAC7B;YAAC,OAAO,KAAK,EAAE;gBACd,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;aAC7B;QACH,CAAC;KACF,CAAA;IA7DC;QADC,gBAAM,CAAC,eAAe,CAAC,iBAAiB,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC;;6DACD;IANhD,eAAe;QAwBvB,mBAAA,gBAAM,CAAC,eAAe,CAAC,UAAU,CAAC,CAAA;QAClC,mBAAA,gBAAM,CAAC,eAAe,CAAC,YAAY,CAAC,CAAA;QACpC,mBAAA,gBAAM,CAAC,eAAe,CAAC,aAAa,CAAC,CAAA;QACrC,mBAAA,gBAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;QAC5B,mBAAA,gBAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAA;;OA5BtB,eAAe,CAmE3B;IAAD,sBAAC;KAAA;AAnEY,0CAAe"}
|