UNPKG

2.72 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.InvokeMethodMiddlewareProvider = exports.InvokeMethodProvider = 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 keys_1 = require("../keys");
13const sequence_1 = require("../sequence");
14const debug = (0, debug_1.default)('loopback:rest:invoke-method');
15class InvokeMethodProvider {
16 static value(context) {
17 const invokeMethod = (route, args) => route.invokeHandler(context, args);
18 return invokeMethod;
19 }
20}
21tslib_1.__decorate([
22 tslib_1.__param(0, (0, core_1.inject)(keys_1.RestBindings.Http.CONTEXT)),
23 tslib_1.__metadata("design:type", Function),
24 tslib_1.__metadata("design:paramtypes", [core_1.Context]),
25 tslib_1.__metadata("design:returntype", Function)
26], InvokeMethodProvider, "value", null);
27exports.InvokeMethodProvider = InvokeMethodProvider;
28let InvokeMethodMiddlewareProvider = class InvokeMethodMiddlewareProvider {
29 value() {
30 return async (ctx, next) => {
31 const route = await ctx.get(keys_1.RestBindings.Operation.ROUTE);
32 const params = await ctx.get(keys_1.RestBindings.Operation.PARAMS);
33 if (debug.enabled) {
34 debug('Invoking method %s with', route.describe(), params);
35 }
36 try {
37 const retVal = await route.invokeHandler(ctx, params);
38 ctx.bind(keys_1.RestBindings.Operation.RETURN_VALUE).to(retVal);
39 if (debug.enabled) {
40 debug('Return value from %s', route.describe(), retVal);
41 }
42 return retVal;
43 }
44 catch (err) {
45 if (debug.enabled) {
46 debug('Error thrown from %s', route.describe(), err);
47 }
48 throw err;
49 }
50 };
51 }
52};
53InvokeMethodMiddlewareProvider = tslib_1.__decorate([
54 (0, core_1.injectable)((0, express_1.asMiddleware)({
55 group: sequence_1.RestMiddlewareGroups.INVOKE_METHOD,
56 upstreamGroups: sequence_1.RestMiddlewareGroups.PARSE_PARAMS,
57 chain: keys_1.RestTags.REST_MIDDLEWARE_CHAIN,
58 }), { scope: core_1.BindingScope.SINGLETON })
59], InvokeMethodMiddlewareProvider);
60exports.InvokeMethodMiddlewareProvider = InvokeMethodMiddlewareProvider;
61//# sourceMappingURL=invoke-method.provider.js.map
\No newline at end of file