Такие задачи однозначно решаются обходом AST. Возьмите общеизвестный парсер и инструмент для обхода его дерева, например связка из
@babel/parser и
@babel/traverse подойдет.
Так же можно посмотреть в какие ноды что парсится с помощью
https://astexplorer.net/ - в нем несколько языков, а для js/ts на выбор есть несколько парсеров.
Вам по сути нужно найти FunctionDeclaration содержащий в body ReturnStatement и извлечь из него Identifier соответствующий имени. А для второй части - FunctionDeclaration с ArgumentsList не нулевой длины.
Ну и так как в условии сказано, что внутрь не заходить, то можно пройтись лишь по верхнему уровню, тогда @babel/traverse и не нужен даже