Add support for Chakra Host in sys.
This commit is contained in:
parent
fb76dc95de
commit
956a6b720a
1 changed files with 69 additions and 2 deletions
|
@ -47,6 +47,21 @@ namespace ts {
|
||||||
constructor(o: any);
|
constructor(o: any);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
declare var ChakraHost: {
|
||||||
|
args: string[];
|
||||||
|
currentDirectory: string;
|
||||||
|
executingFile: string;
|
||||||
|
echo(s: string): void;
|
||||||
|
quit(exitCode?: number): void;
|
||||||
|
fileExists(path: string): boolean;
|
||||||
|
directoryExists(path: string): boolean;
|
||||||
|
createDirectory(path: string): void;
|
||||||
|
resolvePath(path: string): string;
|
||||||
|
readFile(path: string): string;
|
||||||
|
writeFile(path: string, contents: string): void;
|
||||||
|
readDirectory(path: string, extension?: string, exclude?: string[]): string[];
|
||||||
|
}
|
||||||
|
|
||||||
export var sys: System = (function () {
|
export var sys: System = (function () {
|
||||||
|
|
||||||
function getWScriptSystem(): System {
|
function getWScriptSystem(): System {
|
||||||
|
@ -281,7 +296,7 @@ namespace ts {
|
||||||
// REVIEW: for now this implementation uses polling.
|
// REVIEW: for now this implementation uses polling.
|
||||||
// The advantage of polling is that it works reliably
|
// The advantage of polling is that it works reliably
|
||||||
// on all os and with network mounted files.
|
// on all os and with network mounted files.
|
||||||
// For 90 referenced files, the average time to detect
|
// For 90 referenced files, the average time to detect
|
||||||
// changes is 2*msInterval (by default 5 seconds).
|
// changes is 2*msInterval (by default 5 seconds).
|
||||||
// The overhead of this is .04 percent (1/2500) with
|
// The overhead of this is .04 percent (1/2500) with
|
||||||
// average pause of < 1 millisecond (and max
|
// average pause of < 1 millisecond (and max
|
||||||
|
@ -406,7 +421,7 @@ namespace ts {
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
watchDirectory: (path, callback, recursive) => {
|
watchDirectory: (path, callback, recursive) => {
|
||||||
// Node 4.0 `fs.watch` function supports the "recursive" option on both OSX and Windows
|
// Node 4.0 `fs.watch` function supports the "recursive" option on both OSX and Windows
|
||||||
// (ref: https://github.com/nodejs/node/pull/2649 and https://github.com/Microsoft/TypeScript/issues/4643)
|
// (ref: https://github.com/nodejs/node/pull/2649 and https://github.com/Microsoft/TypeScript/issues/4643)
|
||||||
return _fs.watch(
|
return _fs.watch(
|
||||||
path,
|
path,
|
||||||
|
@ -454,6 +469,53 @@ namespace ts {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
function getChakraSystem(): System {
|
||||||
|
|
||||||
|
return {
|
||||||
|
newLine: '\r\n',
|
||||||
|
args: ChakraHost.args,
|
||||||
|
useCaseSensitiveFileNames: false,
|
||||||
|
write(message: string) {
|
||||||
|
ChakraHost.echo(message);
|
||||||
|
},
|
||||||
|
readFile(path: string, encoding?: string) {
|
||||||
|
// encoding is automatically handled by the implementation in ChakraHost
|
||||||
|
return ChakraHost.readFile(path);
|
||||||
|
},
|
||||||
|
writeFile(path: string, data: string, writeByteOrderMark?: boolean) {
|
||||||
|
// If a BOM is required, emit one
|
||||||
|
if (writeByteOrderMark) {
|
||||||
|
data = "\uFEFF" + data;
|
||||||
|
}
|
||||||
|
|
||||||
|
ChakraHost.writeFile(path, data);
|
||||||
|
},
|
||||||
|
resolvePath(path: string) {
|
||||||
|
return ChakraHost.resolvePath(path);
|
||||||
|
},
|
||||||
|
fileExists(path: string) {
|
||||||
|
return ChakraHost.fileExists(path);
|
||||||
|
},
|
||||||
|
directoryExists(path: string) {
|
||||||
|
return ChakraHost.directoryExists(path);
|
||||||
|
},
|
||||||
|
createDirectory(path: string) {
|
||||||
|
ChakraHost.createDirectory(path);
|
||||||
|
},
|
||||||
|
getExecutingFilePath() {
|
||||||
|
return ChakraHost.executingFile;
|
||||||
|
},
|
||||||
|
getCurrentDirectory() {
|
||||||
|
return ChakraHost.currentDirectory;
|
||||||
|
},
|
||||||
|
readDirectory(path: string, extension?: string, exclude?: string[]) {
|
||||||
|
return ChakraHost.readDirectory(path, extension, exclude);
|
||||||
|
},
|
||||||
|
exit(exitCode?: number) {
|
||||||
|
ChakraHost.quit(exitCode);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
if (typeof WScript !== "undefined" && typeof ActiveXObject === "function") {
|
if (typeof WScript !== "undefined" && typeof ActiveXObject === "function") {
|
||||||
return getWScriptSystem();
|
return getWScriptSystem();
|
||||||
}
|
}
|
||||||
|
@ -462,8 +524,13 @@ namespace ts {
|
||||||
// process.browser check excludes webpack and browserify
|
// process.browser check excludes webpack and browserify
|
||||||
return getNodeSystem();
|
return getNodeSystem();
|
||||||
}
|
}
|
||||||
|
else if (typeof ChakraHost !== "undefined") {
|
||||||
|
return getChakraSystem();
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
return undefined; // Unsupported host
|
return undefined; // Unsupported host
|
||||||
}
|
}
|
||||||
})();
|
})();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue