bobflux-gen
Version:
Generator for monkey files in bobflux application.
86 lines (85 loc) • 3.3 kB
JavaScript
;
var pu = require("./pathUtils");
var ts = require("typescript");
var fs = require("fs");
var pathPlatformDependent = require("path");
var path = pathPlatformDependent.posix; // This works everythere, just use forward slashes
var defaultLibFilename = path.join(path.dirname(require.resolve("typescript").replace(/\\/g, "/")), "lib.es6.d.ts");
function createCompilerHost(currentDirectory, logger) {
function getCanonicalFileName(fileName) {
return ts.sys.useCaseSensitiveFileNames ? fileName : fileName.toLowerCase();
}
function getSourceFile(filename, languageVersion, onError) {
if (filename === defaultLibFilename) {
return null;
}
try {
var filePath = filename === defaultLibFilename ? defaultLibFilename : path.join(currentDirectory, filename);
var text = fs.readFileSync(filePath).toString();
}
catch (e) {
logger.error("Error during source file reading: " + filename, e);
return null;
}
return ts.createSourceFile(filename, text, languageVersion, true);
}
function writeFile(fileName, data, writeByteOrderMark, onError) {
try {
var text = ts.sys.readFile(fileName, 'utf-8');
}
catch (e) {
text = "";
}
if (text === data) {
fs.utimesSync(fileName, new Date(), new Date());
return;
}
try {
ts.sys.writeFile(fileName, data, false);
}
catch (e) {
if (onError) {
onError(e.message);
}
}
}
function resolveModuleName(moduleName, containingFile) {
if (moduleName.substr(0, 1) === '.') {
var res = moduleName + ".ts";
var resRelative = pu.normalizePath(currentDirectory, containingFile, res);
return { resolvedFileName: resRelative };
}
return null;
}
return {
getSourceFile: getSourceFile,
getDirectories: function (path) {
logger.error('tsCompilerHost.getDirectories() is not implemented!', path);
throw new Error("tsCompilerHost.getDirectories() is not implemented! path requested: " + path);
// return [];
},
getDefaultLibFileName: function (options) { return defaultLibFilename; },
writeFile: writeFile,
getCurrentDirectory: function () { return currentDirectory; },
useCaseSensitiveFileNames: function () { return ts.sys.useCaseSensitiveFileNames; },
getCanonicalFileName: getCanonicalFileName,
getNewLine: function () { return '\n'; },
fileExists: function (fileName) {
try {
return fs.statSync(path.join(currentDirectory, fileName)).isFile();
}
catch (e) {
return false;
}
},
readFile: function (fileName) {
return fs.readFileSync(path.join(currentDirectory, fileName)).toString();
},
resolveModuleNames: function (moduleNames, containingFile) {
return moduleNames.map(function (n) {
return resolveModuleName(n, containingFile);
});
}
};
}
exports.createCompilerHost = createCompilerHost;