ts-simple-ast
Version:
TypeScript compiler wrapper for AST navigation and code generation.
35 lines (34 loc) • 1.66 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var ts = require("typescript");
var errors_1 = require("./../errors");
var fileSystem_1 = require("./../fileSystem");
var FileUtils_1 = require("./FileUtils");
/**
* Gets the compiler options from a specified tsconfig.json
* @param filePath - File path to the tsconfig.json.
* @param fileSystemHost - Optional file system host.
*/
function getCompilerOptionsFromTsConfig(filePath, fileSystemHost) {
fileSystemHost = fileSystemHost || new fileSystem_1.DefaultFileSystemHost();
var absoluteFilePath = FileUtils_1.FileUtils.getStandardizedAbsolutePath(fileSystemHost, filePath);
verifyFileExists(fileSystemHost, absoluteFilePath);
var result = ts.parseConfigFileTextToJson(absoluteFilePath, fileSystemHost.readFileSync(absoluteFilePath));
if (result.error != null)
throw new Error(result.error.messageText.toString());
var settings = ts.convertCompilerOptionsFromJson(result.config.compilerOptions, FileUtils_1.FileUtils.getDirPath(filePath));
if (!settings.options)
throw new Error(getErrorMessage(settings.errors));
return settings.options;
}
exports.getCompilerOptionsFromTsConfig = getCompilerOptionsFromTsConfig;
function getErrorMessage(errors) {
var message = "";
errors.forEach(function (err) { return message += err.messageText + "\n"; });
return message;
}
function verifyFileExists(fileSystemHost, filePath) {
// unfortunately the ts compiler doesn't do things asynchronously so for now we won't either
if (!fileSystemHost.fileExistsSync(filePath))
throw new errors_1.FileNotFoundError(filePath);
}