build(broccoli): store DiffResult for re-use only if DiffResult

One of the non-angular broccoli plugins returns a weird object. We can't
assume that all trees meet the contract that we expect them to meet, so
we do a typecheck before storing the result of the rebuild.

Closes #2662
This commit is contained in:
Caitlin Potter 2015-06-26 06:35:41 -05:00 committed by Tobias Bosch
parent 9a290f0c22
commit a93ec73e72

View File

@ -74,12 +74,12 @@ class DiffingPluginWrapper implements BroccoliTree {
// Otherwise, `this.diffResult` was produced from the output of the // Otherwise, `this.diffResult` was produced from the output of the
// inputTree's rebuild() method, and can be used without being checked. // inputTree's rebuild() method, and can be used without being checked.
// Set `this.diffResult` to null and return the previously stored value. // Set `this.diffResult` to null and return the previously stored value.
if (!tree.diffResult) {
let differ = index === false ? this.treeDiffer : this.treeDiffers[index];
return differ.diffTree();
}
let diffResult = tree.diffResult; let diffResult = tree.diffResult;
tree.diffResult = null; tree.diffResult = null;
if (!diffResult) {
let differ = index === false ? this.treeDiffer : this.treeDiffers[index];
diffResult = differ.diffTree();
}
return diffResult; return diffResult;
}; };
@ -93,10 +93,11 @@ class DiffingPluginWrapper implements BroccoliTree {
} }
private maybeStoreDiffResult(value: (DiffResult | void)) { private maybeStoreDiffResult(value: (DiffResult | void)) {
this.diffResult = value ? <DiffResult>(value) : null; if (!(value instanceof DiffResult)) value = null;
this.diffResult = <DiffResult>(value);
} }
rebuild() { rebuild(): (Promise<any>| void) {
try { try {
let firstRun = !this.initialized; let firstRun = !this.initialized;
this.init(); this.init();