| 1010 | |
| 1011 | const middlewareCache = new WeakMap<Context.Context<never>, any>() |
| 1012 | const getMiddleware = (context: Context.Context<never>): Array<middleware.Fn> => { |
| 1013 | let arr = middlewareCache.get(context) |
| 1014 | if (arr) return arr |
| 1015 | const topLevel = Arr.empty<Array<middleware.Fn>>() |
| 1016 | let maxLength = 0 |
| 1017 | for (const [key, value] of context.mapUnsafe) { |
| 1018 | if (key.startsWith("effect/http/HttpRouter/Middleware-")) { |
| 1019 | topLevel.push(value) |
| 1020 | if (value.length > maxLength) { |
| 1021 | maxLength = value.length |
| 1022 | } |
| 1023 | } |
| 1024 | } |
| 1025 | if (topLevel.length === 0) { |
| 1026 | arr = [] |
| 1027 | } else { |
| 1028 | const middleware = new Set<middleware.Fn>() |
| 1029 | for (let i = maxLength - 1; i >= 0; i--) { |
| 1030 | for (const arr of topLevel) { |
| 1031 | if (i < arr.length) { |
| 1032 | middleware.add(arr[i]) |
| 1033 | } |
| 1034 | } |
| 1035 | } |
| 1036 | arr = Arr.fromIterable(middleware).reverse() |
| 1037 | } |
| 1038 | middlewareCache.set(context, arr) |
| 1039 | return arr |
| 1040 | } |
| 1041 | |
| 1042 | /** |
| 1043 | * Types used by the `middleware` constructor. |