diff --git a/Brocfile-js_cjs.js b/Brocfile-js_cjs.js
index c4c12edab2..f21722142f 100644
--- a/Brocfile-js_cjs.js
+++ b/Brocfile-js_cjs.js
@@ -1,8 +1,8 @@
var Funnel = require('broccoli-funnel');
var mergeTrees = require('broccoli-merge-trees');
var stew = require('broccoli-stew');
-var TraceurCompiler = require('./tools/broccoli/traceur');
-var TypescriptCompiler = require('./tools/broccoli/typescript');
+var TraceurCompiler = require('./dist/broccoli/traceur');
+var TypescriptCompiler = require('./dist/broccoli/typescript');
var renderLodashTemplate = require('broccoli-lodash');
var modulesTree = new Funnel(
diff --git a/Brocfile-js_dev.js b/Brocfile-js_dev.js
index 848c27185f..fabe5c226b 100644
--- a/Brocfile-js_dev.js
+++ b/Brocfile-js_dev.js
@@ -2,7 +2,7 @@ var Funnel = require('broccoli-funnel');
var flatten = require('broccoli-flatten');
var mergeTrees = require('broccoli-merge-trees');
var stew = require('broccoli-stew');
-var TraceurCompiler = require('./tools/broccoli/traceur');
+var TraceurCompiler = require('./dist/broccoli/traceur');
var replace = require('broccoli-replace');
var htmlReplace = require('./tools/broccoli/html-replace');
var path = require('path');
diff --git a/Brocfile-js_prod.js b/Brocfile-js_prod.js
index 3b89cbeac0..763b1b1031 100644
--- a/Brocfile-js_prod.js
+++ b/Brocfile-js_prod.js
@@ -2,7 +2,7 @@ var Funnel = require('broccoli-funnel');
var flatten = require('broccoli-flatten');
var mergeTrees = require('broccoli-merge-trees');
var stew = require('broccoli-stew');
-var TraceurCompiler = require('./tools/broccoli/traceur');
+var TraceurCompiler = require('./dist/broccoli/traceur');
var replace = require('broccoli-replace');
var htmlReplace = require('./tools/broccoli/html-replace');
var path = require('path');
diff --git a/gulpfile.js b/gulpfile.js
index 10a40a1e17..0a2e9a33c6 100644
--- a/gulpfile.js
+++ b/gulpfile.js
@@ -737,11 +737,17 @@ gulp.task('build.dart', function(done) {
);
});
-gulp.task('broccoli.js.dev', function() {
+gulp.task('build.broccoli.tools', function() {
+ var tsResult = gulp.src('tools/broccoli/**/*.ts')
+ .pipe(tsc({ target: 'ES5', module: 'commonjs' }));
+ return tsResult.js.pipe(gulp.dest('dist/broccoli'));
+});
+
+gulp.task('broccoli.js.dev', ['build.broccoli.tools'], function() {
return broccoliBuild(require('./Brocfile-js_dev.js'), path.join('js', 'dev'));
});
-gulp.task('broccoli.js.prod', function() {
+gulp.task('broccoli.js.prod', ['build.broccoli.tools'], function() {
return broccoliBuild(require('./Brocfile-js_prod.js'), path.join('js', 'prod'));
});
@@ -755,7 +761,7 @@ gulp.task('build.js.dev', function(done) {
gulp.task('build.js.prod', ['broccoli.js.prod']);
-gulp.task('broccoli.js.cjs', function() {
+gulp.task('broccoli.js.cjs', ['build.broccoli.tools'], function() {
return broccoliBuild(require('./Brocfile-js_cjs.js'), path.join('js', 'cjs'));
});
gulp.task('build.js.cjs', function(done) {
diff --git a/package.json b/package.json
index 36953df3a8..b1803424c2 100644
--- a/package.json
+++ b/package.json
@@ -20,7 +20,7 @@
"url": "https://github.com/angular/angular.git"
},
"scripts": {
- "preinstall": "npm install tsd && tsd update --config modules/angular2/tsd.json",
+ "preinstall": "npm install tsd && tsd update --config modules/angular2/tsd.json && tsd update --config tools/tsd.json",
"postinstall": "webdriver-manager update && bower install && gulp pubget.dart",
"test": "gulp test.all.js && gulp test.all.dart"
},
diff --git a/tools/broccoli/traceur/index.js b/tools/broccoli/traceur/index.js
deleted file mode 100644
index f90359bdaf..0000000000
--- a/tools/broccoli/traceur/index.js
+++ /dev/null
@@ -1,56 +0,0 @@
-var __extends = this.__extends || function (d, b) {
- for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
- function __() { this.constructor = d; }
- __.prototype = b.prototype;
- d.prototype = new __();
-};
-var fs = require('fs');
-var fse = require('fs-extra');
-var path = require('path');
-var traceur = require('../../transpiler');
-var walkSync = require('walk-sync');
-var Writer = require('broccoli-writer');
-var xtend = require('xtend');
-var TraceurFilter = (function (_super) {
- __extends(TraceurFilter, _super);
- function TraceurFilter(inputTree, destExtension, destSourceMapExtension, options) {
- if (options === void 0) { options = {}; }
- this.inputTree = inputTree;
- this.destExtension = destExtension;
- this.destSourceMapExtension = destSourceMapExtension;
- this.options = options;
- }
- TraceurFilter.prototype.write = function (readTree, destDir) {
- var _this = this;
- return readTree(this.inputTree).then(function (srcDir) {
- walkSync(srcDir).filter(function (filepath) {
- var extension = path.extname(filepath).toLowerCase();
- return extension === '.js' || extension === '.es6' || extension === '.cjs';
- }).map(function (filepath) {
- var options = xtend({
- filename: filepath
- }, _this.options);
- var fsOpts = {
- encoding: 'utf-8'
- };
- var sourcecode = fs.readFileSync(path.join(srcDir, filepath), fsOpts);
- var result = traceur.compile(options, filepath, sourcecode);
- // TODO: we should fix the sourceMappingURL written by Traceur instead of overriding
- // (but we might switch to typescript first)
- var mapFilepath = filepath.replace(/\.\w+$/, '') + _this.destSourceMapExtension;
- result.js = result.js + ("\n//# sourceMappingURL=./" + path.basename(mapFilepath));
- var destFilepath = filepath.replace(/\.\w+$/, _this.destExtension);
- var destFile = path.join(destDir, destFilepath);
- fse.mkdirsSync(path.dirname(destFile));
- fs.writeFileSync(destFile, result.js, fsOpts);
- var destMap = path.join(destDir, mapFilepath);
- result.sourceMap.file = destFilepath;
- fs.writeFileSync(destMap, JSON.stringify(result.sourceMap), fsOpts);
- });
- });
- };
- TraceurFilter.RUNTIME_PATH = traceur.RUNTIME_PATH;
- return TraceurFilter;
-})(Writer);
-module.exports = TraceurFilter;
-//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/tools/broccoli/traceur/index.ts b/tools/broccoli/traceur/index.ts
index b0c3acc496..5992fb21ed 100644
--- a/tools/broccoli/traceur/index.ts
+++ b/tools/broccoli/traceur/index.ts
@@ -1,16 +1,21 @@
-var fs = require('fs');
-var fse = require('fs-extra');
-var path = require('path');
-var traceur = require('../../transpiler');
+///
+///
+///
+import fs = require('fs');
+import fse = require('fs-extra');
+import path = require('path');
+var traceur = require('../../../tools/transpiler');
var walkSync = require('walk-sync');
-var Writer = require('broccoli-writer');
+import Writer = require('broccoli-writer');
var xtend = require('xtend');
class TraceurFilter extends Writer {
static RUNTIME_PATH = traceur.RUNTIME_PATH;
constructor(private inputTree, private destExtension: string,
- private destSourceMapExtension: string, private options = {}) {}
+ private destSourceMapExtension: string, private options = {}) {
+ super();
+ }
write(readTree, destDir) {
return readTree(this.inputTree)
diff --git a/tools/broccoli/typescript/index.js b/tools/broccoli/typescript/index.js
deleted file mode 100644
index 1a61710a7d..0000000000
--- a/tools/broccoli/typescript/index.js
+++ /dev/null
@@ -1,61 +0,0 @@
-var __extends = this.__extends || function (d, b) {
- for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
- function __() { this.constructor = d; }
- __.prototype = b.prototype;
- d.prototype = new __();
-};
-var fs = require('fs');
-var path = require('path');
-var ts = require('typescript');
-var walkSync = require('walk-sync');
-var Writer = require('broccoli-writer');
-var xtend = require('xtend');
-var TSCompiler = (function (_super) {
- __extends(TSCompiler, _super);
- function TSCompiler(inputTree, options) {
- if (options === void 0) { options = {}; }
- _super.call(this, inputTree, options);
- this.inputTree = inputTree;
- this.options = options;
- }
- TSCompiler.prototype.write = function (readTree, destDir) {
- var options = xtend({
- outDir: destDir
- }, this.options);
- if (this.options.outDir) {
- options.outDir = path.resolve(destDir, options.outDir);
- }
- if (options.out) {
- options.out = path.resolve(destDir, options.out);
- }
- options.target = ts.ScriptTarget[options.target];
- return readTree(this.inputTree).then(function (srcDir) {
- var files = walkSync(srcDir).filter(function (filepath) {
- return path.extname(filepath).toLowerCase() === '.ts';
- }).map(function (filepath) {
- return path.resolve(srcDir, filepath);
- });
- if (files.length > 0) {
- var program = ts.createProgram(files, options);
- var emitResult = program.emit();
- var allDiagnostics = ts.getPreEmitDiagnostics(program).concat(emitResult.diagnostics);
- var errMsg = '';
- allDiagnostics.forEach(function (diagnostic) {
- var message = ts.flattenDiagnosticMessageText(diagnostic.messageText, '\n');
- if (!diagnostic.file) {
- errMsg += "\n" + message;
- return;
- }
- var _a = diagnostic.file.getLineAndCharacterOfPosition(diagnostic.start), line = _a.line, character = _a.character;
- errMsg += "\n" + diagnostic.file.fileName + " (" + (line + 1) + "," + (character + 1) + "): " + message;
- });
- if (emitResult.emitSkipped) {
- throw new Error(errMsg);
- }
- }
- });
- };
- return TSCompiler;
-})(Writer);
-module.exports = TSCompiler;
-//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/tools/broccoli/typescript/index.ts b/tools/broccoli/typescript/index.ts
index 04153814c5..bb01e178ee 100644
--- a/tools/broccoli/typescript/index.ts
+++ b/tools/broccoli/typescript/index.ts
@@ -1,12 +1,16 @@
-var fs = require('fs');
-var path = require('path');
-var ts = require('typescript');
+///
+///
+///
+
+import fs = require('fs');
+import path = require('path');
+import ts = require('typescript');
var walkSync = require('walk-sync');
-var Writer = require('broccoli-writer');
+import Writer = require('broccoli-writer');
var xtend = require('xtend');
class TSCompiler extends Writer {
- constructor(private inputTree, private options = {}) { super(inputTree, options); }
+ constructor(private inputTree, private options: ts.CompilerOptions = {}) { super(); }
write(readTree, destDir) {
var options: ts.CompilerOptions = xtend({outDir: destDir}, this.options);
@@ -16,7 +20,7 @@ class TSCompiler extends Writer {
if (options.out) {
options.out = path.resolve(destDir, options.out);
}
- options.target = ts.ScriptTarget[options.target];
+ options.target = (ts).ScriptTarget[options.target];
return readTree(this.inputTree)
.then(srcDir => {
var files = walkSync(srcDir)