@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 @@
|
|
|
1
|
+
{"version":3,"file":"rest.server.js","sourceRoot":"","sources":["../src/rest.server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Context, InvocationSource } from '@loopback/context';
|
|
2
|
+
import { OperationObject } from '@loopback/openapi-v3';
|
|
3
|
+
import { OperationArgs, OperationRetval } from '../types';
|
|
4
|
+
import { RouteEntry } from './route-entry';
|
|
5
|
+
/**
|
|
6
|
+
* Base implementation of RouteEntry
|
|
7
|
+
*/
|
|
8
|
+
export declare abstract class BaseRoute implements RouteEntry {
|
|
9
|
+
readonly path: string;
|
|
10
|
+
readonly spec: OperationObject;
|
|
11
|
+
readonly verb: string;
|
|
12
|
+
/**
|
|
13
|
+
* Construct a new route
|
|
14
|
+
* @param verb - http verb
|
|
15
|
+
* @param path - http request path pattern
|
|
16
|
+
* @param spec - OpenAPI operation spec
|
|
17
|
+
*/
|
|
18
|
+
constructor(verb: string, path: string, spec: OperationObject);
|
|
19
|
+
abstract updateBindings(requestContext: Context): void;
|
|
20
|
+
abstract invokeHandler(requestContext: Context, args: OperationArgs): Promise<OperationRetval>;
|
|
21
|
+
describe(): string;
|
|
22
|
+
toString(): string;
|
|
23
|
+
}
|
|
24
|
+
export declare class RouteSource implements InvocationSource<RouteEntry> {
|
|
25
|
+
readonly value: RouteEntry;
|
|
26
|
+
type: string;
|
|
27
|
+
constructor(value: RouteEntry);
|
|
28
|
+
toString(): string;
|
|
29
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright IBM Corp. 2018,2020. All Rights Reserved.
|
|
3
|
+
// Node module: @loopback/rest
|
|
4
|
+
// This file is licensed under the MIT License.
|
|
5
|
+
// License text available at https://opensource.org/licenses/MIT
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.RouteSource = exports.BaseRoute = void 0;
|
|
8
|
+
/**
|
|
9
|
+
* Base implementation of RouteEntry
|
|
10
|
+
*/
|
|
11
|
+
class BaseRoute {
|
|
12
|
+
/**
|
|
13
|
+
* Construct a new route
|
|
14
|
+
* @param verb - http verb
|
|
15
|
+
* @param path - http request path pattern
|
|
16
|
+
* @param spec - OpenAPI operation spec
|
|
17
|
+
*/
|
|
18
|
+
constructor(verb, path, spec) {
|
|
19
|
+
this.path = path;
|
|
20
|
+
this.spec = spec;
|
|
21
|
+
this.verb = verb.toLowerCase();
|
|
22
|
+
}
|
|
23
|
+
describe() {
|
|
24
|
+
return `"${this.verb} ${this.path}"`;
|
|
25
|
+
}
|
|
26
|
+
toString() {
|
|
27
|
+
return `${this.constructor.name} - ${this.verb} ${this.path}`;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
exports.BaseRoute = BaseRoute;
|
|
31
|
+
class RouteSource {
|
|
32
|
+
constructor(value) {
|
|
33
|
+
this.value = value;
|
|
34
|
+
this.type = 'route';
|
|
35
|
+
}
|
|
36
|
+
toString() {
|
|
37
|
+
return `${this.value.verb} ${this.value.path}`;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
exports.RouteSource = RouteSource;
|
|
41
|
+
//# sourceMappingURL=base-route.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-route.js","sourceRoot":"","sources":["../../src/router/base-route.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,8BAA8B;AAC9B,+CAA+C;AAC/C,gEAAgE;;;AAOhE;;GAEG;AACH,MAAsB,SAAS;IAG7B;;;;;OAKG;IACH,YACE,IAAY,EACI,IAAY,EACZ,IAAqB;QADrB,SAAI,GAAJ,IAAI,CAAQ;QACZ,SAAI,GAAJ,IAAI,CAAiB;QAErC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IACjC,CAAC;IASD,QAAQ;QACN,OAAO,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC;IACvC,CAAC;IAED,QAAQ;QACN,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;IAChE,CAAC;CACF;AA/BD,8BA+BC;AAED,MAAa,WAAW;IAEtB,YAAqB,KAAiB;QAAjB,UAAK,GAAL,KAAK,CAAY;QADtC,SAAI,GAAG,OAAO,CAAC;IAC0B,CAAC;IAC1C,QAAQ;QACN,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IACjD,CAAC;CACF;AAND,kCAMC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { Constructor, Context, ValueOrPromise } from '@loopback/context';
|
|
2
|
+
import { ControllerSpec, OperationObject } from '@loopback/openapi-v3';
|
|
3
|
+
import { OperationArgs, OperationRetval } from '../types';
|
|
4
|
+
import { BaseRoute } from './base-route';
|
|
5
|
+
export declare type ControllerInstance = {
|
|
6
|
+
[name: string]: any;
|
|
7
|
+
} & object;
|
|
8
|
+
/**
|
|
9
|
+
* A factory function to create controller instances synchronously or
|
|
10
|
+
* asynchronously
|
|
11
|
+
*/
|
|
12
|
+
export declare type ControllerFactory<T extends ControllerInstance> = (ctx: Context) => ValueOrPromise<T>;
|
|
13
|
+
/**
|
|
14
|
+
* Controller class
|
|
15
|
+
*/
|
|
16
|
+
export declare type ControllerClass<T extends ControllerInstance> = Constructor<T>;
|
|
17
|
+
/**
|
|
18
|
+
* A route backed by a controller
|
|
19
|
+
*/
|
|
20
|
+
export declare class ControllerRoute<T> extends BaseRoute {
|
|
21
|
+
protected readonly _controllerCtor: ControllerClass<T>;
|
|
22
|
+
protected readonly _controllerName: string;
|
|
23
|
+
protected readonly _methodName: string;
|
|
24
|
+
protected readonly _controllerFactory: ControllerFactory<T>;
|
|
25
|
+
/**
|
|
26
|
+
* Construct a controller based route
|
|
27
|
+
* @param verb - http verb
|
|
28
|
+
* @param path - http request path
|
|
29
|
+
* @param spec - OpenAPI operation spec
|
|
30
|
+
* @param controllerCtor - Controller class
|
|
31
|
+
* @param controllerFactory - A factory function to create a controller instance
|
|
32
|
+
* @param methodName - Controller method name, default to `x-operation-name`
|
|
33
|
+
*/
|
|
34
|
+
constructor(verb: string, path: string, spec: OperationObject, controllerCtor: ControllerClass<T>, controllerFactory?: ControllerFactory<T>, methodName?: string);
|
|
35
|
+
describe(): string;
|
|
36
|
+
updateBindings(requestContext: Context): void;
|
|
37
|
+
invokeHandler(requestContext: Context, args: OperationArgs): Promise<OperationRetval>;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Create a controller factory function for a given binding key
|
|
41
|
+
* @param key - Binding key
|
|
42
|
+
*/
|
|
43
|
+
export declare function createControllerFactoryForBinding<T>(key: string): ControllerFactory<T>;
|
|
44
|
+
/**
|
|
45
|
+
* Create a controller factory function for a given class
|
|
46
|
+
* @param controllerCtor - Controller class
|
|
47
|
+
*/
|
|
48
|
+
export declare function createControllerFactoryForClass<T>(controllerCtor: ControllerClass<T>): ControllerFactory<T>;
|
|
49
|
+
/**
|
|
50
|
+
* Create a controller factory function for a given instance
|
|
51
|
+
* @param controllerCtor - Controller instance
|
|
52
|
+
*/
|
|
53
|
+
export declare function createControllerFactoryForInstance<T>(controllerInst: T): ControllerFactory<T>;
|
|
54
|
+
/**
|
|
55
|
+
* Create routes for a controller with the given spec
|
|
56
|
+
* @param spec - Controller spec
|
|
57
|
+
* @param controllerCtor - Controller class
|
|
58
|
+
* @param controllerFactory - Controller factory
|
|
59
|
+
*/
|
|
60
|
+
export declare function createRoutesForController<T>(spec: ControllerSpec, controllerCtor: ControllerClass<T>, controllerFactory?: ControllerFactory<T>): ControllerRoute<T>[];
|
|
61
|
+
export declare function joinPath(basePath: string, path: string): string;
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright IBM Corp. 2018,2020. All Rights Reserved.
|
|
3
|
+
// Node module: @loopback/rest
|
|
4
|
+
// This file is licensed under the MIT License.
|
|
5
|
+
// License text available at https://opensource.org/licenses/MIT
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.joinPath = exports.createRoutesForController = exports.createControllerFactoryForInstance = exports.createControllerFactoryForClass = exports.createControllerFactoryForBinding = exports.ControllerRoute = void 0;
|
|
8
|
+
const tslib_1 = require("tslib");
|
|
9
|
+
const context_1 = require("@loopback/context");
|
|
10
|
+
const core_1 = require("@loopback/core");
|
|
11
|
+
const assert_1 = tslib_1.__importDefault(require("assert"));
|
|
12
|
+
const debug_1 = tslib_1.__importDefault(require("debug"));
|
|
13
|
+
const http_errors_1 = tslib_1.__importDefault(require("http-errors"));
|
|
14
|
+
const util_1 = require("util");
|
|
15
|
+
const keys_1 = require("../keys");
|
|
16
|
+
const base_route_1 = require("./base-route");
|
|
17
|
+
const debug = debug_1.default('loopback:rest:controller-route');
|
|
18
|
+
/**
|
|
19
|
+
* A route backed by a controller
|
|
20
|
+
*/
|
|
21
|
+
class ControllerRoute extends base_route_1.BaseRoute {
|
|
22
|
+
/**
|
|
23
|
+
* Construct a controller based route
|
|
24
|
+
* @param verb - http verb
|
|
25
|
+
* @param path - http request path
|
|
26
|
+
* @param spec - OpenAPI operation spec
|
|
27
|
+
* @param controllerCtor - Controller class
|
|
28
|
+
* @param controllerFactory - A factory function to create a controller instance
|
|
29
|
+
* @param methodName - Controller method name, default to `x-operation-name`
|
|
30
|
+
*/
|
|
31
|
+
constructor(verb, path, spec, controllerCtor, controllerFactory, methodName) {
|
|
32
|
+
const controllerName = spec['x-controller-name'] || controllerCtor.name;
|
|
33
|
+
methodName = methodName !== null && methodName !== void 0 ? methodName : spec['x-operation-name'];
|
|
34
|
+
if (!methodName) {
|
|
35
|
+
throw new Error('methodName must be provided either via the ControllerRoute argument ' +
|
|
36
|
+
'or via "x-operation-name" extension field in OpenAPI spec. ' +
|
|
37
|
+
`Operation: "${verb} ${path}" ` +
|
|
38
|
+
`Controller: ${controllerName}.`);
|
|
39
|
+
}
|
|
40
|
+
super(verb, path,
|
|
41
|
+
// Add x-controller-name and x-operation-name if not present
|
|
42
|
+
Object.assign({
|
|
43
|
+
'x-controller-name': controllerName,
|
|
44
|
+
'x-operation-name': methodName,
|
|
45
|
+
tags: [controllerName],
|
|
46
|
+
}, spec));
|
|
47
|
+
this._controllerFactory = controllerFactory !== null && controllerFactory !== void 0 ? controllerFactory : createControllerFactoryForClass(controllerCtor);
|
|
48
|
+
this._controllerCtor = controllerCtor;
|
|
49
|
+
this._controllerName = controllerName || controllerCtor.name;
|
|
50
|
+
this._methodName = methodName;
|
|
51
|
+
}
|
|
52
|
+
describe() {
|
|
53
|
+
return `${this._controllerName}.${this._methodName}`;
|
|
54
|
+
}
|
|
55
|
+
updateBindings(requestContext) {
|
|
56
|
+
/*
|
|
57
|
+
* Bind current controller to the request context in `SINGLETON` scope.
|
|
58
|
+
* Within the same request, we always get the same instance of the
|
|
59
|
+
* current controller when `requestContext.get(CoreBindings.CONTROLLER_CURRENT)`
|
|
60
|
+
* is invoked.
|
|
61
|
+
*
|
|
62
|
+
* Please note the controller class itself can be bound to other scopes,
|
|
63
|
+
* such as SINGLETON or TRANSIENT (default) in the application or server
|
|
64
|
+
* context.
|
|
65
|
+
*
|
|
66
|
+
* - SINGLETON: all requests share the same instance of a given controller
|
|
67
|
+
* - TRANSIENT: each request has its own instance of a given controller
|
|
68
|
+
*/
|
|
69
|
+
requestContext
|
|
70
|
+
.bind(core_1.CoreBindings.CONTROLLER_CURRENT)
|
|
71
|
+
.toDynamicValue(() => this._controllerFactory(requestContext))
|
|
72
|
+
.inScope(context_1.BindingScope.SINGLETON);
|
|
73
|
+
requestContext.bind(core_1.CoreBindings.CONTROLLER_CLASS).to(this._controllerCtor);
|
|
74
|
+
requestContext
|
|
75
|
+
.bind(core_1.CoreBindings.CONTROLLER_METHOD_NAME)
|
|
76
|
+
.to(this._methodName);
|
|
77
|
+
requestContext.bind(keys_1.RestBindings.OPERATION_SPEC_CURRENT).to(this.spec);
|
|
78
|
+
}
|
|
79
|
+
async invokeHandler(requestContext, args) {
|
|
80
|
+
const controller = await requestContext.get('controller.current');
|
|
81
|
+
if (typeof controller[this._methodName] !== 'function') {
|
|
82
|
+
throw new http_errors_1.default.NotFound(`Controller method not found: ${this.describe()}`);
|
|
83
|
+
}
|
|
84
|
+
// Invoke the method with dependency injection
|
|
85
|
+
return context_1.invokeMethod(controller, this._methodName, requestContext, args, {
|
|
86
|
+
source: new base_route_1.RouteSource(this),
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
exports.ControllerRoute = ControllerRoute;
|
|
91
|
+
/**
|
|
92
|
+
* Create a controller factory function for a given binding key
|
|
93
|
+
* @param key - Binding key
|
|
94
|
+
*/
|
|
95
|
+
function createControllerFactoryForBinding(key) {
|
|
96
|
+
return ctx => ctx.get(key);
|
|
97
|
+
}
|
|
98
|
+
exports.createControllerFactoryForBinding = createControllerFactoryForBinding;
|
|
99
|
+
/**
|
|
100
|
+
* Create a controller factory function for a given class
|
|
101
|
+
* @param controllerCtor - Controller class
|
|
102
|
+
*/
|
|
103
|
+
function createControllerFactoryForClass(controllerCtor) {
|
|
104
|
+
return async (ctx) => {
|
|
105
|
+
// By default, we get an instance of the controller from the context
|
|
106
|
+
// using `controllers.<controllerName>` as the key
|
|
107
|
+
let inst = await ctx.get(`controllers.${controllerCtor.name}`, {
|
|
108
|
+
optional: true,
|
|
109
|
+
});
|
|
110
|
+
if (inst === undefined) {
|
|
111
|
+
inst = await context_1.instantiateClass(controllerCtor, ctx);
|
|
112
|
+
}
|
|
113
|
+
return inst;
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
exports.createControllerFactoryForClass = createControllerFactoryForClass;
|
|
117
|
+
/**
|
|
118
|
+
* Create a controller factory function for a given instance
|
|
119
|
+
* @param controllerCtor - Controller instance
|
|
120
|
+
*/
|
|
121
|
+
function createControllerFactoryForInstance(controllerInst) {
|
|
122
|
+
return ctx => controllerInst;
|
|
123
|
+
}
|
|
124
|
+
exports.createControllerFactoryForInstance = createControllerFactoryForInstance;
|
|
125
|
+
/**
|
|
126
|
+
* Create routes for a controller with the given spec
|
|
127
|
+
* @param spec - Controller spec
|
|
128
|
+
* @param controllerCtor - Controller class
|
|
129
|
+
* @param controllerFactory - Controller factory
|
|
130
|
+
*/
|
|
131
|
+
function createRoutesForController(spec, controllerCtor, controllerFactory) {
|
|
132
|
+
var _a;
|
|
133
|
+
const routes = [];
|
|
134
|
+
assert_1.default(typeof spec === 'object' && !!spec, 'API specification must be a non-null object');
|
|
135
|
+
if (!spec.paths || !Object.keys(spec.paths).length) {
|
|
136
|
+
return routes;
|
|
137
|
+
}
|
|
138
|
+
debug('Creating route for controller with API %s', util_1.inspect(spec, { depth: null }));
|
|
139
|
+
const basePath = (_a = spec.basePath) !== null && _a !== void 0 ? _a : '/';
|
|
140
|
+
for (const p in spec.paths) {
|
|
141
|
+
for (const verb in spec.paths[p]) {
|
|
142
|
+
const opSpec = spec.paths[p][verb];
|
|
143
|
+
const fullPath = joinPath(basePath, p);
|
|
144
|
+
const route = new ControllerRoute(verb, fullPath, opSpec, controllerCtor, controllerFactory);
|
|
145
|
+
routes.push(route);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
return routes;
|
|
149
|
+
}
|
|
150
|
+
exports.createRoutesForController = createRoutesForController;
|
|
151
|
+
function joinPath(basePath, path) {
|
|
152
|
+
const fullPath = [basePath, path]
|
|
153
|
+
.join('/') // Join by /
|
|
154
|
+
.replace(/(\/){2,}/g, '/') // Remove extra /
|
|
155
|
+
.replace(/\/$/, '') // Remove trailing /
|
|
156
|
+
.replace(/^(\/)?/, '/'); // Add leading /
|
|
157
|
+
return fullPath;
|
|
158
|
+
}
|
|
159
|
+
exports.joinPath = joinPath;
|
|
160
|
+
//# sourceMappingURL=controller-route.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"controller-route.js","sourceRoot":"","sources":["../../src/router/controller-route.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,8BAA8B;AAC9B,+CAA+C;AAC/C,gEAAgE;;;;AAEhE,+CAO2B;AAC3B,yCAA4C;AAE5C,4DAA4B;AAC5B,0DAAiC;AACjC,sEAAqC;AACrC,+BAA6B;AAC7B,kCAAqC;AAErC,6CAAoD;AAEpD,MAAM,KAAK,GAAG,eAAY,CAAC,gCAAgC,CAAC,CAAC;AAoB7D;;GAEG;AACH,MAAa,eAAmB,SAAQ,sBAAS;IAM/C;;;;;;;;OAQG;IACH,YACE,IAAY,EACZ,IAAY,EACZ,IAAqB,EACrB,cAAkC,EAClC,iBAAwC,EACxC,UAAmB;QAEnB,MAAM,cAAc,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC;QACxE,UAAU,GAAG,UAAU,aAAV,UAAU,cAAV,UAAU,GAAI,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAEpD,IAAI,CAAC,UAAU,EAAE;YACf,MAAM,IAAI,KAAK,CACb,sEAAsE;gBACpE,6DAA6D;gBAC7D,eAAe,IAAI,IAAI,IAAI,IAAI;gBAC/B,eAAe,cAAc,GAAG,CACnC,CAAC;SACH;QAED,KAAK,CACH,IAAI,EACJ,IAAI;QACJ,4DAA4D;QAC5D,MAAM,CAAC,MAAM,CACX;YACE,mBAAmB,EAAE,cAAc;YACnC,kBAAkB,EAAE,UAAU;YAC9B,IAAI,EAAE,CAAC,cAAc,CAAC;SACvB,EACD,IAAI,CACL,CACF,CAAC;QAEF,IAAI,CAAC,kBAAkB,GACrB,iBAAiB,aAAjB,iBAAiB,cAAjB,iBAAiB,GAAI,+BAA+B,CAAC,cAAc,CAAC,CAAC;QACvE,IAAI,CAAC,eAAe,GAAG,cAAc,CAAC;QACtC,IAAI,CAAC,eAAe,GAAG,cAAc,IAAI,cAAc,CAAC,IAAI,CAAC;QAC7D,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;IAChC,CAAC;IAED,QAAQ;QACN,OAAO,GAAG,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;IACvD,CAAC;IAED,cAAc,CAAC,cAAuB;QACpC;;;;;;;;;;;;WAYG;QACH,cAAc;aACX,IAAI,CAAC,mBAAY,CAAC,kBAAkB,CAAC;aACrC,cAAc,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC;aAC7D,OAAO,CAAC,sBAAY,CAAC,SAAS,CAAC,CAAC;QACnC,cAAc,CAAC,IAAI,CAAC,mBAAY,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC5E,cAAc;aACX,IAAI,CAAC,mBAAY,CAAC,sBAAsB,CAAC;aACzC,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACxB,cAAc,CAAC,IAAI,CAAC,mBAAY,CAAC,sBAAsB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzE,CAAC;IAED,KAAK,CAAC,aAAa,CACjB,cAAuB,EACvB,IAAmB;QAEnB,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,GAAG,CACzC,oBAAoB,CACrB,CAAC;QACF,IAAI,OAAO,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,UAAU,EAAE;YACtD,MAAM,IAAI,qBAAU,CAAC,QAAQ,CAC3B,gCAAgC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAClD,CAAC;SACH;QACD,8CAA8C;QAC9C,OAAO,sBAAY,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,EAAE,cAAc,EAAE,IAAI,EAAE;YACtE,MAAM,EAAE,IAAI,wBAAW,CAAC,IAAI,CAAC;SAC9B,CAAC,CAAC;IACL,CAAC;CACF;AAtGD,0CAsGC;AAED;;;GAGG;AACH,SAAgB,iCAAiC,CAC/C,GAAW;IAEX,OAAO,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAI,GAAG,CAAC,CAAC;AAChC,CAAC;AAJD,8EAIC;AAED;;;GAGG;AACH,SAAgB,+BAA+B,CAC7C,cAAkC;IAElC,OAAO,KAAK,EAAC,GAAG,EAAC,EAAE;QACjB,oEAAoE;QACpE,kDAAkD;QAClD,IAAI,IAAI,GAAG,MAAM,GAAG,CAAC,GAAG,CAAI,eAAe,cAAc,CAAC,IAAI,EAAE,EAAE;YAChE,QAAQ,EAAE,IAAI;SACf,CAAC,CAAC;QACH,IAAI,IAAI,KAAK,SAAS,EAAE;YACtB,IAAI,GAAG,MAAM,0BAAgB,CAAI,cAAc,EAAE,GAAG,CAAC,CAAC;SACvD;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;AACJ,CAAC;AAdD,0EAcC;AAED;;;GAGG;AACH,SAAgB,kCAAkC,CAChD,cAAiB;IAEjB,OAAO,GAAG,CAAC,EAAE,CAAC,cAAc,CAAC;AAC/B,CAAC;AAJD,gFAIC;AAED;;;;;GAKG;AACH,SAAgB,yBAAyB,CACvC,IAAoB,EACpB,cAAkC,EAClC,iBAAwC;;IAExC,MAAM,MAAM,GAAyB,EAAE,CAAC;IACxC,gBAAM,CACJ,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,EAClC,6CAA6C,CAC9C,CAAC;IACF,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE;QAClD,OAAO,MAAM,CAAC;KACf;IAED,KAAK,CACH,2CAA2C,EAC3C,cAAO,CAAC,IAAI,EAAE,EAAC,KAAK,EAAE,IAAI,EAAC,CAAC,CAC7B,CAAC;IAEF,MAAM,QAAQ,SAAG,IAAI,CAAC,QAAQ,mCAAI,GAAG,CAAC;IACtC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE;QAC1B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;YAChC,MAAM,MAAM,GAAoB,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACpD,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;YACvC,MAAM,KAAK,GAAG,IAAI,eAAe,CAC/B,IAAI,EACJ,QAAQ,EACR,MAAM,EACN,cAAc,EACd,iBAAiB,CAClB,CAAC;YACF,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACpB;KACF;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAnCD,8DAmCC;AAED,SAAgB,QAAQ,CAAC,QAAgB,EAAE,IAAY;IACrD,MAAM,QAAQ,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC;SAC9B,IAAI,CAAC,GAAG,CAAC,CAAC,YAAY;SACtB,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,iBAAiB;SAC3C,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,oBAAoB;SACvC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,gBAAgB;IAC3C,OAAO,QAAQ,CAAC;AAClB,CAAC;AAPD,4BAOC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { ExpressRequestHandler, Request } from '@loopback/express';
|
|
2
|
+
import { OpenApiSpec } from '@loopback/openapi-v3';
|
|
3
|
+
import express from 'express';
|
|
4
|
+
import { PathParams } from 'express-serve-static-core';
|
|
5
|
+
import { ServeStaticOptions } from 'serve-static';
|
|
6
|
+
import { ResolvedRoute } from './route-entry';
|
|
7
|
+
import { RouterSpec } from './router-spec';
|
|
8
|
+
/**
|
|
9
|
+
* A registry of external, Express-style routes. These routes are invoked
|
|
10
|
+
* _after_ no LB4 route (controller or handler based) matched the incoming
|
|
11
|
+
* request.
|
|
12
|
+
*
|
|
13
|
+
* @internal
|
|
14
|
+
*/
|
|
15
|
+
export declare class ExternalExpressRoutes {
|
|
16
|
+
protected _externalRoutes: express.Router;
|
|
17
|
+
protected _staticRoutes: express.Router;
|
|
18
|
+
protected _specForExternalRoutes: RouterSpec;
|
|
19
|
+
get routerSpec(): RouterSpec;
|
|
20
|
+
registerAssets(path: PathParams, rootDir: string, options?: ServeStaticOptions): void;
|
|
21
|
+
mountRouter(basePath: string, router: ExpressRequestHandler, spec?: RouterSpec): void;
|
|
22
|
+
find(request: Request): ResolvedRoute;
|
|
23
|
+
}
|
|
24
|
+
export declare function rebaseOpenApiSpec<T extends Partial<OpenApiSpec>>(spec: T, basePath: string): T;
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright IBM Corp. 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.rebaseOpenApiSpec = exports.ExternalExpressRoutes = void 0;
|
|
8
|
+
const tslib_1 = require("tslib");
|
|
9
|
+
const express_1 = require("@loopback/express");
|
|
10
|
+
const express_2 = tslib_1.__importDefault(require("express"));
|
|
11
|
+
const http_errors_1 = tslib_1.__importDefault(require("http-errors"));
|
|
12
|
+
const router_spec_1 = require("./router-spec");
|
|
13
|
+
/**
|
|
14
|
+
* A registry of external, Express-style routes. These routes are invoked
|
|
15
|
+
* _after_ no LB4 route (controller or handler based) matched the incoming
|
|
16
|
+
* request.
|
|
17
|
+
*
|
|
18
|
+
* @internal
|
|
19
|
+
*/
|
|
20
|
+
class ExternalExpressRoutes {
|
|
21
|
+
constructor() {
|
|
22
|
+
this._externalRoutes = express_2.default.Router();
|
|
23
|
+
this._staticRoutes = express_2.default.Router();
|
|
24
|
+
this._specForExternalRoutes = { paths: {} };
|
|
25
|
+
}
|
|
26
|
+
get routerSpec() {
|
|
27
|
+
return this._specForExternalRoutes;
|
|
28
|
+
}
|
|
29
|
+
registerAssets(path, rootDir, options) {
|
|
30
|
+
this._staticRoutes.use(path, express_2.default.static(rootDir, options));
|
|
31
|
+
}
|
|
32
|
+
mountRouter(basePath, router, spec = { paths: {} }) {
|
|
33
|
+
this._externalRoutes.use(basePath, router);
|
|
34
|
+
spec = rebaseOpenApiSpec(spec, basePath);
|
|
35
|
+
router_spec_1.assignRouterSpec(this._specForExternalRoutes, spec);
|
|
36
|
+
}
|
|
37
|
+
find(request) {
|
|
38
|
+
return new ExternalRoute(this._externalRoutes, this._staticRoutes, request.method, request.url, {
|
|
39
|
+
description: 'External route or a static asset',
|
|
40
|
+
'x-visibility': 'undocumented',
|
|
41
|
+
responses: {},
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
exports.ExternalExpressRoutes = ExternalExpressRoutes;
|
|
46
|
+
class ExternalRoute {
|
|
47
|
+
constructor(_externalRouter, _staticAssets, verb, path, spec) {
|
|
48
|
+
this._externalRouter = _externalRouter;
|
|
49
|
+
this._staticAssets = _staticAssets;
|
|
50
|
+
this.verb = verb;
|
|
51
|
+
this.path = path;
|
|
52
|
+
this.spec = spec;
|
|
53
|
+
// ResolvedRoute API
|
|
54
|
+
this.pathParams = [];
|
|
55
|
+
this.schemas = {};
|
|
56
|
+
}
|
|
57
|
+
updateBindings(requestContext) {
|
|
58
|
+
// no-op
|
|
59
|
+
}
|
|
60
|
+
async invokeHandler({ request, response }, args) {
|
|
61
|
+
let handled = await express_1.executeExpressRequestHandler(this._externalRouter, request, response);
|
|
62
|
+
if (handled)
|
|
63
|
+
return;
|
|
64
|
+
handled = await express_1.executeExpressRequestHandler(this._staticAssets, request, response);
|
|
65
|
+
if (handled)
|
|
66
|
+
return;
|
|
67
|
+
// Express router called next, which means no route was matched
|
|
68
|
+
throw new http_errors_1.default.NotFound(`Endpoint "${request.method} ${request.path}" not found.`);
|
|
69
|
+
}
|
|
70
|
+
describe() {
|
|
71
|
+
// TODO(bajtos) provide better description for Express routes with spec
|
|
72
|
+
return `External Express route "${this.verb} ${this.path}"`;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
function rebaseOpenApiSpec(spec, basePath) {
|
|
76
|
+
if (!spec.paths)
|
|
77
|
+
return spec;
|
|
78
|
+
if (!basePath || basePath === '/')
|
|
79
|
+
return spec;
|
|
80
|
+
const localPaths = spec.paths;
|
|
81
|
+
// Don't modify the spec object provided to us.
|
|
82
|
+
spec = Object.assign({}, spec);
|
|
83
|
+
spec.paths = {};
|
|
84
|
+
for (const url in localPaths) {
|
|
85
|
+
spec.paths[`${basePath}${url}`] = localPaths[url];
|
|
86
|
+
}
|
|
87
|
+
return spec;
|
|
88
|
+
}
|
|
89
|
+
exports.rebaseOpenApiSpec = rebaseOpenApiSpec;
|
|
90
|
+
//# sourceMappingURL=external-express-routes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"external-express-routes.js","sourceRoot":"","sources":["../../src/router/external-express-routes.ts"],"names":[],"mappings":";AAAA,iDAAiD;AACjD,8BAA8B;AAC9B,+CAA+C;AAC/C,gEAAgE;;;;AAGhE,+CAI2B;AAM3B,8DAA8B;AAE9B,sEAAqC;AAKrC,+CAA2D;AAE3D;;;;;;GAMG;AACH,MAAa,qBAAqB;IAAlC;QACY,oBAAe,GAAmB,iBAAO,CAAC,MAAM,EAAE,CAAC;QACnD,kBAAa,GAAmB,iBAAO,CAAC,MAAM,EAAE,CAAC;QACjD,2BAAsB,GAAe,EAAC,KAAK,EAAE,EAAE,EAAC,CAAC;IAsC7D,CAAC;IApCC,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,sBAAsB,CAAC;IACrC,CAAC;IAEM,cAAc,CACnB,IAAgB,EAChB,OAAe,EACf,OAA4B;QAE5B,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,iBAAO,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IACjE,CAAC;IAEM,WAAW,CAChB,QAAgB,EAChB,MAA6B,EAC7B,OAAmB,EAAC,KAAK,EAAE,EAAE,EAAC;QAE9B,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAE3C,IAAI,GAAG,iBAAiB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACzC,8BAAgB,CAAC,IAAI,CAAC,sBAAsB,EAAE,IAAI,CAAC,CAAC;IACtD,CAAC;IAED,IAAI,CAAC,OAAgB;QACnB,OAAO,IAAI,aAAa,CACtB,IAAI,CAAC,eAAe,EACpB,IAAI,CAAC,aAAa,EAClB,OAAO,CAAC,MAAM,EACd,OAAO,CAAC,GAAG,EACX;YACE,WAAW,EAAE,kCAAkC;YAC/C,cAAc,EAAE,cAAc;YAC9B,SAAS,EAAE,EAAE;SACd,CACF,CAAC;IACJ,CAAC;CACF;AAzCD,sDAyCC;AAED,MAAM,aAAa;IAKjB,YACmB,eAA+B,EAC/B,aAA6B,EAC9B,IAAY,EACZ,IAAY,EACZ,IAAqB;QAJpB,oBAAe,GAAf,eAAe,CAAgB;QAC/B,kBAAa,GAAb,aAAa,CAAgB;QAC9B,SAAI,GAAJ,IAAI,CAAQ;QACZ,SAAI,GAAJ,IAAI,CAAQ;QACZ,SAAI,GAAJ,IAAI,CAAiB;QATvC,oBAAoB;QACX,eAAU,GAAwB,EAAE,CAAC;QACrC,YAAO,GAAkB,EAAE,CAAC;IAQlC,CAAC;IAEJ,cAAc,CAAC,cAAuB;QACpC,QAAQ;IACV,CAAC;IAED,KAAK,CAAC,aAAa,CACjB,EAAC,OAAO,EAAE,QAAQ,EAAiB,EACnC,IAAmB;QAEnB,IAAI,OAAO,GAAG,MAAM,sCAA4B,CAC9C,IAAI,CAAC,eAAe,EACpB,OAAO,EACP,QAAQ,CACT,CAAC;QACF,IAAI,OAAO;YAAE,OAAO;QAEpB,OAAO,GAAG,MAAM,sCAA4B,CAC1C,IAAI,CAAC,aAAa,EAClB,OAAO,EACP,QAAQ,CACT,CAAC;QACF,IAAI,OAAO;YAAE,OAAO;QAEpB,+DAA+D;QAC/D,MAAM,IAAI,qBAAU,CAAC,QAAQ,CAC3B,aAAa,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,IAAI,cAAc,CAC1D,CAAC;IACJ,CAAC;IAED,QAAQ;QACN,uEAAuE;QACvE,OAAO,2BAA2B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC;IAC9D,CAAC;CACF;AAED,SAAgB,iBAAiB,CAC/B,IAAO,EACP,QAAgB;IAEhB,IAAI,CAAC,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAC7B,IAAI,CAAC,QAAQ,IAAI,QAAQ,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC;IAE/C,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC;IAC9B,+CAA+C;IAC/C,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAC/B,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;IAChB,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE;QAC5B,IAAI,CAAC,KAAK,CAAC,GAAG,QAAQ,GAAG,GAAG,EAAE,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;KACnD;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAhBD,8CAgBC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Context } from '@loopback/context';
|
|
2
|
+
import { OperationObject } from '@loopback/openapi-v3';
|
|
3
|
+
import { OperationArgs, OperationRetval } from '../types';
|
|
4
|
+
import { BaseRoute } from './base-route';
|
|
5
|
+
export declare class Route extends BaseRoute {
|
|
6
|
+
readonly spec: OperationObject;
|
|
7
|
+
protected readonly _handler: Function;
|
|
8
|
+
constructor(verb: string, path: string, spec: OperationObject, _handler: Function);
|
|
9
|
+
describe(): string;
|
|
10
|
+
updateBindings(requestContext: Context): void;
|
|
11
|
+
invokeHandler(requestContext: Context, args: OperationArgs): Promise<OperationRetval>;
|
|
12
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright IBM Corp. 2018,2020. All Rights Reserved.
|
|
3
|
+
// Node module: @loopback/rest
|
|
4
|
+
// This file is licensed under the MIT License.
|
|
5
|
+
// License text available at https://opensource.org/licenses/MIT
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.Route = void 0;
|
|
8
|
+
const context_1 = require("@loopback/context");
|
|
9
|
+
const keys_1 = require("../keys");
|
|
10
|
+
const base_route_1 = require("./base-route");
|
|
11
|
+
class Route extends base_route_1.BaseRoute {
|
|
12
|
+
constructor(verb, path, spec, _handler) {
|
|
13
|
+
super(verb, path, spec);
|
|
14
|
+
this.spec = spec;
|
|
15
|
+
this._handler = _handler;
|
|
16
|
+
}
|
|
17
|
+
describe() {
|
|
18
|
+
return this._handler.name || super.describe();
|
|
19
|
+
}
|
|
20
|
+
updateBindings(requestContext) {
|
|
21
|
+
requestContext.bind(keys_1.RestBindings.OPERATION_SPEC_CURRENT).to(this.spec);
|
|
22
|
+
}
|
|
23
|
+
async invokeHandler(requestContext, args) {
|
|
24
|
+
// Use `invokeMethodWithInterceptors` to invoke the handler function so
|
|
25
|
+
// that global interceptors are applied
|
|
26
|
+
return context_1.invokeMethodWithInterceptors(requestContext, this, '_handler', args, { source: new base_route_1.RouteSource(this) });
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
exports.Route = Route;
|
|
30
|
+
//# sourceMappingURL=handler-route.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handler-route.js","sourceRoot":"","sources":["../../src/router/handler-route.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,8BAA8B;AAC9B,+CAA+C;AAC/C,gEAAgE;;;AAEhE,+CAAwE;AAExE,kCAAqC;AAErC,6CAAoD;AAEpD,MAAa,KAAM,SAAQ,sBAAS;IAClC,YACE,IAAY,EACZ,IAAY,EACI,IAAqB,EAClB,QAAkB;QAErC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAHR,SAAI,GAAJ,IAAI,CAAiB;QAClB,aAAQ,GAAR,QAAQ,CAAU;IAGvC,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;IAChD,CAAC;IAED,cAAc,CAAC,cAAuB;QACpC,cAAc,CAAC,IAAI,CAAC,mBAAY,CAAC,sBAAsB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzE,CAAC;IAED,KAAK,CAAC,aAAa,CACjB,cAAuB,EACvB,IAAmB;QAEnB,uEAAuE;QACvE,uCAAuC;QACvC,OAAO,sCAA4B,CACjC,cAAc,EACd,IAAI,EACJ,UAAU,EACV,IAAI,EACJ,EAAC,MAAM,EAAE,IAAI,wBAAW,CAAC,IAAI,CAAC,EAAC,CAChC,CAAC;IACJ,CAAC;CACF;AAhCD,sBAgCC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export * from './route-entry';
|
|
2
|
+
export * from './base-route';
|
|
3
|
+
export * from './controller-route';
|
|
4
|
+
export * from './handler-route';
|
|
5
|
+
export * from './external-express-routes';
|
|
6
|
+
export * from './redirect-route';
|
|
7
|
+
export * from './rest-router';
|
|
8
|
+
export * from './trie-router';
|
|
9
|
+
export * from './regexp-router';
|
|
10
|
+
export * from './routing-table';
|
|
11
|
+
export * from './route-sort';
|
|
12
|
+
export * from './openapi-path';
|
|
13
|
+
export * from './trie';
|
|
14
|
+
export * from './router-spec';
|
|
@@ -0,0 +1,25 @@
|
|
|
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
|
+
const tslib_1 = require("tslib");
|
|
8
|
+
// routes
|
|
9
|
+
tslib_1.__exportStar(require("./route-entry"), exports);
|
|
10
|
+
tslib_1.__exportStar(require("./base-route"), exports);
|
|
11
|
+
tslib_1.__exportStar(require("./controller-route"), exports);
|
|
12
|
+
tslib_1.__exportStar(require("./handler-route"), exports);
|
|
13
|
+
tslib_1.__exportStar(require("./external-express-routes"), exports);
|
|
14
|
+
tslib_1.__exportStar(require("./redirect-route"), exports);
|
|
15
|
+
// routers
|
|
16
|
+
tslib_1.__exportStar(require("./rest-router"), exports);
|
|
17
|
+
tslib_1.__exportStar(require("./trie-router"), exports);
|
|
18
|
+
tslib_1.__exportStar(require("./regexp-router"), exports);
|
|
19
|
+
// helpers
|
|
20
|
+
tslib_1.__exportStar(require("./routing-table"), exports);
|
|
21
|
+
tslib_1.__exportStar(require("./route-sort"), exports);
|
|
22
|
+
tslib_1.__exportStar(require("./openapi-path"), exports);
|
|
23
|
+
tslib_1.__exportStar(require("./trie"), exports);
|
|
24
|
+
tslib_1.__exportStar(require("./router-spec"), exports);
|
|
25
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/router/index.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,8BAA8B;AAC9B,+CAA+C;AAC/C,gEAAgE;;;AAEhE,SAAS;AACT,wDAA8B;AAC9B,uDAA6B;AAC7B,6DAAmC;AACnC,0DAAgC;AAChC,oEAA0C;AAC1C,2DAAiC;AAEjC,UAAU;AACV,wDAA8B;AAC9B,wDAA8B;AAC9B,0DAAgC;AAEhC,UAAU;AACV,0DAAgC;AAChC,uDAA6B;AAC7B,yDAA+B;AAC/B,iDAAuB;AACvB,wDAA8B"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validate the path to be compatible with OpenAPI path template. No parameter
|
|
3
|
+
* modifier, custom pattern, or unnamed parameter is allowed.
|
|
4
|
+
*/
|
|
5
|
+
export declare function validateApiPath(path?: string): string;
|
|
6
|
+
/**
|
|
7
|
+
* Get all path variables. For example, `/root/{foo}/bar` => `['foo']`
|
|
8
|
+
*/
|
|
9
|
+
export declare function getPathVariables(path: string): RegExpMatchArray | null;
|
|
10
|
+
/**
|
|
11
|
+
* Convert an OpenAPI path to Express (path-to-regexp) style
|
|
12
|
+
* @param path - OpenAPI path with optional variables as `{var}`
|
|
13
|
+
*/
|
|
14
|
+
export declare function toExpressPath(path: string): string;
|
|
@@ -0,0 +1,64 @@
|
|
|
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.toExpressPath = exports.getPathVariables = exports.validateApiPath = void 0;
|
|
8
|
+
const path_to_regexp_1 = require("path-to-regexp");
|
|
9
|
+
/**
|
|
10
|
+
* OpenAPI spec 3.x does not specify the valid forms of path templates.
|
|
11
|
+
*
|
|
12
|
+
* Other ones such as [URI Template](https://tools.ietf.org/html/rfc6570#section-2.3)
|
|
13
|
+
* or [path-to-regexp](https://github.com/pillarjs/path-to-regexp#named-parameters)
|
|
14
|
+
* allows `[A-Za-z0-9_]`
|
|
15
|
+
*/
|
|
16
|
+
const POSSIBLE_VARNAME_PATTERN = /\{([^\}]+)\}/g;
|
|
17
|
+
const VALID_VARNAME_PATTERN = /^[A-Za-z0-9_]+$/;
|
|
18
|
+
/**
|
|
19
|
+
* Validate the path to be compatible with OpenAPI path template. No parameter
|
|
20
|
+
* modifier, custom pattern, or unnamed parameter is allowed.
|
|
21
|
+
*/
|
|
22
|
+
function validateApiPath(path = '/') {
|
|
23
|
+
const tokens = path_to_regexp_1.parse(path);
|
|
24
|
+
for (const token of tokens) {
|
|
25
|
+
if (typeof token === 'string')
|
|
26
|
+
continue;
|
|
27
|
+
if (typeof token === 'object') {
|
|
28
|
+
const name = token.name;
|
|
29
|
+
if (typeof name === 'string' && name !== '') {
|
|
30
|
+
throw new Error(`Invalid path template: '${path}'. Please use {${name}} instead of ':${name}'`);
|
|
31
|
+
}
|
|
32
|
+
if (typeof name === 'number') {
|
|
33
|
+
throw new Error(`Unnamed parameter is not allowed in path '${path}'`);
|
|
34
|
+
}
|
|
35
|
+
const valid = token.prefix.match(VALID_VARNAME_PATTERN);
|
|
36
|
+
if (!valid) {
|
|
37
|
+
throw new Error(`Invalid parameter name '${token.prefix}' found in path '${path}'`);
|
|
38
|
+
}
|
|
39
|
+
if (['?', '+', '*'].includes(token.modifier)) {
|
|
40
|
+
throw new Error(`Parameter modifier '{${token.prefix}}${token.modifier}' is not allowed in path '${path}`);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return path;
|
|
45
|
+
}
|
|
46
|
+
exports.validateApiPath = validateApiPath;
|
|
47
|
+
/**
|
|
48
|
+
* Get all path variables. For example, `/root/{foo}/bar` => `['foo']`
|
|
49
|
+
*/
|
|
50
|
+
function getPathVariables(path) {
|
|
51
|
+
return path.match(POSSIBLE_VARNAME_PATTERN);
|
|
52
|
+
}
|
|
53
|
+
exports.getPathVariables = getPathVariables;
|
|
54
|
+
/**
|
|
55
|
+
* Convert an OpenAPI path to Express (path-to-regexp) style
|
|
56
|
+
* @param path - OpenAPI path with optional variables as `{var}`
|
|
57
|
+
*/
|
|
58
|
+
function toExpressPath(path) {
|
|
59
|
+
// Convert `.` to `\\.` so that path-to-regexp will treat it as the plain
|
|
60
|
+
// `.` character
|
|
61
|
+
return path.replace(POSSIBLE_VARNAME_PATTERN, '{:$1}').replace('.', '\\.');
|
|
62
|
+
}
|
|
63
|
+
exports.toExpressPath = toExpressPath;
|
|
64
|
+
//# sourceMappingURL=openapi-path.js.map
|