From be7d4c44ab8e9d5dd07315de7d3b6a0d9b665a11 Mon Sep 17 00:00:00 2001 From: Robert Jackson Date: Fri, 2 Dec 2016 23:10:35 -0500 Subject: [PATCH] Refactor to shared utility function for addonPreprocessTree / addonPostprocessTree. --- lib/broccoli/ember-app.js | 17 ++----- lib/models/addon.js | 73 ++--------------------------- lib/utilities/addon-process-tree.js | 11 +++++ 3 files changed, 19 insertions(+), 82 deletions(-) create mode 100644 lib/utilities/addon-process-tree.js diff --git a/lib/broccoli/ember-app.js b/lib/broccoli/ember-app.js index 8b88765f766..495c0a9f2f1 100644 --- a/lib/broccoli/ember-app.js +++ b/lib/broccoli/ember-app.js @@ -40,11 +40,13 @@ const omitBy = require('ember-cli-lodash-subset').omitBy; const isNull = require('ember-cli-lodash-subset').isNull; const Funnel = require('broccoli-funnel'); const funnelReducer = require('broccoli-funnel-reducer'); -let logger = require('heimdalljs-logger')('ember-cli:ember-app'); +const logger = require('heimdalljs-logger')('ember-cli:ember-app'); +const addonProcessTree = require('../utilities/addon-process-tree'); let SECRET_DEPRECATION_PREVENTION_SYMBOL = crypto.randomBytes(8).toString('hex'); let DEFAULT_CONFIG = { + storeConfigInMeta: true, autoRun: true, outputPaths: { @@ -552,15 +554,7 @@ EmberApp.prototype.addonTreesFor = function(type) { @return {Tree} Processed tree */ EmberApp.prototype.addonPostprocessTree = function(type, tree) { - let workingTree = tree; - - this.project.addons.forEach(addon => { - if (addon.postprocessTree) { - workingTree = addon.postprocessTree(type, workingTree); - } - }); - - return workingTree; + return addonProcessTree(this.project, 'postprocessTree', type, tree); }; @@ -597,8 +591,7 @@ EmberApp.prototype.addonPostprocessTree = function(type, tree) { @return {Tree} Processed tree */ EmberApp.prototype.addonPreprocessTree = function(type, tree) { - return this.project.addons.reduce((workingTree, addon) => - (addon.preprocessTree ? addon.preprocessTree(type, workingTree) : workingTree), tree); + return addonProcessTree(this.project, 'preprocessTree', type, tree); }; /** diff --git a/lib/models/addon.js b/lib/models/addon.js index a582b2f6aed..60cc7287b6c 100644 --- a/lib/models/addon.js +++ b/lib/models/addon.js @@ -112,6 +112,7 @@ let ADDON_TREE_CACHE = { function _resetTreeCache() { ADDON_TREE_CACHE.clear(); } +var addonProcessTree = require('../utilities/addon-process-tree'); function warn(message) { if (this.ui) { @@ -358,81 +359,13 @@ let addonProto = { }).filter(Boolean); }, - /** - Runs addon post-processing on a given tree and returns the processed tree. - - This enables addons to do process immediately **after** the preprocessor for a - given type is run, but before concatenation occurs. If an addon wishes to - apply a transform before the preprocessors run, they can instead implement the - preprocessTree hook. - - To utilize this addons implement `postprocessTree` hook. - - An example, would be to apply some broccoli transform on all JS files, but - only after the existing pre-processors have run. - - ```js - module.exports = { - name: 'my-cool-addon', - postprocessTree: function(type, tree) { - if (type === 'js') { - return someBroccoliTransform(tree); - } - - return tree; - } - } - ``` - - @private - @method addonPostprocessTree - @param {String} type Type of tree - @param {Tree} tree Tree to process - @return {Tree} Processed tree - */ _addonPostprocessTree: function addonPostprocessTree(type, tree) { - return this.addons.reduce(function(workingTree, addon) { - return addon.postprocessTree ? addon.postprocessTree(type, workingTree) : workingTree; - }, tree); + return addonProcessTree(this, 'postprocessTree', type, tree); }, - /** - Runs addon pre-processing on a given tree and returns the processed tree. - - This enables addons to do process immediately **before** the preprocessor for a - given type is run. If an addon wishes to apply a transform after the - preprocessors run, they can instead implement the postprocessTree hook. - - To utilize this addons implement `preprocessTree` hook. - - An example, would be to remove some set of files before the preprocessors run. - - ```js - var stew = require('broccoli-stew'); - - module.exports = { - name: 'my-cool-addon', - preprocessTree: function(type, tree) { - if (type === 'js' && type === 'template') { - return stew.rm(tree, someGlobPattern); - } - - return tree; - } - } - ``` - - @private - @method addonPreprocessTree - @param {String} type Type of tree - @param {Tree} tree Tree to process - @return {Tree} Processed tree - */ _addonPreprocessTree: function addonPreprocessTree(type, tree) { - return this.addons.reduce(function(workingTree, addon) { - return addon.preprocessTree ? addon.preprocessTree(type, workingTree) : workingTree; - }, tree); + return addonProcessTree(this, 'preprocessTree', type, tree); }, /** diff --git a/lib/utilities/addon-process-tree.js b/lib/utilities/addon-process-tree.js new file mode 100644 index 00000000000..73b13e3ebe5 --- /dev/null +++ b/lib/utilities/addon-process-tree.js @@ -0,0 +1,11 @@ +'use strict'; + +module.exports = function addonProcessTree(projectOrAddon, hook, processType, tree) { + return projectOrAddon.addons.reduce((workingTree, addon) => { + if (addon[hook]) { + return addon[hook](processType, workingTree); + } + + return workingTree; + }, tree); +};