1import type { Server as ConnectServer, HandleFunction } from 'connect';
2
3/**
4 * Prepends a `middleware` to current server middleware stack.
5 *
6 * @param app connect app server instance
7 * @param middleware target middleware to be prepended
8 */
9export function prependMiddleware(app: ConnectServer, middleware: HandleFunction) {
10  app.use(middleware);
11  app.stack.unshift(app.stack.pop()!);
12}
13
14/**
15 * Replaces source middleware with a new middlware in connect app
16 *
17 * @param app connect app server instance
18 * @param sourceMiddleware source middlware to be matched and replaces
19 * @param targetMiddleware new middlware
20 */
21export function replaceMiddlewareWith(
22  app: ConnectServer,
23  sourceMiddleware: HandleFunction,
24  targetMiddleware: HandleFunction
25) {
26  const item = app.stack.find((middleware) => middleware.handle === sourceMiddleware);
27  if (item) {
28    item.handle = targetMiddleware;
29  }
30}
31