UNPKG

3.7 kBJavaScriptView Raw
1"use strict";
2// Copyright IBM Corp. and LoopBack contributors 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
6Object.defineProperty(exports, "__esModule", { value: true });
7exports.ParseParamsMiddlewareProvider = exports.ParseParamsProvider = void 0;
8const tslib_1 = require("tslib");
9const core_1 = require("@loopback/core");
10const express_1 = require("@loopback/express");
11const debug_1 = tslib_1.__importDefault(require("debug"));
12const body_parsers_1 = require("../body-parsers");
13const keys_1 = require("../keys");
14const parser_1 = require("../parser");
15const sequence_1 = require("../sequence");
16const ajv_factory_provider_1 = require("../validation/ajv-factory.provider");
17const debug = (0, debug_1.default)('loopback:rest:parse-param');
18/**
19 * Provides the function for parsing args in requests at runtime.
20 *
21 * @returns The handler function that will parse request args.
22 */
23class ParseParamsProvider {
24 static value(requestBodyParser, validationOptions = ajv_factory_provider_1.DEFAULT_AJV_VALIDATION_OPTIONS, ajvFactory) {
25 const parseParams = (request, route) => (0, parser_1.parseOperationArgs)(request, route, requestBodyParser, {
26 ajvFactory: ajvFactory,
27 ...validationOptions,
28 });
29 return parseParams;
30 }
31}
32exports.ParseParamsProvider = ParseParamsProvider;
33tslib_1.__decorate([
34 tslib_1.__param(0, (0, core_1.inject)(keys_1.RestBindings.REQUEST_BODY_PARSER)),
35 tslib_1.__param(1, (0, core_1.inject)(keys_1.RestBindings.REQUEST_BODY_PARSER_OPTIONS.deepProperty('validation'), { optional: true })),
36 tslib_1.__param(2, (0, core_1.inject)(keys_1.RestBindings.AJV_FACTORY, { optional: true })),
37 tslib_1.__metadata("design:type", Function),
38 tslib_1.__metadata("design:paramtypes", [body_parsers_1.RequestBodyParser, Object, Function]),
39 tslib_1.__metadata("design:returntype", Function)
40], ParseParamsProvider, "value", null);
41let ParseParamsMiddlewareProvider = class ParseParamsMiddlewareProvider {
42 value() {
43 return async (ctx, next) => {
44 var _a;
45 const requestBodyParser = await ctx.get(keys_1.RestBindings.REQUEST_BODY_PARSER);
46 const validationOptions = (_a = (await ctx.get(keys_1.RestBindings.REQUEST_BODY_PARSER_OPTIONS.deepProperty('validation'), { optional: true }))) !== null && _a !== void 0 ? _a : ajv_factory_provider_1.DEFAULT_AJV_VALIDATION_OPTIONS;
47 const ajvFactory = await ctx.get(keys_1.RestBindings.AJV_FACTORY, {
48 optional: true,
49 });
50 const route = await ctx.get(keys_1.RestBindings.Operation.ROUTE);
51 debug('Parsing parameters for %s %s', route.verb, route.path);
52 const params = await (0, parser_1.parseOperationArgs)(ctx.request, route, requestBodyParser, {
53 ajvFactory: ajvFactory,
54 ...validationOptions,
55 });
56 ctx.bind(keys_1.RestBindings.Operation.PARAMS).to(params);
57 debug('Parameters', params);
58 return next();
59 };
60 }
61};
62exports.ParseParamsMiddlewareProvider = ParseParamsMiddlewareProvider;
63exports.ParseParamsMiddlewareProvider = ParseParamsMiddlewareProvider = tslib_1.__decorate([
64 (0, core_1.injectable)((0, express_1.asMiddleware)({
65 group: sequence_1.RestMiddlewareGroups.PARSE_PARAMS,
66 upstreamGroups: sequence_1.RestMiddlewareGroups.FIND_ROUTE,
67 chain: keys_1.RestTags.REST_MIDDLEWARE_CHAIN,
68 }), { scope: core_1.BindingScope.SINGLETON })
69], ParseParamsMiddlewareProvider);
70//# sourceMappingURL=parse-params.provider.js.map
\No newline at end of file