| 2989 | const error = new globalThis.Error() |
| 2990 | globalThis.Error.stackTraceLimit = prevLimit |
| 2991 | function generate(name: string, cause: MicroCause<any>) { |
| 2992 | const stack = error.stack |
| 2993 | if (!stack) { |
| 2994 | return cause |
| 2995 | } |
| 2996 | const line = stack.split("\n")[2]?.trim().replace(/^at /, "") |
| 2997 | if (!line) { |
| 2998 | return cause |
| 2999 | } |
| 3000 | const lineMatch = line.match(/\((.*)\)$/) |
| 3001 | return causeWithTrace(cause, `at ${name} (${lineMatch ? lineMatch[1] : line})`) |
| 3002 | } |
| 3003 | const f = (name: string) => (self: Micro<any, any, any>) => onError(self, (cause) => failCause(generate(name, cause))) |
| 3004 | if (arguments.length === 2) { |
| 3005 | return f(arguments[1])(arguments[0]) |