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

Function makeFn

packages/effect/src/internal/effect.ts:1250–1293  ·  view source on GitHub ↗
(
  name: string,
  bodyOrOptions: Function | { readonly self: any },
  defError: Error,
  pipeables: Array<Function>,
  addSpan: boolean,
  spanOptions: Tracer.SpanOptionsNoTrace | undefined
)

Source from the content-addressed store, hash-verified

1248} as any
1249
1250const makeFn = (
1251 name: string,
1252 bodyOrOptions: Function | { readonly self: any },
1253 defError: Error,
1254 pipeables: Array<Function>,
1255 addSpan: boolean,
1256 spanOptions: Tracer.SpanOptionsNoTrace | undefined
1257) => {
1258 const body = typeof bodyOrOptions === "function"
1259 ? bodyOrOptions
1260 : (pipeables.pop()!).bind(bodyOrOptions.self)
1261
1262 return defineFunctionLength(body.length, function(this: any, ...args: Array<any>) {
1263 let result = suspend(() => {
1264 const iter = body.apply(this, arguments)
1265 return isEffect(iter) ? iter : fromIteratorUnsafe(iter)
1266 })
1267 for (let i = 0; i < pipeables.length; i++) {
1268 result = pipeables[i](result, ...args)
1269 }
1270 if (!isEffect(result)) {
1271 return result
1272 }
1273 const prevLimit = getStackTraceLimit()
1274 setStackTraceLimit(2)
1275 const callError = new globalThis.Error()
1276 setStackTraceLimit(prevLimit)
1277 return updateService(
1278 addSpan ?
1279 useSpan(name, spanOptions!, (span) => provideParentSpan(result, span)) :
1280 result,
1281 CurrentStackFrame,
1282 (prev) => ({
1283 name,
1284 stack: fnStackCleaner(() => callError.stack),
1285 parent: {
1286 name: `${name} (definition)`,
1287 stack: fnStackCleaner(() => defError.stack),
1288 parent: prev
1289 }
1290 })
1291 )
1292 })
1293}
1294
1295/** @internal */
1296export const fnUntracedEager: Effect.fn.Untraced = (

Callers 1

effect.tsFile · 0.70

Calls 5

isEffectFunction · 0.90
getStackTraceLimitFunction · 0.90
setStackTraceLimitFunction · 0.90
defineFunctionLengthFunction · 0.85
suspendFunction · 0.50

Tested by

no test coverage detected