@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":"parse-json.js","sourceRoot":"","sources":["../src/parse-json.ts"],"names":[],"mappings":";AAAA,iDAAiD;AACjD,8BAA8B;AAC9B,+CAA+C;AAC/C,gEAAgE;;;AAEhE,uDAAuD;AAEvD,2EAA2E;AAC3E,qBAAqB;AACrB,wEAAwE;AACxE,EAAE;AACF,2EAA2E;AAC3E,8EAA8E;AAC9E,wBAAwB;AAExB;;;GAGG;AACH,SAAgB,iBAAiB,CAAC,OAAuC;IACvE,OAAO,CAAC,GAAW,EAAE,KAAU,EAAE,EAAE;QACjC,IAAI,GAAG,KAAK,WAAW;YACrB,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;QACjE,IAAI,OAAO,EAAE;YACX,OAAO,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;SAC5B;aAAM;YACL,OAAO,KAAK,CAAC;SACd;IACH,CAAC,CAAC;AACJ,CAAC;AAVD,8CAUC;AAED;;;;GAIG;AACH,SAAgB,SAAS,CACvB,IAAY,EACZ,OAAuC;IAEvC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC;AACtD,CAAC;AALD,8BAKC"}
|
package/dist/parser.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { RequestBodyParser } from './body-parsers';
|
|
2
|
+
import { ResolvedRoute } from './router';
|
|
3
|
+
import { OperationArgs, Request, RequestBodyValidationOptions } from './types';
|
|
4
|
+
/**
|
|
5
|
+
* Parses the request to derive arguments to be passed in for the Application
|
|
6
|
+
* controller method
|
|
7
|
+
*
|
|
8
|
+
* @param request - Incoming HTTP request
|
|
9
|
+
* @param route - Resolved Route
|
|
10
|
+
*/
|
|
11
|
+
export declare function parseOperationArgs(request: Request, route: ResolvedRoute, requestBodyParser?: RequestBodyParser, options?: RequestBodyValidationOptions): Promise<OperationArgs>;
|
package/dist/parser.js
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
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.parseOperationArgs = void 0;
|
|
8
|
+
const tslib_1 = require("tslib");
|
|
9
|
+
const openapi_v3_1 = require("@loopback/openapi-v3");
|
|
10
|
+
const debug_1 = tslib_1.__importDefault(require("debug"));
|
|
11
|
+
const body_parsers_1 = require("./body-parsers");
|
|
12
|
+
const coerce_parameter_1 = require("./coercion/coerce-parameter");
|
|
13
|
+
const rest_http_error_1 = require("./rest-http-error");
|
|
14
|
+
const request_body_validator_1 = require("./validation/request-body.validator");
|
|
15
|
+
const debug = debug_1.default('loopback:rest:parser');
|
|
16
|
+
/**
|
|
17
|
+
* Parses the request to derive arguments to be passed in for the Application
|
|
18
|
+
* controller method
|
|
19
|
+
*
|
|
20
|
+
* @param request - Incoming HTTP request
|
|
21
|
+
* @param route - Resolved Route
|
|
22
|
+
*/
|
|
23
|
+
async function parseOperationArgs(request, route, requestBodyParser = new body_parsers_1.RequestBodyParser(), options = {}) {
|
|
24
|
+
debug('Parsing operation arguments for route %s', route.describe());
|
|
25
|
+
const operationSpec = route.spec;
|
|
26
|
+
const pathParams = route.pathParams;
|
|
27
|
+
const body = await requestBodyParser.loadRequestBodyIfNeeded(operationSpec, request);
|
|
28
|
+
return buildOperationArguments(operationSpec, request, pathParams, body, route.schemas, options);
|
|
29
|
+
}
|
|
30
|
+
exports.parseOperationArgs = parseOperationArgs;
|
|
31
|
+
async function buildOperationArguments(operationSpec, request, pathParams, body, globalSchemas, options = {}) {
|
|
32
|
+
var _a;
|
|
33
|
+
let requestBodyIndex = -1;
|
|
34
|
+
if (operationSpec.requestBody) {
|
|
35
|
+
// the type of `operationSpec.requestBody` could be `RequestBodyObject`
|
|
36
|
+
// or `ReferenceObject`, resolving a `$ref` value is not supported yet.
|
|
37
|
+
if (openapi_v3_1.isReferenceObject(operationSpec.requestBody)) {
|
|
38
|
+
throw new Error('$ref requestBody is not supported yet.');
|
|
39
|
+
}
|
|
40
|
+
const i = operationSpec.requestBody[openapi_v3_1.REQUEST_BODY_INDEX];
|
|
41
|
+
requestBodyIndex = i ? i : 0;
|
|
42
|
+
}
|
|
43
|
+
const paramArgs = [];
|
|
44
|
+
for (const paramSpec of (_a = operationSpec.parameters) !== null && _a !== void 0 ? _a : []) {
|
|
45
|
+
if (openapi_v3_1.isReferenceObject(paramSpec)) {
|
|
46
|
+
// TODO(bajtos) implement $ref parameters
|
|
47
|
+
// See https://github.com/strongloop/loopback-next/issues/435
|
|
48
|
+
throw new Error('$ref parameters are not supported yet.');
|
|
49
|
+
}
|
|
50
|
+
const spec = paramSpec;
|
|
51
|
+
const rawValue = getParamFromRequest(spec, request, pathParams);
|
|
52
|
+
const coercedValue = coerce_parameter_1.coerceParameter(rawValue, spec);
|
|
53
|
+
paramArgs.push(coercedValue);
|
|
54
|
+
}
|
|
55
|
+
debug('Validating request body - value %j', body);
|
|
56
|
+
await request_body_validator_1.validateRequestBody(body, operationSpec.requestBody, globalSchemas, options);
|
|
57
|
+
if (requestBodyIndex > -1)
|
|
58
|
+
paramArgs.splice(requestBodyIndex, 0, body.value);
|
|
59
|
+
return paramArgs;
|
|
60
|
+
}
|
|
61
|
+
function getParamFromRequest(spec, request, pathParams) {
|
|
62
|
+
switch (spec.in) {
|
|
63
|
+
case 'query':
|
|
64
|
+
return request.query[spec.name];
|
|
65
|
+
case 'path':
|
|
66
|
+
return pathParams[spec.name];
|
|
67
|
+
case 'header':
|
|
68
|
+
// @jannyhou TBD: check edge cases
|
|
69
|
+
return request.headers[spec.name.toLowerCase()];
|
|
70
|
+
// TODO(jannyhou) to support `cookie`,
|
|
71
|
+
// see issue https://github.com/strongloop/loopback-next/issues/997
|
|
72
|
+
default:
|
|
73
|
+
throw rest_http_error_1.RestHttpErrors.invalidParamLocation(spec.in);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { Context, Provider } from '@loopback/context';
|
|
2
|
-
import { FindRoute } from '../
|
|
2
|
+
import { FindRoute, Request } from '../types';
|
|
3
3
|
import { HttpHandler } from '../http-handler';
|
|
4
|
+
import { ResolvedRoute } from '../router';
|
|
4
5
|
export declare class FindRouteProvider implements Provider<FindRoute> {
|
|
5
6
|
protected context: Context;
|
|
6
7
|
protected handler: HttpHandler;
|
|
7
8
|
constructor(context: Context, handler: HttpHandler);
|
|
8
9
|
value(): FindRoute;
|
|
10
|
+
action(request: Request): ResolvedRoute;
|
|
9
11
|
}
|
|
@@ -0,0 +1,36 @@
|
|
|
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.FindRouteProvider = void 0;
|
|
8
|
+
const tslib_1 = require("tslib");
|
|
9
|
+
const context_1 = require("@loopback/context");
|
|
10
|
+
const http_handler_1 = require("../http-handler");
|
|
11
|
+
const keys_1 = require("../keys");
|
|
12
|
+
let FindRouteProvider = /** @class */ (() => {
|
|
13
|
+
let FindRouteProvider = class FindRouteProvider {
|
|
14
|
+
constructor(context, handler) {
|
|
15
|
+
this.context = context;
|
|
16
|
+
this.handler = handler;
|
|
17
|
+
}
|
|
18
|
+
value() {
|
|
19
|
+
return request => this.action(request);
|
|
20
|
+
}
|
|
21
|
+
action(request) {
|
|
22
|
+
const found = this.handler.findRoute(request);
|
|
23
|
+
found.updateBindings(this.context);
|
|
24
|
+
return found;
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
FindRouteProvider = tslib_1.__decorate([
|
|
28
|
+
tslib_1.__param(0, context_1.inject(keys_1.RestBindings.Http.CONTEXT)),
|
|
29
|
+
tslib_1.__param(1, context_1.inject(keys_1.RestBindings.HANDLER)),
|
|
30
|
+
tslib_1.__metadata("design:paramtypes", [context_1.Context,
|
|
31
|
+
http_handler_1.HttpHandler])
|
|
32
|
+
], FindRouteProvider);
|
|
33
|
+
return FindRouteProvider;
|
|
34
|
+
})();
|
|
35
|
+
exports.FindRouteProvider = FindRouteProvider;
|
|
36
|
+
//# sourceMappingURL=find-route.provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"find-route.provider.js","sourceRoot":"","sources":["../../src/providers/find-route.provider.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,8BAA8B;AAC9B,+CAA+C;AAC/C,gEAAgE;;;;AAEhE,+CAA4D;AAE5D,kDAA4C;AAC5C,kCAAqC;AAGrC;IAAA,IAAa,iBAAiB,GAA9B,MAAa,iBAAiB;QAC5B,YAC+C,OAAgB,EACrB,OAAoB;YADf,YAAO,GAAP,OAAO,CAAS;YACrB,YAAO,GAAP,OAAO,CAAa;QAC3D,CAAC;QAEJ,KAAK;YACH,OAAO,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACzC,CAAC;QAED,MAAM,CAAC,OAAgB;YACrB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YAC9C,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACnC,OAAO,KAAK,CAAC;QACf,CAAC;KACF,CAAA;IAfY,iBAAiB;QAEzB,mBAAA,gBAAM,CAAC,mBAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACjC,mBAAA,gBAAM,CAAC,mBAAY,CAAC,OAAO,CAAC,CAAA;iDADyB,iBAAO;YACZ,0BAAW;OAHnD,iBAAiB,CAe7B;IAAD,wBAAC;KAAA;AAfY,8CAAiB"}
|
|
@@ -0,0 +1,14 @@
|
|
|
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
|
+
const tslib_1 = require("tslib");
|
|
8
|
+
tslib_1.__exportStar(require("./find-route.provider"), exports);
|
|
9
|
+
tslib_1.__exportStar(require("./invoke-method.provider"), exports);
|
|
10
|
+
tslib_1.__exportStar(require("./log-error.provider"), exports);
|
|
11
|
+
tslib_1.__exportStar(require("./parse-params.provider"), exports);
|
|
12
|
+
tslib_1.__exportStar(require("./reject.provider"), exports);
|
|
13
|
+
tslib_1.__exportStar(require("./send.provider"), exports);
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,8BAA8B;AAC9B,+CAA+C;AAC/C,gEAAgE;;;AAEhE,gEAAsC;AACtC,mEAAyC;AACzC,+DAAqC;AACrC,kEAAwC;AACxC,4DAAkC;AAClC,0DAAgC"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { Context, Provider } from '@loopback/context';
|
|
2
|
-
import { InvokeMethod } from '../
|
|
2
|
+
import { InvokeMethod, OperationArgs, OperationRetval } from '../types';
|
|
3
|
+
import { RouteEntry } from '../router';
|
|
3
4
|
export declare class InvokeMethodProvider implements Provider<InvokeMethod> {
|
|
4
5
|
protected context: Context;
|
|
5
6
|
constructor(context: Context);
|
|
6
7
|
value(): InvokeMethod;
|
|
8
|
+
action(route: RouteEntry, args: OperationArgs): Promise<OperationRetval>;
|
|
7
9
|
}
|
|
@@ -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.InvokeMethodProvider = void 0;
|
|
8
|
+
const tslib_1 = require("tslib");
|
|
9
|
+
const context_1 = require("@loopback/context");
|
|
10
|
+
const keys_1 = require("../keys");
|
|
11
|
+
let InvokeMethodProvider = /** @class */ (() => {
|
|
12
|
+
let InvokeMethodProvider = class InvokeMethodProvider {
|
|
13
|
+
constructor(context) {
|
|
14
|
+
this.context = context;
|
|
15
|
+
}
|
|
16
|
+
value() {
|
|
17
|
+
return (route, args) => this.action(route, args);
|
|
18
|
+
}
|
|
19
|
+
action(route, args) {
|
|
20
|
+
return route.invokeHandler(this.context, args);
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
InvokeMethodProvider = tslib_1.__decorate([
|
|
24
|
+
tslib_1.__param(0, context_1.inject(keys_1.RestBindings.Http.CONTEXT)),
|
|
25
|
+
tslib_1.__metadata("design:paramtypes", [context_1.Context])
|
|
26
|
+
], InvokeMethodProvider);
|
|
27
|
+
return InvokeMethodProvider;
|
|
28
|
+
})();
|
|
29
|
+
exports.InvokeMethodProvider = InvokeMethodProvider;
|
|
30
|
+
//# sourceMappingURL=invoke-method.provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invoke-method.provider.js","sourceRoot":"","sources":["../../src/providers/invoke-method.provider.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,8BAA8B;AAC9B,+CAA+C;AAC/C,gEAAgE;;;;AAEhE,+CAA4D;AAE5D,kCAAqC;AAGrC;IAAA,IAAa,oBAAoB,GAAjC,MAAa,oBAAoB;QAC/B,YAAyD,OAAgB;YAAhB,YAAO,GAAP,OAAO,CAAS;QAAG,CAAC;QAE7E,KAAK;YACH,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACnD,CAAC;QAED,MAAM,CAAC,KAAiB,EAAE,IAAmB;YAC3C,OAAO,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACjD,CAAC;KACF,CAAA;IAVY,oBAAoB;QAClB,mBAAA,gBAAM,CAAC,mBAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;iDAAoB,iBAAO;OAD9D,oBAAoB,CAUhC;IAAD,2BAAC;KAAA;AAVY,oDAAoB"}
|
|
@@ -0,0 +1,21 @@
|
|
|
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.LogErrorProvider = void 0;
|
|
8
|
+
class LogErrorProvider {
|
|
9
|
+
value() {
|
|
10
|
+
return (err, statusCode, req) => this.action(err, statusCode, req);
|
|
11
|
+
}
|
|
12
|
+
action(err, statusCode, req) {
|
|
13
|
+
var _a;
|
|
14
|
+
if (statusCode < 500) {
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
console.error('Unhandled error in %s %s: %s %s', req.method, req.url, statusCode, (_a = err.stack) !== null && _a !== void 0 ? _a : err);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
exports.LogErrorProvider = LogErrorProvider;
|
|
21
|
+
//# sourceMappingURL=log-error.provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log-error.provider.js","sourceRoot":"","sources":["../../src/providers/log-error.provider.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,8BAA8B;AAC9B,+CAA+C;AAC/C,gEAAgE;;;AAKhE,MAAa,gBAAgB;IAC3B,KAAK;QACH,OAAO,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;IACrE,CAAC;IAED,MAAM,CAAC,GAAU,EAAE,UAAkB,EAAE,GAAY;;QACjD,IAAI,UAAU,GAAG,GAAG,EAAE;YACpB,OAAO;SACR;QAED,OAAO,CAAC,KAAK,CACX,iCAAiC,EACjC,GAAG,CAAC,MAAM,EACV,GAAG,CAAC,GAAG,EACP,UAAU,QACV,GAAG,CAAC,KAAK,mCAAI,GAAG,CACjB,CAAC;IACJ,CAAC;CACF;AAlBD,4CAkBC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Provider } from '@loopback/context';
|
|
2
|
+
import { RequestBodyParser } from '../body-parsers';
|
|
3
|
+
import { AjvFactory, ParseParams, RequestBodyValidationOptions } from '../types';
|
|
4
|
+
/**
|
|
5
|
+
* Provides the function for parsing args in requests at runtime.
|
|
6
|
+
*
|
|
7
|
+
* @returns The handler function that will parse request args.
|
|
8
|
+
*/
|
|
9
|
+
export declare class ParseParamsProvider implements Provider<ParseParams> {
|
|
10
|
+
private requestBodyParser;
|
|
11
|
+
private validationOptions;
|
|
12
|
+
private ajvFactory?;
|
|
13
|
+
constructor(requestBodyParser: RequestBodyParser, validationOptions?: RequestBodyValidationOptions, ajvFactory?: AjvFactory | undefined);
|
|
14
|
+
value(): ParseParams;
|
|
15
|
+
}
|
|
@@ -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.ParseParamsProvider = void 0;
|
|
8
|
+
const tslib_1 = require("tslib");
|
|
9
|
+
const context_1 = require("@loopback/context");
|
|
10
|
+
const body_parsers_1 = require("../body-parsers");
|
|
11
|
+
const keys_1 = require("../keys");
|
|
12
|
+
const parser_1 = require("../parser");
|
|
13
|
+
/**
|
|
14
|
+
* Provides the function for parsing args in requests at runtime.
|
|
15
|
+
*
|
|
16
|
+
* @returns The handler function that will parse request args.
|
|
17
|
+
*/
|
|
18
|
+
let ParseParamsProvider = /** @class */ (() => {
|
|
19
|
+
let ParseParamsProvider = class ParseParamsProvider {
|
|
20
|
+
constructor(requestBodyParser, validationOptions = {}, ajvFactory) {
|
|
21
|
+
this.requestBodyParser = requestBodyParser;
|
|
22
|
+
this.validationOptions = validationOptions;
|
|
23
|
+
this.ajvFactory = ajvFactory;
|
|
24
|
+
}
|
|
25
|
+
value() {
|
|
26
|
+
return (request, route) => parser_1.parseOperationArgs(request, route, this.requestBodyParser, {
|
|
27
|
+
ajvFactory: this.ajvFactory,
|
|
28
|
+
...this.validationOptions,
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
ParseParamsProvider = tslib_1.__decorate([
|
|
33
|
+
tslib_1.__param(0, context_1.inject(keys_1.RestBindings.REQUEST_BODY_PARSER)),
|
|
34
|
+
tslib_1.__param(1, context_1.inject(keys_1.RestBindings.REQUEST_BODY_PARSER_OPTIONS.deepProperty('validation'), { optional: true })),
|
|
35
|
+
tslib_1.__param(2, context_1.inject(keys_1.RestBindings.AJV_FACTORY, { optional: true })),
|
|
36
|
+
tslib_1.__metadata("design:paramtypes", [body_parsers_1.RequestBodyParser, Object, Function])
|
|
37
|
+
], ParseParamsProvider);
|
|
38
|
+
return ParseParamsProvider;
|
|
39
|
+
})();
|
|
40
|
+
exports.ParseParamsProvider = ParseParamsProvider;
|
|
41
|
+
//# sourceMappingURL=parse-params.provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-params.provider.js","sourceRoot":"","sources":["../../src/providers/parse-params.provider.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,8BAA8B;AAC9B,+CAA+C;AAC/C,gEAAgE;;;;AAEhE,+CAAmD;AACnD,kDAAkD;AAClD,kCAAqC;AACrC,sCAA6C;AAQ7C;;;;GAIG;AACH;IAAA,IAAa,mBAAmB,GAAhC,MAAa,mBAAmB;QAC9B,YAEU,iBAAoC,EAKpC,oBAAkD,EAAE,EAEpD,UAAuB;YAPvB,sBAAiB,GAAjB,iBAAiB,CAAmB;YAKpC,sBAAiB,GAAjB,iBAAiB,CAAmC;YAEpD,eAAU,GAAV,UAAU,CAAa;QAC9B,CAAC;QAEJ,KAAK;YACH,OAAO,CAAC,OAAgB,EAAE,KAAoB,EAAE,EAAE,CAChD,2BAAkB,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,iBAAiB,EAAE;gBACzD,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,GAAG,IAAI,CAAC,iBAAiB;aAC1B,CAAC,CAAC;QACP,CAAC;KACF,CAAA;IApBY,mBAAmB;QAE3B,mBAAA,gBAAM,CAAC,mBAAY,CAAC,mBAAmB,CAAC,CAAA;QAExC,mBAAA,gBAAM,CACL,mBAAY,CAAC,2BAA2B,CAAC,YAAY,CAAC,YAAY,CAAC,EACnE,EAAC,QAAQ,EAAE,IAAI,EAAC,CACjB,CAAA;QAEA,mBAAA,gBAAM,CAAC,mBAAY,CAAC,WAAW,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC,CAAA;iDANxB,gCAAiB;OAHnC,mBAAmB,CAoB/B;IAAD,0BAAC;KAAA;AApBY,kDAAmB"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { LogError, Reject, HandlerContext } from '../types';
|
|
2
|
+
import { Provider } from '@loopback/context';
|
|
3
|
+
import { ErrorWriterOptions } from 'strong-error-handler';
|
|
4
|
+
export declare class RejectProvider implements Provider<Reject> {
|
|
5
|
+
protected logError: LogError;
|
|
6
|
+
protected errorWriterOptions?: ErrorWriterOptions | undefined;
|
|
7
|
+
constructor(logError: LogError, errorWriterOptions?: ErrorWriterOptions | undefined);
|
|
8
|
+
value(): Reject;
|
|
9
|
+
action({ request, response }: HandlerContext, error: Error): void;
|
|
10
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
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.RejectProvider = void 0;
|
|
8
|
+
const tslib_1 = require("tslib");
|
|
9
|
+
const context_1 = require("@loopback/context");
|
|
10
|
+
const keys_1 = require("../keys");
|
|
11
|
+
const strong_error_handler_1 = require("strong-error-handler");
|
|
12
|
+
// TODO(bajtos) Make this mapping configurable at RestServer level,
|
|
13
|
+
// allow apps and extensions to contribute additional mappings.
|
|
14
|
+
const codeToStatusCodeMap = {
|
|
15
|
+
ENTITY_NOT_FOUND: 404,
|
|
16
|
+
};
|
|
17
|
+
let RejectProvider = /** @class */ (() => {
|
|
18
|
+
let RejectProvider = class RejectProvider {
|
|
19
|
+
constructor(logError, errorWriterOptions) {
|
|
20
|
+
this.logError = logError;
|
|
21
|
+
this.errorWriterOptions = errorWriterOptions;
|
|
22
|
+
}
|
|
23
|
+
value() {
|
|
24
|
+
return (context, error) => this.action(context, error);
|
|
25
|
+
}
|
|
26
|
+
action({ request, response }, error) {
|
|
27
|
+
const err = error;
|
|
28
|
+
if (!err.status && !err.statusCode && err.code) {
|
|
29
|
+
const customStatus = codeToStatusCodeMap[err.code];
|
|
30
|
+
if (customStatus) {
|
|
31
|
+
err.statusCode = customStatus;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
const statusCode = err.statusCode || err.status || 500;
|
|
35
|
+
strong_error_handler_1.writeErrorToResponse(err, request, response, this.errorWriterOptions);
|
|
36
|
+
this.logError(error, statusCode, request);
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
RejectProvider = tslib_1.__decorate([
|
|
40
|
+
tslib_1.__param(0, context_1.inject(keys_1.RestBindings.SequenceActions.LOG_ERROR)),
|
|
41
|
+
tslib_1.__param(1, context_1.inject(keys_1.RestBindings.ERROR_WRITER_OPTIONS, { optional: true })),
|
|
42
|
+
tslib_1.__metadata("design:paramtypes", [Function, Object])
|
|
43
|
+
], RejectProvider);
|
|
44
|
+
return RejectProvider;
|
|
45
|
+
})();
|
|
46
|
+
exports.RejectProvider = RejectProvider;
|
|
47
|
+
//# sourceMappingURL=reject.provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reject.provider.js","sourceRoot":"","sources":["../../src/providers/reject.provider.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,8BAA8B;AAC9B,+CAA+C;AAC/C,gEAAgE;;;;AAGhE,+CAAmD;AAEnD,kCAAqC;AACrC,+DAA8E;AAE9E,mEAAmE;AACnE,+DAA+D;AAC/D,MAAM,mBAAmB,GAA4B;IACnD,gBAAgB,EAAE,GAAG;CACtB,CAAC;AAEF;IAAA,IAAa,cAAc,GAA3B,MAAa,cAAc;QACzB,YAEY,QAAkB,EAElB,kBAAuC;YAFvC,aAAQ,GAAR,QAAQ,CAAU;YAElB,uBAAkB,GAAlB,kBAAkB,CAAqB;QAChD,CAAC;QAEJ,KAAK;YACH,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACzD,CAAC;QAED,MAAM,CAAC,EAAC,OAAO,EAAE,QAAQ,EAAiB,EAAE,KAAY;YACtD,MAAM,GAAG,GAAc,KAAK,CAAC;YAE7B,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,IAAI,EAAE;gBAC9C,MAAM,YAAY,GAAG,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACnD,IAAI,YAAY,EAAE;oBAChB,GAAG,CAAC,UAAU,GAAG,YAAY,CAAC;iBAC/B;aACF;YAED,MAAM,UAAU,GAAG,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC;YACvD,2CAAoB,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;YACtE,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;QAC5C,CAAC;KACF,CAAA;IA1BY,cAAc;QAEtB,mBAAA,gBAAM,CAAC,mBAAY,CAAC,eAAe,CAAC,SAAS,CAAC,CAAA;QAE9C,mBAAA,gBAAM,CAAC,mBAAY,CAAC,oBAAoB,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC,CAAA;;OAJnD,cAAc,CA0B1B;IAAD,qBAAC;KAAA;AA1BY,wCAAc"}
|
|
@@ -4,10 +4,7 @@ import { writeResultToResponse } from '../writer';
|
|
|
4
4
|
* Provides the function that populates the response object with
|
|
5
5
|
* the results of the operation.
|
|
6
6
|
*
|
|
7
|
-
* @
|
|
8
|
-
* @class SendProvider
|
|
9
|
-
* @implements {Provider<BoundValue>}
|
|
10
|
-
* @returns {BoundValue} The handler function that will populate the
|
|
7
|
+
* @returns The handler function that will populate the
|
|
11
8
|
* response with operation results.
|
|
12
9
|
*/
|
|
13
10
|
export declare class SendProvider implements Provider<BoundValue> {
|
|
@@ -1,18 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
// Copyright IBM Corp.
|
|
2
|
+
// Copyright IBM Corp. 2018,2020. All Rights Reserved.
|
|
3
3
|
// Node module: @loopback/rest
|
|
4
4
|
// This file is licensed under the MIT License.
|
|
5
5
|
// License text available at https://opensource.org/licenses/MIT
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.SendProvider = void 0;
|
|
7
8
|
const writer_1 = require("../writer");
|
|
8
9
|
/**
|
|
9
10
|
* Provides the function that populates the response object with
|
|
10
11
|
* the results of the operation.
|
|
11
12
|
*
|
|
12
|
-
* @
|
|
13
|
-
* @class SendProvider
|
|
14
|
-
* @implements {Provider<BoundValue>}
|
|
15
|
-
* @returns {BoundValue} The handler function that will populate the
|
|
13
|
+
* @returns The handler function that will populate the
|
|
16
14
|
* response with operation results.
|
|
17
15
|
*/
|
|
18
16
|
class SendProvider {
|
|
@@ -21,4 +19,4 @@ class SendProvider {
|
|
|
21
19
|
}
|
|
22
20
|
}
|
|
23
21
|
exports.SendProvider = SendProvider;
|
|
24
|
-
//# sourceMappingURL=send.js.map
|
|
22
|
+
//# sourceMappingURL=send.provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"send.provider.js","sourceRoot":"","sources":["../../src/providers/send.provider.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,8BAA8B;AAC9B,+CAA+C;AAC/C,gEAAgE;;;AAGhE,sCAAgD;AAChD;;;;;;GAMG;AACH,MAAa,YAAY;IACvB,KAAK;QACH,OAAO,8BAAqB,CAAC;IAC/B,CAAC;CACF;AAJD,oCAIC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { Context } from '@loopback/context';
|
|
2
|
+
import { HandlerContext, MiddlewareContext, Request, Response } from '@loopback/express';
|
|
3
|
+
import { RestServerResolvedConfig } from './rest.server';
|
|
4
|
+
/**
|
|
5
|
+
* A per-request Context combining an IoC container with handler context
|
|
6
|
+
* (request, response, etc.).
|
|
7
|
+
*/
|
|
8
|
+
export declare class RequestContext extends MiddlewareContext implements HandlerContext {
|
|
9
|
+
readonly request: Request;
|
|
10
|
+
readonly response: Response;
|
|
11
|
+
readonly serverConfig: RestServerResolvedConfig;
|
|
12
|
+
/**
|
|
13
|
+
* Get the protocol used by the client to make the request.
|
|
14
|
+
* Please note this protocol may be different from what we are observing
|
|
15
|
+
* at HTTP/TCP level, because reverse proxies like nginx or sidecars like
|
|
16
|
+
* Envoy are switching between protocols.
|
|
17
|
+
*/
|
|
18
|
+
get requestedProtocol(): string;
|
|
19
|
+
/**
|
|
20
|
+
* Get the effective base path of the incoming request. This base path
|
|
21
|
+
* combines `baseUrl` provided by Express when LB4 handler is mounted on
|
|
22
|
+
* a non-root path, with the `basePath` value configured at LB4 side.
|
|
23
|
+
*/
|
|
24
|
+
get basePath(): string;
|
|
25
|
+
/**
|
|
26
|
+
* Get the base URL used by the client to make the request.
|
|
27
|
+
* This URL contains the protocol, hostname, port and base path.
|
|
28
|
+
* The path of the invoked route and query string is not included.
|
|
29
|
+
*
|
|
30
|
+
* Please note these values may be different from what we are observing
|
|
31
|
+
* at HTTP/TCP level, because reverse proxies like nginx are rewriting them.
|
|
32
|
+
*/
|
|
33
|
+
get requestedBaseUrl(): string;
|
|
34
|
+
constructor(request: Request, response: Response, parent: Context, serverConfig: RestServerResolvedConfig, name?: string);
|
|
35
|
+
protected setupBindings(): void;
|
|
36
|
+
}
|
|
@@ -0,0 +1,104 @@
|
|
|
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.RequestContext = void 0;
|
|
8
|
+
const express_1 = require("@loopback/express");
|
|
9
|
+
const keys_1 = require("./keys");
|
|
10
|
+
/**
|
|
11
|
+
* A per-request Context combining an IoC container with handler context
|
|
12
|
+
* (request, response, etc.).
|
|
13
|
+
*/
|
|
14
|
+
class RequestContext extends express_1.MiddlewareContext {
|
|
15
|
+
constructor(request, response, parent, serverConfig, name) {
|
|
16
|
+
super(request, response, parent, name);
|
|
17
|
+
this.request = request;
|
|
18
|
+
this.response = response;
|
|
19
|
+
this.serverConfig = serverConfig;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Get the protocol used by the client to make the request.
|
|
23
|
+
* Please note this protocol may be different from what we are observing
|
|
24
|
+
* at HTTP/TCP level, because reverse proxies like nginx or sidecars like
|
|
25
|
+
* Envoy are switching between protocols.
|
|
26
|
+
*/
|
|
27
|
+
get requestedProtocol() {
|
|
28
|
+
var _a, _b;
|
|
29
|
+
return ((_b = (((_a = this.request.get('x-forwarded-proto')) !== null && _a !== void 0 ? _a : '').split(',')[0] ||
|
|
30
|
+
this.request.protocol ||
|
|
31
|
+
this.serverConfig.protocol)) !== null && _b !== void 0 ? _b : 'http');
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Get the effective base path of the incoming request. This base path
|
|
35
|
+
* combines `baseUrl` provided by Express when LB4 handler is mounted on
|
|
36
|
+
* a non-root path, with the `basePath` value configured at LB4 side.
|
|
37
|
+
*/
|
|
38
|
+
get basePath() {
|
|
39
|
+
var _a;
|
|
40
|
+
const request = this.request;
|
|
41
|
+
let basePath = (_a = this.serverConfig.basePath) !== null && _a !== void 0 ? _a : '';
|
|
42
|
+
if (request.baseUrl && request.baseUrl !== '/') {
|
|
43
|
+
if (!basePath || request.baseUrl.endsWith(basePath)) {
|
|
44
|
+
// Express has already applied basePath to baseUrl
|
|
45
|
+
basePath = request.baseUrl;
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
basePath = request.baseUrl + basePath;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return basePath;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Get the base URL used by the client to make the request.
|
|
55
|
+
* This URL contains the protocol, hostname, port and base path.
|
|
56
|
+
* The path of the invoked route and query string is not included.
|
|
57
|
+
*
|
|
58
|
+
* Please note these values may be different from what we are observing
|
|
59
|
+
* at HTTP/TCP level, because reverse proxies like nginx are rewriting them.
|
|
60
|
+
*/
|
|
61
|
+
get requestedBaseUrl() {
|
|
62
|
+
var _a, _b, _c;
|
|
63
|
+
const request = this.request;
|
|
64
|
+
const config = this.serverConfig;
|
|
65
|
+
const protocol = this.requestedProtocol;
|
|
66
|
+
// The host can be in one of the forms
|
|
67
|
+
// [::1]:3000
|
|
68
|
+
// [::1]
|
|
69
|
+
// 127.0.0.1:3000
|
|
70
|
+
// 127.0.0.1
|
|
71
|
+
let { host, port } = parseHostAndPort((_a = request.get('x-forwarded-host')) !== null && _a !== void 0 ? _a : request.headers.host);
|
|
72
|
+
const forwardedPort = ((_b = request.get('x-forwarded-port')) !== null && _b !== void 0 ? _b : '').split(',')[0];
|
|
73
|
+
port = forwardedPort || port;
|
|
74
|
+
if (!host) {
|
|
75
|
+
// No host detected from http headers
|
|
76
|
+
// Use the configured values or the local network address
|
|
77
|
+
host = (_c = config.host) !== null && _c !== void 0 ? _c : request.socket.localAddress;
|
|
78
|
+
port = (config.port || request.socket.localPort).toString();
|
|
79
|
+
}
|
|
80
|
+
// clear default ports
|
|
81
|
+
port = protocol === 'https' && port === '443' ? '' : port;
|
|
82
|
+
port = protocol === 'http' && port === '80' ? '' : port;
|
|
83
|
+
// add port number of present
|
|
84
|
+
host += port !== '' ? ':' + port : '';
|
|
85
|
+
return protocol + '://' + host + this.basePath;
|
|
86
|
+
}
|
|
87
|
+
setupBindings() {
|
|
88
|
+
super.setupBindings();
|
|
89
|
+
this.bind(keys_1.RestBindings.Http.REQUEST).to(this.request).lock();
|
|
90
|
+
this.bind(keys_1.RestBindings.Http.RESPONSE).to(this.response).lock();
|
|
91
|
+
this.bind(keys_1.RestBindings.Http.CONTEXT).to(this).lock();
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
exports.RequestContext = RequestContext;
|
|
95
|
+
function parseHostAndPort(host) {
|
|
96
|
+
var _a;
|
|
97
|
+
host = host !== null && host !== void 0 ? host : '';
|
|
98
|
+
host = host.split(',')[0];
|
|
99
|
+
const portPattern = /:([0-9]+)$/;
|
|
100
|
+
const port = ((_a = host.match(portPattern)) !== null && _a !== void 0 ? _a : [])[1] || '';
|
|
101
|
+
host = host.replace(portPattern, '');
|
|
102
|
+
return { host, port };
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=request-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-context.js","sourceRoot":"","sources":["../src/request-context.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import HttpErrors from 'http-errors';
|
|
2
|
+
export declare namespace RestHttpErrors {
|
|
3
|
+
function invalidData<T, Props extends object = {}>(data: T, name: string, extraProperties?: Props): HttpErrors.HttpError & Props;
|
|
4
|
+
function unsupportedMediaType(contentType: string, allowedTypes?: string[]): HttpErrors.HttpError & {
|
|
5
|
+
code: string;
|
|
6
|
+
contentType: string;
|
|
7
|
+
allowedMediaTypes: string[];
|
|
8
|
+
};
|
|
9
|
+
function missingRequired(name: string): HttpErrors.HttpError;
|
|
10
|
+
function invalidParamLocation(location: string): HttpErrors.HttpError;
|
|
11
|
+
const INVALID_REQUEST_BODY_MESSAGE = "The request body is invalid. See error object `details` property for more info.";
|
|
12
|
+
function invalidRequestBody(): HttpErrors.HttpError;
|
|
13
|
+
/**
|
|
14
|
+
* An invalid request body error contains a `details` property as the machine-readable error.
|
|
15
|
+
* Each entry in `error.details` contains 4 attributes: `path`, `code`, `info` and `message`.
|
|
16
|
+
* `ValidationErrorDetails` defines the type of each entry, which is an object.
|
|
17
|
+
* The type of `error.details` is `ValidationErrorDetails[]`.
|
|
18
|
+
*/
|
|
19
|
+
interface ValidationErrorDetails {
|
|
20
|
+
/**
|
|
21
|
+
* A path to the invalid field.
|
|
22
|
+
*/
|
|
23
|
+
path: string;
|
|
24
|
+
/**
|
|
25
|
+
* A single word code represents the error's type.
|
|
26
|
+
*/
|
|
27
|
+
code: string;
|
|
28
|
+
/**
|
|
29
|
+
* A human readable description of the error.
|
|
30
|
+
*/
|
|
31
|
+
message: string;
|
|
32
|
+
/**
|
|
33
|
+
* Some additional details that the 3 attributes above don't cover.
|
|
34
|
+
*/
|
|
35
|
+
info: object;
|
|
36
|
+
}
|
|
37
|
+
}
|