X Tutup
Skip to content

Commit 34501aa

Browse files
committed
chore(build): move more broccoli support inside the TypeScript boundary
1 parent dbfc4c1 commit 34501aa

File tree

4 files changed

+81
-80
lines changed

4 files changed

+81
-80
lines changed

gulpfile.js

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
var broccoliBuild = require('./tools/broccoli/gulp');
2-
31
var format = require('gulp-clang-format');
42
var gulp = require('gulp');
53
var gulpPlugins = require('gulp-load-plugins')();
@@ -33,7 +31,12 @@ var util = require('./tools/build/util');
3331
var bundler = require('./tools/build/bundle');
3432
var replace = require('gulp-replace');
3533
var insert = require('gulp-insert');
36-
var makeBroccoliTree = require('./tools/broccoli/make-broccoli-tree');
34+
35+
// dynamic require in build.broccoli.tools so we can bootstrap TypeScript compilation
36+
function missingDynamicBroccoli() {
37+
throw new Error('ERROR: build.broccoli.tools task should have been run before using broccoli');
38+
}
39+
var makeBroccoliTree = missingDynamicBroccoli, broccoliBuild = missingDynamicBroccoli;
3740

3841
// Note: when DART_SDK is not found, all gulp tasks ending with `.dart` will be skipped.
3942

@@ -769,7 +772,11 @@ gulp.task('build.dart', function(done) {
769772
gulp.task('build.broccoli.tools', function() {
770773
var tsResult = gulp.src('tools/broccoli/**/*.ts')
771774
.pipe(tsc({ target: 'ES5', module: 'commonjs' }));
772-
return tsResult.js.pipe(gulp.dest('dist/broccoli'));
775+
return tsResult.js.pipe(gulp.dest('dist/broccoli'))
776+
.on('end', function() {
777+
makeBroccoliTree = require('./dist/broccoli/make-broccoli-tree');
778+
broccoliBuild = require('./dist/broccoli/gulp');
779+
});
773780
});
774781

775782
gulp.task('broccoli.js.dev', ['build.broccoli.tools'], function() {
Lines changed: 31 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
'use strict';
2-
31
var broccoli = require('broccoli');
42
var copyDereferenceSync = require('copy-dereference').sync;
53
var fse = require('fs-extra');
@@ -32,45 +30,43 @@ function broccoliBuild(tree, outputRoot) {
3230

3331
var builder = new broccoli.Builder(tree);
3432
return builder.build()
35-
.then(function (hash) {
36-
console.log('=== Stats for %s (total: %ds) ===', outputRoot, Math.round(hash.totalTime/1000000)/1000);
37-
printSlowTrees(hash.graph);
33+
.then(function(hash) {
34+
console.log('=== Stats for %s (total: %ds) ===', outputRoot,
35+
Math.round(hash.totalTime / 1000000) / 1000);
36+
printSlowTrees(hash.graph);
3837

39-
var dir = hash.directory;
40-
try {
41-
time('Write build output', function() {
42-
copyDereferenceSync(path.join(dir, outputRoot), distPath);
43-
});
44-
} catch (err) {
45-
if (err.code === 'EEXIST') err.message += ' (we cannot build into an existing directory)';
46-
throw err;
47-
}
48-
})
49-
.finally(function () {
50-
time('Build cleanup', function() {
51-
builder.cleanup();
52-
});
38+
var dir = hash.directory;
39+
try {
40+
time('Write build output', function() {
41+
copyDereferenceSync(path.join(dir, outputRoot), distPath);
42+
});
43+
} catch (err) {
44+
if (err.code === 'EEXIST') err.message += ' (we cannot build into an existing directory)';
45+
throw err;
46+
}
47+
})
48+
.finally(function() {
49+
time('Build cleanup', function() { builder.cleanup(); });
5350

54-
console.log('=== Done building %s ===', outputRoot);
55-
})
56-
.catch(function (err) {
57-
// Should show file and line/col if present
58-
if (err.file) {
59-
console.error('File: ' + err.file);
60-
}
61-
if (err.stack) {
62-
console.error(err.stack);
63-
} else {
64-
console.error(err);
65-
}
66-
console.error('\nBuild failed');
67-
process.exit(1);
68-
});
51+
console.log('=== Done building %s ===', outputRoot);
52+
})
53+
.catch(function(err) {
54+
// Should show file and line/col if present
55+
if (err.file) {
56+
console.error('File: ' + err.file);
57+
}
58+
if (err.stack) {
59+
console.error(err.stack);
60+
} else {
61+
console.error(err);
62+
}
63+
console.error('\nBuild failed');
64+
process.exit(1);
65+
});
6966
}
7067

7168

7269
function time(label, work) {
73-
7470
var start = Date.now();
7571
work();
7672
var duration = Date.now() - start;
Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,9 @@ var path = require('path');
33

44
module.exports = read;
55
function read(file) {
6-
var content = fs.readFileSync(path.join(__dirname, file + '.html'), {encoding: 'utf-8'});
7-
// TODO(broccoli): we don't really need this, it's here to make the output match the tools/build/html
6+
var content = fs.readFileSync(path.join('tools/broccoli/html-replace', file + '.html'),
7+
{encoding: 'utf-8'});
8+
// TODO(broccoli): we don't really need this, it's here to make the output match the
9+
// tools/build/html
810
return content.substring(0, content.lastIndexOf("\n"));
911
}
10-
Lines changed: 35 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -8,34 +8,33 @@ var path = require('path');
88
var renderLodashTemplate = require('broccoli-lodash');
99
var replace = require('broccoli-replace');
1010
var stew = require('broccoli-stew');
11-
var ts2dart;
12-
var TraceurCompiler;
13-
var TypescriptCompiler;
11+
var ts2dart = require('./broccoli-ts2dart');
12+
var TraceurCompiler = require('./traceur');
13+
var TypescriptCompiler = require('./typescript');
1414

1515
var projectRootDir = path.normalize(path.join(__dirname, '..', '..'));
1616

1717

1818
module.exports = function makeBroccoliTree(name) {
19-
if (!TraceurCompiler) TraceurCompiler = require('../../dist/broccoli/traceur');
20-
if (!TypescriptCompiler) TypescriptCompiler = require('../../dist/broccoli/typescript');
21-
if (!ts2dart) ts2dart = require('../../dist/broccoli/broccoli-ts2dart');
22-
2319
switch (name) {
24-
case 'dev': return makeBrowserTree({name: name, typeAssertions: true});
25-
case 'prod': return makeBrowserTree({name: name, typeAssertions: false});
26-
case 'cjs': return makeCjsTree();
27-
case 'dart': return makeDartTree();
28-
default: throw new Error('Unknown build type: ' + name);
20+
case 'dev':
21+
return makeBrowserTree({name: name, typeAssertions: true});
22+
case 'prod':
23+
return makeBrowserTree({name: name, typeAssertions: false});
24+
case 'cjs':
25+
return makeCjsTree();
26+
case 'dart':
27+
return makeDartTree();
28+
default:
29+
throw new Error('Unknown build type: ' + name);
2930
}
3031
};
3132

3233

3334
function makeBrowserTree(options) {
34-
var modulesTree = new Funnel('modules', {
35-
include: ['**/**'],
36-
exclude: ['**/*.cjs', 'benchmarks/e2e_test/**'],
37-
destDir: '/'
38-
});
35+
var modulesTree = new Funnel(
36+
'modules',
37+
{include: ['**/**'], exclude: ['**/*.cjs', 'benchmarks/e2e_test/**'], destDir: '/'});
3938

4039
// Use Traceur to transpile original sources to ES6
4140
var es6Tree = new TraceurCompiler(modulesTree, '.es6', '.map', {
@@ -52,14 +51,14 @@ function makeBrowserTree(options) {
5251

5352

5453
// Call Traceur again to lower the ES6 build tree to ES5
55-
var es5Tree = new TraceurCompiler(es6Tree, '.js', '.js.map', {modules: 'instantiate', sourceMaps: true});
54+
var es5Tree =
55+
new TraceurCompiler(es6Tree, '.js', '.js.map', {modules: 'instantiate', sourceMaps: true});
5656

5757
// Now we add a few more files to the es6 tree that Traceur should not see
58-
['angular2', 'rtts_assert'].forEach(
59-
function (destDir) {
60-
var extras = new Funnel('tools/build', {files: ['es5build.js'], destDir: destDir});
61-
es6Tree = mergeTrees([es6Tree, extras]);
62-
});
58+
['angular2', 'rtts_assert'].forEach(function(destDir) {
59+
var extras = new Funnel('tools/build', {files: ['es5build.js'], destDir: destDir});
60+
es6Tree = mergeTrees([es6Tree, extras]);
61+
});
6362

6463

6564
var vendorScriptsTree = flatten(new Funnel('.', {
@@ -76,9 +75,9 @@ function makeBrowserTree(options) {
7675
]
7776
}));
7877
var vendorScripts_benchmark =
79-
new Funnel('tools/build/snippets', {files: ['url_params_to_form.js'], destDir: '/'});
78+
new Funnel('tools/build/snippets', {files: ['url_params_to_form.js'], destDir: '/'});
8079
var vendorScripts_benchmarks_external =
81-
new Funnel('node_modules/angular', {files: ['angular.js'], destDir: '/'});
80+
new Funnel('node_modules/angular', {files: ['angular.js'], destDir: '/'});
8281

8382
var servingTrees = [];
8483

@@ -89,7 +88,7 @@ function makeBrowserTree(options) {
8988
}
9089
if (destDir.indexOf('benchmarks_external') > -1) {
9190
servingTrees.push(
92-
new Funnel(vendorScripts_benchmarks_external, {srcDir: '/', destDir: destDir}));
91+
new Funnel(vendorScripts_benchmarks_external, {srcDir: '/', destDir: destDir}));
9392
}
9493
}
9594

@@ -117,7 +116,7 @@ function makeBrowserTree(options) {
117116

118117
// Copy all vendor scripts into all examples and benchmarks
119118
['benchmarks/src', 'benchmarks_external/src', 'examples/src/benchpress'].forEach(
120-
copyVendorScriptsTo);
119+
copyVendorScriptsTo);
121120

122121
var scripts = mergeTrees(servingTrees, {overwrite: true});
123122
var css = new Funnel(modulesTree, {include: ["**/*.css"]});
@@ -161,11 +160,10 @@ function makeCjsTree() {
161160
});
162161

163162
// Now we add the LICENSE file into all the folders that will become npm packages
164-
outputPackages.forEach(
165-
function(destDir) {
166-
var license = new Funnel('.', {files: ['LICENSE'], destDir: destDir});
167-
cjsTree = mergeTrees([cjsTree, license]);
168-
});
163+
outputPackages.forEach(function(destDir) {
164+
var license = new Funnel('.', {files: ['LICENSE'], destDir: destDir});
165+
cjsTree = mergeTrees([cjsTree, license]);
166+
});
169167

170168
// Get all docs and related assets and prepare them for js build
171169
var docs = new Funnel(modulesTree, {include: ['**/*.md', '**/*.png'], exclude: ['**/*.dart.md']});
@@ -191,11 +189,10 @@ function makeCjsTree() {
191189
};
192190

193191
// Add a .template extension since renderLodashTemplate strips one extension
194-
var packageJsons = stew.rename(new Funnel(modulesTree, {include: ['**/package.json']}), '.json', '.json.template');
195-
packageJsons = renderLodashTemplate(packageJsons, {
196-
files: ["**/**"],
197-
context: { 'packageJson': COMMON_PACKAGE_JSON }
198-
});
192+
var packageJsons = stew.rename(new Funnel(modulesTree, {include: ['**/package.json']}), '.json',
193+
'.json.template');
194+
packageJsons = renderLodashTemplate(
195+
packageJsons, {files: ["**/**"], context: {'packageJson': COMMON_PACKAGE_JSON}});
199196

200197

201198
var typescriptTree = new TypescriptCompiler(modulesTree, {
@@ -251,7 +248,7 @@ function makeDartTree() {
251248
return path.join.apply(path, parts);
252249
}
253250
}
254-
throw new Error('Failed to match any path', relativePath);
251+
throw new Error('Failed to match any path: ' + relativePath);
255252
});
256253

257254
// Move the tree under the 'dart' folder.

0 commit comments

Comments
 (0)
X Tutup