Skip to content

Commit 617eaec

Browse files
committed
Add enhancer function check
1 parent e084105 commit 617eaec

2 files changed

Lines changed: 24 additions & 3 deletions

File tree

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import templateMiddleware from './templateMiddleware';
2+
3+
test('should warn if middleware did not return function', () => {
4+
const warn = jest.fn();
5+
const template = templateMiddleware('Check');
6+
7+
jest.spyOn(console, 'warn').mockImplementation(warn);
8+
9+
template.extractMiddleware([() => 1 as any]);
10+
11+
expect(warn).toHaveBeenCalledTimes(1);
12+
expect(warn).toHaveBeenNthCalledWith(1, expect.stringContaining('must return enhancer function'));
13+
});

packages/api/src/middleware/private/templateMiddleware.ts

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,19 @@ function templateMiddleware<Request = any, Props extends {} = EmptyObject>(name:
2525
): readonly Middleware[] => {
2626
if (middleware) {
2727
if (isArrayOfFunction(middleware)) {
28-
// TODO: [P*] We assume middleware is Function[], we should do more checks.
2928
return Object.freeze(
3029
middleware
31-
// TODO: [P*] Checks if the return value is of type function or false.
32-
.map(middleware => middleware(name) as ReturnType<Middleware> | false)
30+
.map(middleware => {
31+
const result = middleware(name);
32+
33+
if (typeof result !== 'function') {
34+
console.warn(`botframework-webchat: ${name}.middleware must return enhancer function`);
35+
36+
return false;
37+
}
38+
39+
return result;
40+
})
3341
.filter((enhancer): enhancer is ReturnType<Middleware> => !!enhancer)
3442
.map(enhancer => () => enhancer)
3543
);

0 commit comments

Comments
 (0)