fix(broccoli): ensure that inputTrees are stable
This commit is contained in:
parent
dc8dac7c35
commit
928ec1c5f8
|
@ -136,7 +136,12 @@ class DiffingPluginWrapper implements BroccoliTree {
|
||||||
|
|
||||||
|
|
||||||
private stabilizeTrees(trees: BroccoliTree[]) {
|
private stabilizeTrees(trees: BroccoliTree[]) {
|
||||||
return trees.map((tree) => this.stabilizeTree(tree));
|
// Prevent extensions to prevent array from being mutated from the outside.
|
||||||
|
// For-loop used to avoid re-allocating a new array.
|
||||||
|
for (let i = 0; i < trees.length; ++i) {
|
||||||
|
trees[i] = this.stabilizeTree(trees[i]);
|
||||||
|
}
|
||||||
|
return Object.freeze(trees);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -16,6 +16,45 @@ import {default as transpileWithTraceur, TRACEUR_RUNTIME_PATH} from '../traceur/
|
||||||
var projectRootDir = path.normalize(path.join(__dirname, '..', '..', '..', '..'));
|
var projectRootDir = path.normalize(path.join(__dirname, '..', '..', '..', '..'));
|
||||||
|
|
||||||
|
|
||||||
|
const kServedPaths = [
|
||||||
|
// Relative (to /modules) paths to benchmark directories
|
||||||
|
'benchmarks/src',
|
||||||
|
'benchmarks/src/change_detection',
|
||||||
|
'benchmarks/src/compiler',
|
||||||
|
'benchmarks/src/costs',
|
||||||
|
'benchmarks/src/di',
|
||||||
|
'benchmarks/src/element_injector',
|
||||||
|
'benchmarks/src/largetable',
|
||||||
|
'benchmarks/src/naive_infinite_scroll',
|
||||||
|
'benchmarks/src/tree',
|
||||||
|
|
||||||
|
// Relative (to /modules) paths to external benchmark directories
|
||||||
|
'benchmarks_external/src',
|
||||||
|
'benchmarks_external/src/compiler',
|
||||||
|
'benchmarks_external/src/largetable',
|
||||||
|
'benchmarks_external/src/naive_infinite_scroll',
|
||||||
|
'benchmarks_external/src/tree',
|
||||||
|
'benchmarks_external/src/tree/react',
|
||||||
|
|
||||||
|
// Relative (to /modules) paths to example directories
|
||||||
|
'examples/src/benchpress',
|
||||||
|
'examples/src/forms',
|
||||||
|
'examples/src/gestures',
|
||||||
|
'examples/src/hello_world',
|
||||||
|
'examples/src/key_events',
|
||||||
|
'examples/src/sourcemap',
|
||||||
|
'examples/src/todo',
|
||||||
|
'examples/src/material/button',
|
||||||
|
'examples/src/material/checkbox',
|
||||||
|
'examples/src/material/dialog',
|
||||||
|
'examples/src/material/grid_list',
|
||||||
|
'examples/src/material/input',
|
||||||
|
'examples/src/material/progress-linear',
|
||||||
|
'examples/src/material/radio',
|
||||||
|
'examples/src/material/switcher'
|
||||||
|
];
|
||||||
|
|
||||||
|
|
||||||
module.exports = function makeBrowserTree(options, destinationPath) {
|
module.exports = function makeBrowserTree(options, destinationPath) {
|
||||||
var modulesTree = new Funnel(
|
var modulesTree = new Funnel(
|
||||||
'modules',
|
'modules',
|
||||||
|
@ -84,26 +123,30 @@ module.exports = function makeBrowserTree(options, destinationPath) {
|
||||||
path.relative(projectRootDir, TRACEUR_RUNTIME_PATH)
|
path.relative(projectRootDir, TRACEUR_RUNTIME_PATH)
|
||||||
]
|
]
|
||||||
}));
|
}));
|
||||||
|
|
||||||
var vendorScripts_benchmark =
|
var vendorScripts_benchmark =
|
||||||
new Funnel('tools/build/snippets', {files: ['url_params_to_form.js'], destDir: '/'});
|
new Funnel('tools/build/snippets', {files: ['url_params_to_form.js'], destDir: '/'});
|
||||||
var vendorScripts_benchmarks_external =
|
var vendorScripts_benchmarks_external =
|
||||||
new Funnel('node_modules/angular', {files: ['angular.js'], destDir: '/'});
|
new Funnel('node_modules/angular', {files: ['angular.js'], destDir: '/'});
|
||||||
|
|
||||||
var servingTrees = [];
|
// Get scripts for each benchmark or example
|
||||||
|
let servingTrees = kServedPaths.reduce(getServedFunnels, []);
|
||||||
function copyVendorScriptsTo(destDir) {
|
function getServedFunnels(funnels, destDir) {
|
||||||
servingTrees.push(new Funnel(vendorScriptsTree, {srcDir: '/', destDir: destDir}));
|
let options = {
|
||||||
|
srcDir: '/',
|
||||||
|
destDir: destDir
|
||||||
|
};
|
||||||
|
funnels.push(new Funnel(vendorScriptsTree, options));
|
||||||
if (destDir.indexOf('benchmarks') > -1) {
|
if (destDir.indexOf('benchmarks') > -1) {
|
||||||
servingTrees.push(new Funnel(vendorScripts_benchmark, {srcDir: '/', destDir: destDir}));
|
funnels.push(new Funnel(vendorScripts_benchmark, options));
|
||||||
}
|
}
|
||||||
if (destDir.indexOf('benchmarks_external') > -1) {
|
if (destDir.indexOf('benchmarks_external') > -1) {
|
||||||
servingTrees.push(
|
funnels.push(new Funnel(vendorScripts_benchmarks_external, options));
|
||||||
new Funnel(vendorScripts_benchmarks_external, {srcDir: '/', destDir: destDir}));
|
|
||||||
}
|
}
|
||||||
|
return funnels;
|
||||||
}
|
}
|
||||||
|
|
||||||
function writeScriptsForPath(relativePath, result) {
|
function writeScriptsForPath(relativePath, result) {
|
||||||
copyVendorScriptsTo(path.dirname(relativePath));
|
|
||||||
return result.replace('@@FILENAME_NO_EXT', relativePath.replace(/\.\w+$/, ''));
|
return result.replace('@@FILENAME_NO_EXT', relativePath.replace(/\.\w+$/, ''));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -124,11 +167,7 @@ module.exports = function makeBrowserTree(options, destinationPath) {
|
||||||
replaceWithPath: writeScriptsForPath
|
replaceWithPath: writeScriptsForPath
|
||||||
});
|
});
|
||||||
|
|
||||||
// Copy all vendor scripts into all examples and benchmarks
|
var scripts = mergeTrees(servingTrees);
|
||||||
['benchmarks/src', 'benchmarks_external/src', 'examples/src/benchpress'].forEach(
|
|
||||||
copyVendorScriptsTo);
|
|
||||||
|
|
||||||
var scripts = mergeTrees(servingTrees, {overwrite: true});
|
|
||||||
var css = new Funnel(modulesTree, {include: ["**/*.css"]});
|
var css = new Funnel(modulesTree, {include: ["**/*.css"]});
|
||||||
var polymerFiles = new Funnel('.', {
|
var polymerFiles = new Funnel('.', {
|
||||||
files: [
|
files: [
|
||||||
|
|
Loading…
Reference in New Issue