Это сложный вопрос, на который можно с уверенностью ответить, потому что он требует разбора JS - общеизвестно трудная проблема.
Если у вас все в порядке с решением, которое дает правильный ответ большую часть времени - У меня есть система сборки, которая переносит ESM с Babel в смешанную среду CommonJS / ESM с автоматическим обнаружением зависимостей c. Как я выясняю, является ли данный файл ESM или нет
egrep '^\s*import\s+.*\sfrom\s+' "$filename"
Существуют очевидные ситуации, когда это приводит к ложному срабатыванию, но оно мне хорошо послужило.