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