MCPcopy Create free account
hub / github.com/Effect-TS/effect / getMiddleware

Function getMiddleware

packages/effect/src/unstable/http/HttpRouter.ts:1012–1040  ·  view source on GitHub ↗
(context: Context.Context<never>)

Source from the content-addressed store, hash-verified

1010
1011const middlewareCache = new WeakMap<Context.Context<never>, any>()
1012const 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.

Callers 2

addAllFunction · 0.85
constructorMethod · 0.85

Calls 4

pushMethod · 0.80
getMethod · 0.65
addMethod · 0.65
setMethod · 0.65

Tested by

no test coverage detected