diff --git a/.gitignore b/.gitignore
index 3147b8e8724..58a45545939 100644
--- a/.gitignore
+++ b/.gitignore
@@ -25,6 +25,7 @@ tests/baselines/reference/projectOutput/*
tests/baselines/local/projectOutput/*
tests/services/baselines/prototyping/local/*
tests/services/browser/typescriptServices.js
+scripts/configureNightly.js
scripts/processDiagnosticMessages.d.ts
scripts/processDiagnosticMessages.js
scripts/importDefinitelyTypedTests.js
diff --git a/Jakefile.js b/Jakefile.js
index bd5074b43d6..4ec394932a7 100644
--- a/Jakefile.js
+++ b/Jakefile.js
@@ -313,7 +313,7 @@ var processDiagnosticMessagesTs = path.join(scriptsDirectory, "processDiagnostic
var diagnosticMessagesJson = path.join(compilerDirectory, "diagnosticMessages.json");
var diagnosticInfoMapTs = path.join(compilerDirectory, "diagnosticInformationMap.generated.ts");
-file(processDiagnosticMessagesTs)
+file(processDiagnosticMessagesTs);
// processDiagnosticMessages script
compileFile(processDiagnosticMessagesJs,
@@ -338,12 +338,50 @@ file(diagnosticInfoMapTs, [processDiagnosticMessagesJs, diagnosticMessagesJson],
complete();
});
ex.run();
-}, {async: true})
+}, {async: true});
desc("Generates a diagnostic file in TypeScript based on an input JSON file");
-task("generate-diagnostics", [diagnosticInfoMapTs])
+task("generate-diagnostics", [diagnosticInfoMapTs]);
+// Publish nightly
+var configureNightlyJs = path.join(scriptsDirectory, "configureNightly.js");
+var configureNightlyTs = path.join(scriptsDirectory, "configureNightly.ts");
+var packageJson = "package.json";
+var programTs = path.join(compilerDirectory, "program.ts");
+
+file(configureNightlyTs);
+
+compileFile(/*outfile*/configureNightlyJs,
+ /*sources*/ [configureNightlyTs],
+ /*prereqs*/ [configureNightlyTs],
+ /*prefixes*/ [],
+ /*useBuiltCompiler*/ false,
+ /*noOutFile*/ false,
+ /*generateDeclarations*/ false,
+ /*outDir*/ undefined,
+ /*preserveConstEnums*/ undefined,
+ /*keepComments*/ false,
+ /*noResolve*/ false,
+ /*stripInternal*/ false);
+
+task("setDebugMode", function() {
+ useDebugMode = true;
+});
+
+task("configure-nightly", [configureNightlyJs], function() {
+ var cmd = "node " + configureNightlyJs + " " + packageJson + " " + programTs;
+ console.log(cmd);
+ exec(cmd);
+}, { async: true });
+
+desc("Configure, build, test, and publish the nightly release.");
+task("publish-nightly", ["configure-nightly", "LKG", "clean", "setDebugMode", "runtests"], function () {
+ var cmd = "npm publish --tag next";
+ console.log(cmd);
+ exec(cmd);
+});
+
// Local target to build the compiler and services
var tscFile = path.join(builtLocalDirectory, compilerFilename);
compileFile(tscFile, compilerSources, [builtLocalDirectory, copyright].concat(compilerSources), [copyright], /*useBuiltCompiler:*/ false);
@@ -440,11 +478,11 @@ file(specMd, [word2mdJs, specWord], function () {
child_process.exec(cmd, function () {
complete();
});
-}, {async: true})
+}, {async: true});
desc("Generates a Markdown version of the Language Specification");
-task("generate-spec", [specMd])
+task("generate-spec", [specMd]);
// Makes a new LKG. This target does not build anything, but errors if not all the outputs are present in the built/local directory
@@ -576,7 +614,7 @@ task("runtests", ["tests", builtLocalDirectory], function() {
exec(cmd, deleteTemporaryProjectOutput);
}, {async: true});
-desc("Generates code coverage data via instanbul")
+desc("Generates code coverage data via instanbul");
task("generate-code-coverage", ["tests", builtLocalDirectory], function () {
var cmd = 'istanbul cover node_modules/mocha/bin/_mocha -- -R min -t ' + testTimeout + ' ' + run;
console.log(cmd);
@@ -619,7 +657,7 @@ task("runtests-browser", ["tests", "browserify", builtLocalDirectory], function(
function getDiffTool() {
var program = process.env['DIFF']
if (!program) {
- fail("Add the 'DIFF' environment variable to the path of the program you want to use.")
+ fail("Add the 'DIFF' environment variable to the path of the program you want to use.");
}
return program;
}
@@ -628,14 +666,14 @@ function getDiffTool() {
desc("Diffs the compiler baselines using the diff tool specified by the 'DIFF' environment variable");
task('diff', function () {
var cmd = '"' + getDiffTool() + '" ' + refBaseline + ' ' + localBaseline;
- console.log(cmd)
+ console.log(cmd);
exec(cmd);
}, {async: true});
desc("Diffs the RWC baselines using the diff tool specified by the 'DIFF' environment variable");
task('diff-rwc', function () {
var cmd = '"' + getDiffTool() + '" ' + refRwcBaseline + ' ' + localRwcBaseline;
- console.log(cmd)
+ console.log(cmd);
exec(cmd);
}, {async: true});
diff --git a/package.json b/package.json
index 70ada6fef15..c8b30f9de1c 100644
--- a/package.json
+++ b/package.json
@@ -2,7 +2,7 @@
"name": "typescript",
"author": "Microsoft Corp.",
"homepage": "http://typescriptlang.org/",
- "version": "1.5.3",
+ "version": "1.6.0",
"license": "Apache-2.0",
"description": "TypeScript is a language for application scale JavaScript development",
"keywords": [
diff --git a/scripts/configureNightly.ts b/scripts/configureNightly.ts
new file mode 100644
index 00000000000..640f330b376
--- /dev/null
+++ b/scripts/configureNightly.ts
@@ -0,0 +1,73 @@
+///
+
+/**
+ * A minimal description for a parsed package.json object.
+ */
+interface PackageJson {
+ name: string;
+ version: string;
+ keywords: string[];
+}
+
+function main(): void {
+ const sys = ts.sys;
+ if (sys.args.length < 2) {
+ sys.write("Usage:" + sys.newLine)
+ sys.write("\tnode configureNightly.js " + sys.newLine);
+ return;
+ }
+
+ // Acquire the version from the package.json file and modify it appropriately.
+ const packageJsonFilePath = ts.normalizePath(sys.args[0]);
+ const packageJsonContents = sys.readFile(packageJsonFilePath);
+ const packageJsonValue: PackageJson = JSON.parse(packageJsonContents);
+
+ const nightlyVersion = getNightlyVersionString(packageJsonValue.version);
+
+ // Modify the package.json structure
+ packageJsonValue.version = nightlyVersion;
+
+ // Acquire and modify the source file that exposes the version string.
+ const tsFilePath = ts.normalizePath(sys.args[1]);
+ const tsFileContents = sys.readFile(tsFilePath);
+ const versionAssignmentRegExp = /export\s+const\s+version\s+=\s+".*";/;
+ const modifiedTsFileContents = tsFileContents.replace(versionAssignmentRegExp, `export const version = "${nightlyVersion}";`);
+
+ // Ensure we are actually changing something - the user probably wants to know that the update failed.
+ if (tsFileContents === modifiedTsFileContents) {
+ let err = `\n '${tsFilePath}' was not updated while configuring for a nightly publish.\n `;
+
+ if (tsFileContents.match(versionAssignmentRegExp)) {
+ err += `Ensure that you have not already run this script; otherwise, erase your changes using 'git checkout -- "${tsFilePath}"'.`;
+ }
+ else {
+ err += `The file seems to no longer have a string matching '${versionAssignmentRegExp}'.`;
+ }
+
+ throw err + "\n";
+ }
+
+ // Finally write the changes to disk.
+ sys.writeFile(packageJsonFilePath, JSON.stringify(packageJsonValue, /*replacer:*/ undefined, /*space:*/ 4))
+ sys.writeFile(tsFilePath, modifiedTsFileContents);
+}
+
+function getNightlyVersionString(versionString: string): string {
+ // If the version string already contains "-nightly",
+ // then get the base string and update based on that.
+ const dashNightlyPos = versionString.indexOf("-dev");
+ if (dashNightlyPos >= 0) {
+ versionString = versionString.slice(0, dashNightlyPos);
+ }
+
+ // We're going to append a representation of the current time at the end of the current version.
+ // String.prototype.toISOString() returns a 24-character string formatted as 'YYYY-MM-DDTHH:mm:ss.sssZ',
+ // but we'd prefer to just remove separators and limit ourselves to YYYYMMDD.
+ // UTC time will always be implicit here.
+ const now = new Date();
+ const timeStr = now.toISOString().replace(/:|T|\.|-/g, "").slice(0, 8);
+
+ return `${versionString}-dev.${timeStr}`;
+}
+
+main();
\ No newline at end of file
diff --git a/src/compiler/program.ts b/src/compiler/program.ts
index 5ce4846b43b..d79f617e1cf 100644
--- a/src/compiler/program.ts
+++ b/src/compiler/program.ts
@@ -8,7 +8,7 @@ namespace ts {
/* @internal */ export let ioWriteTime = 0;
/** The version of the TypeScript compiler release */
- export const version = "1.5.3";
+ export const version = "1.6.0";
export function findConfigFile(searchPath: string): string {
let fileName = "tsconfig.json";
@@ -341,7 +341,7 @@ namespace ts {
});
}
- function getDeclarationDiagnosticsForFile(sourceFile: SourceFile, cancellationToken: CancellationToken): Diagnostic[] {
+ function getDeclarationDiagnosticsForFile(sourceFile: SourceFile, cancellationToken: CancellationToken): Diagnostic[] {
return runWithCancellationToken(() => {
if (!isDeclarationFile(sourceFile)) {
let resolver = getDiagnosticsProducingTypeChecker().getEmitResolver(sourceFile, cancellationToken);
@@ -350,7 +350,7 @@ namespace ts {
return ts.getDeclarationDiagnostics(getEmitHost(writeFile), resolver, sourceFile);
}
});
- }
+ }
function getOptionsDiagnostics(): Diagnostic[] {
let allDiagnostics: Diagnostic[] = [];