@loopback/rest
Version:
Expose controllers as REST endpoints and route REST API requests to controller methods
70 lines • 3.7 kB
JavaScript
// Copyright IBM Corp. and LoopBack contributors 2018,2020. All Rights Reserved.
// Node module: @loopback/rest
// This file is licensed under the MIT License.
// License text available at https://opensource.org/licenses/MIT
Object.defineProperty(exports, "__esModule", { value: true });
exports.ParseParamsMiddlewareProvider = exports.ParseParamsProvider = void 0;
const tslib_1 = require("tslib");
const core_1 = require("@loopback/core");
const express_1 = require("@loopback/express");
const debug_1 = tslib_1.__importDefault(require("debug"));
const body_parsers_1 = require("../body-parsers");
const keys_1 = require("../keys");
const parser_1 = require("../parser");
const sequence_1 = require("../sequence");
const ajv_factory_provider_1 = require("../validation/ajv-factory.provider");
const debug = (0, debug_1.default)('loopback:rest:parse-param');
/**
* Provides the function for parsing args in requests at runtime.
*
* @returns The handler function that will parse request args.
*/
class ParseParamsProvider {
static value(requestBodyParser, validationOptions = ajv_factory_provider_1.DEFAULT_AJV_VALIDATION_OPTIONS, ajvFactory) {
const parseParams = (request, route) => (0, parser_1.parseOperationArgs)(request, route, requestBodyParser, {
ajvFactory: ajvFactory,
...validationOptions,
});
return parseParams;
}
}
exports.ParseParamsProvider = ParseParamsProvider;
tslib_1.__decorate([
tslib_1.__param(0, (0, core_1.inject)(keys_1.RestBindings.REQUEST_BODY_PARSER)),
tslib_1.__param(1, (0, core_1.inject)(keys_1.RestBindings.REQUEST_BODY_PARSER_OPTIONS.deepProperty('validation'), { optional: true })),
tslib_1.__param(2, (0, core_1.inject)(keys_1.RestBindings.AJV_FACTORY, { optional: true })),
tslib_1.__metadata("design:type", Function),
tslib_1.__metadata("design:paramtypes", [body_parsers_1.RequestBodyParser, Object, Function]),
tslib_1.__metadata("design:returntype", Function)
], ParseParamsProvider, "value", null);
let ParseParamsMiddlewareProvider = class ParseParamsMiddlewareProvider {
value() {
return async (ctx, next) => {
var _a;
const requestBodyParser = await ctx.get(keys_1.RestBindings.REQUEST_BODY_PARSER);
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;
const ajvFactory = await ctx.get(keys_1.RestBindings.AJV_FACTORY, {
optional: true,
});
const route = await ctx.get(keys_1.RestBindings.Operation.ROUTE);
debug('Parsing parameters for %s %s', route.verb, route.path);
const params = await (0, parser_1.parseOperationArgs)(ctx.request, route, requestBodyParser, {
ajvFactory: ajvFactory,
...validationOptions,
});
ctx.bind(keys_1.RestBindings.Operation.PARAMS).to(params);
debug('Parameters', params);
return next();
};
}
};
exports.ParseParamsMiddlewareProvider = ParseParamsMiddlewareProvider;
exports.ParseParamsMiddlewareProvider = ParseParamsMiddlewareProvider = tslib_1.__decorate([
(0, core_1.injectable)((0, express_1.asMiddleware)({
group: sequence_1.RestMiddlewareGroups.PARSE_PARAMS,
upstreamGroups: sequence_1.RestMiddlewareGroups.FIND_ROUTE,
chain: keys_1.RestTags.REST_MIDDLEWARE_CHAIN,
}), { scope: core_1.BindingScope.SINGLETON })
], ParseParamsMiddlewareProvider);
//# sourceMappingURL=parse-params.provider.js.map
;