From 3507ed021c504196fbab625f51db919a9ad7e209 Mon Sep 17 00:00:00 2001 From: Ron Buckton Date: Thu, 7 Apr 2016 16:13:28 -0700 Subject: [PATCH] Fixes issues that were causing runtests-browser to fail --- Jakefile.js | 2 +- scripts/browserify-optional.js | 24 ++++++++++++++++++++++++ src/compiler/program.ts | 5 +++-- src/compiler/sys.ts | 5 ++--- src/compiler/types.ts | 1 + src/compiler/utilities.ts | 12 ++++++++++++ src/harness/harness.ts | 2 +- 7 files changed, 44 insertions(+), 7 deletions(-) create mode 100644 scripts/browserify-optional.js diff --git a/Jakefile.js b/Jakefile.js index 53c6bb964b..191441dbe3 100644 --- a/Jakefile.js +++ b/Jakefile.js @@ -909,7 +909,7 @@ compileFile(nodeServerOutFile, [nodeServerInFile], [builtLocalDirectory, tscFile desc("Runs browserify on run.js to produce a file suitable for running tests in the browser"); task("browserify", ["tests", builtLocalDirectory, nodeServerOutFile], function() { - var cmd = 'browserify built/local/run.js -o built/local/bundle.js'; + var cmd = 'browserify built/local/run.js -t ./scripts/browserify-optional -o built/local/bundle.js'; exec(cmd); }, {async: true}); diff --git a/scripts/browserify-optional.js b/scripts/browserify-optional.js new file mode 100644 index 0000000000..43997c7803 --- /dev/null +++ b/scripts/browserify-optional.js @@ -0,0 +1,24 @@ +// simple script to optionally elide source-map-support (or other optional modules) when running browserify. + +var stream = require("stream"), + Transform = stream.Transform, + resolve = require("browser-resolve"); + +var requirePattern = /require\s*\(\s*['"](source-map-support)['"]\s*\)/; +module.exports = function (file) { + return new Transform({ + transform: function (data, encoding, cb) { + var text = encoding === "buffer" ? data.toString("utf8") : data; + this.push(new Buffer(text.replace(requirePattern, function (originalText, moduleName) { + try { + resolve.sync(moduleName, { filename: file }); + return originalText; + } + catch (e) { + return "(function () { throw new Error(\"module '" + moduleName + "' not found.\"); })()"; + } + }), "utf8")); + cb(); + } + }); +}; \ No newline at end of file diff --git a/src/compiler/program.ts b/src/compiler/program.ts index 17155281db..a3c2320e83 100644 --- a/src/compiler/program.ts +++ b/src/compiler/program.ts @@ -644,7 +644,8 @@ namespace ts { fileExists: fileName => sys.fileExists(fileName), readFile: fileName => sys.readFile(fileName), trace: (s: string) => sys.write(s + newLine), - directoryExists: directoryName => sys.directoryExists(directoryName) + directoryExists: directoryName => sys.directoryExists(directoryName), + getEnvironmentVariable: sys.getEnvironmentVariable }; } @@ -995,7 +996,7 @@ namespace ts { const start = new Date().getTime(); // TODO(rbuckton): remove USE_TRANSFORMS condition when we switch to transforms permanently. - if (/^(y(es)?|t(rue|ransforms?)?|1|\+)$/i.test(sys.getEnvironmentVariable("USE_TRANSFORMS"))) { + if (/^(y(es)?|t(rue|ransforms?)?|1|\+)$/i.test(getEnvironmentVariable("USE_TRANSFORMS", host))) { options.experimentalTransforms = true; } diff --git a/src/compiler/sys.ts b/src/compiler/sys.ts index fce9408caf..416eca8880 100644 --- a/src/compiler/sys.ts +++ b/src/compiler/sys.ts @@ -74,6 +74,7 @@ namespace ts { readDirectory(path: string, extension?: string, exclude?: string[]): string[]; watchFile?(path: string, callback: FileWatcherCallback): FileWatcher; watchDirectory?(path: string, callback: DirectoryWatcherCallback, recursive?: boolean): FileWatcher; + getEnvironmentVariable?(name: string): string; }; export var sys: System = (function () { @@ -632,9 +633,7 @@ namespace ts { createDirectory: ChakraHost.createDirectory, getExecutingFilePath: () => ChakraHost.executingFile, getCurrentDirectory: () => ChakraHost.currentDirectory, - getEnvironmentVariable(name: string) { - return ""; - }, + getEnvironmentVariable: ChakraHost.getEnvironmentVariable || ((name: string) => ""), readDirectory: ChakraHost.readDirectory, exit: ChakraHost.quit, }; diff --git a/src/compiler/types.ts b/src/compiler/types.ts index ad304ac815..b303f09f82 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -2805,6 +2805,7 @@ namespace ts { * 'throw new Error("NotImplemented")' */ resolveModuleNames?(moduleNames: string[], containingFile: string): ResolvedModule[]; + getEnvironmentVariable?(name: string): string; } /* @internal */ diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts index 0504aca922..aaaf699834 100644 --- a/src/compiler/utilities.ts +++ b/src/compiler/utilities.ts @@ -169,6 +169,18 @@ namespace ts { return `${ file.fileName }(${ loc.line + 1 },${ loc.character + 1 })`; } + export function getEnvironmentVariable(name: string, host?: CompilerHost) { + if (host && host.getEnvironmentVariable) { + return host.getEnvironmentVariable(name); + } + + if (sys && sys.getEnvironmentVariable) { + return sys.getEnvironmentVariable(name); + } + + return ""; + } + export function getStartPosOfNode(node: Node): number { return node.pos; } diff --git a/src/harness/harness.ts b/src/harness/harness.ts index 5d8e051124..c77599bb65 100644 --- a/src/harness/harness.ts +++ b/src/harness/harness.ts @@ -1681,7 +1681,7 @@ namespace Harness { if (Error) (Error).stackTraceLimit = 1; } -if (ts.sys.tryEnableSourceMapsForHost && /^development$/i.test(ts.sys.getEnvironmentVariable("NODE_ENV"))) { +if (ts.sys && ts.sys.tryEnableSourceMapsForHost && /^development$/i.test(ts.sys.getEnvironmentVariable("NODE_ENV"))) { ts.sys.tryEnableSourceMapsForHost(); }