Можно ли получить выходное местоположение для SourceFile
при заданном наборе CompilerOptions
при использовании API компилятора?
Я мог бы имитировать c способ, которым TypeScript разрешает этот путь, используя outDir
, rootDir
и набор включенных путей к файлам, но это действительно не кажется хорошей идеей (по понятным причинам).
Я заметил функции ts.getOutputFileNames
и ts.getTsBuildInfoEmitOutputFilePath
, которые выглядят многообещающими , но первый принимает ts.ParsedCommandLine
(что не имеет смысла при использовании programmati c), а второй возвращает undefined
независимо от введенного мной CompilerOptions
.
Редактировать:
Я проверил код компилятора, и похоже, что он использует getOwnEmitOutputFilePath
для вычисления этого пути во время «обычной компиляции». К сожалению, эта функция помечена как внутренняя, что означает, что она не легко доступна для использования API.
Даже если эта функция доступна (например, путем ручного увеличения ее типа), для этого требуется EmitHost
, который, к сожалению, также помечен как внутренний.
Как ни странно, интерфейс TransformationContext
имеет (внутреннюю) функцию getEmitHost
, но это всегда возвращало undefined
во время моего тестирования, вероятно, потому что я использую функцию programmati c transform
вместо полноценной компиляции.
Другими словами: мне придется вручную создайте EmitHost
.
Похоже, что это делается в двух местах в компиляторе, внутри createProgram
и в самом эмиттере . К сожалению, в обоих случаях этот «конструктор» недоступен для программного c использования.
Ручная реализация EmitHost
также не представляется жизнеспособным решением из-за использования внутренних API.
Я чувствую, что у меня нет вариантов на данный момент. Существуют ли другие (публичные c) способы доступа к этой информации или это следует рассматривать как запрос функции?