definition-tester
Version:
DefinitelyTyped repository testing infrastructure
72 lines • 2.89 kB
JavaScript
;
var fs = require('fs');
var path = require('path');
var Promise = require('bluebird');
var exec_1 = require('../util/exec');
var util = require('../util/util');
var ts = require('typescript');
function diagsToStrings(diags) {
return diags.map(function (d) {
var pos = ts.getLineAndCharacterOfPosition(d.file, d.start);
return d.file.fileName.replace(/\//g, '\\') + "\n\t Line " + (pos.line + 1) + ": " + ts.flattenDiagnosticMessageText(d.messageText, '\r\n');
});
}
var useJsx = /\.tsx$/i;
function runTsc(tsConfigfile, options) {
var tscPath = options.tscPath;
var root = path.dirname(tsConfigfile);
return Promise.all([
util.fileExists(tsConfigfile),
util.fileExists(tscPath),
util.fileExists(path.join(root, 'package.json'))
]).spread(function (tsfileExists, tscPathExists, packageExists) {
if (!tsfileExists) {
throw new Error(tsConfigfile + ' does not exist in path ' + tscPath);
}
if (!tscPathExists) {
throw new Error(tscPath + ' does not exist in path ' + tscPath);
}
return packageExists ? installNodeModules(root) : undefined;
}).then(function () {
var configJson = ts.parseConfigFileTextToJson('tsconfig.json', fs.readFileSync(tsConfigfile, 'utf-8'));
var configParse = ts.parseJsonConfigFileContent(configJson.config, ts.sys, root, undefined, tsConfigfile);
var opts = configParse.options;
if (opts === undefined) {
throw new Error('Failed when parsing ' + tsConfigfile);
}
var diagnostics = [];
var oldCwd = process.cwd();
process.chdir(root);
try {
var program = ts.createProgram(configParse.fileNames, opts);
addDiagnostics(program.getGlobalDiagnostics());
addDiagnostics(program.getSyntacticDiagnostics());
addDiagnostics(program.getSemanticDiagnostics());
}
finally {
process.chdir(oldCwd);
}
var result = diagsToStrings(diagnostics);
if (result.length > 0) {
console.log("== Errors when compiling " + tsConfigfile + " ==");
console.log(result.join('\r\n'));
}
return result;
function addDiagnostics(diags) {
if (diags && diags.length) {
diagnostics = diagnostics.concat(diags);
}
}
});
}
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = runTsc;
function installNodeModules(cwd) {
return exec_1.exec('npm install', [], cwd).then(function (_a) {
var error = _a.error, exitCode = _a.exitCode, stdout = _a.stdout, stderr = _a.stderr;
if (error) {
throw error;
}
});
}
//# sourceMappingURL=Tsc.js.map