Я пытаюсь перехватить все вызовы в моей библиотеке в одной точке и поделиться настроенным стеком вызовов (массивом) между функциями моей библиотеки.
Это библиотека FP
, где трубопровод / компоновкамного функций является обычной практикой.Встроенный стек вызовов отслеживает все вызовы (содержит шум), в то время как я хочу пренебрегать внутренними вызовами и просто записывать пользовательские вызовы в библиотеку и управлять трассировкой внутренних вызовов вручную, как я хочу в моем собственном стеке.Кажется, частью решения является apply trap, но я не знаю, с чего начать.
// Ramda FP library
// Abbreviate input string: 'some input' -> 'S.I'
const app = R.pipe(R.w, R.x, R.y, R.z)
const output = app('some input')
// Sample actual call stack (including internal calls):
// w -> __w0 -> _t2 -> x -> _x1 -> _x2 -> y -> _y -> z -> _z9
// Desired call stack without internal calls (noise)
// x -> y -> z
Если у меня есть своя собственная структура данных для стека вызовов внутри моей библиотеки, тогда можно получить следующеевывод приведенного выше примера в виде:
pipe: w -> x -> y -> z
'some input' ['s','i'] ['S','I'] 'S.I'
и в случае ошибки:
const output = app('')
// desired output
pipe: w -> x -> y -> z
'' [] Error
Error: Array is empty!
Сводка : мне нужно реализовать собственный стек виртуальных вызовов, который является умным и используется для предоставления полезных данных пользователям библиотеки.Учитывая, что в библиотеках FP каррирование, частичное применение ... являются частыми случаями использования, становится труднее решить проблему.