Skip to content

Commit

Permalink
preprocessTemplates is called only once in MU layout
Browse files Browse the repository at this point in the history
  • Loading branch information
ppcano committed Feb 7, 2019
1 parent daafa6c commit da739cd
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 45 deletions.
51 changes: 32 additions & 19 deletions lib/broccoli/default-packager.js
Expand Up @@ -245,7 +245,7 @@ module.exports = class DefaultPackager {
let trees = [
allTrees,
templates,
this.processSrc(allTrees),
this.processJavascriptSrc(allTrees),
].filter(Boolean);

let mergedTree = mergeTrees(trees, {
Expand Down Expand Up @@ -444,19 +444,34 @@ module.exports = class DefaultPackager {
let include = this.registry.extensionsForType('template')
.map(extension => `**/*/template.${extension}`);

let pods = new Funnel(templates, {
include,
exclude: ['templates/**/*'],
annotation: 'Pod Templates',
});
let classic = new Funnel(templates, {
srcDir: `${this.name}/templates`,
destDir: `${this.name}/templates`,
annotation: 'Classic Templates',
});
let mergedTemplates = mergeTrees([pods, classic], {

let mergedTemplates = [classic];

if (this.isModuleUnificationEnabled) {
let mu = new Funnel(templates, {
include,
exclude: ['templates/**/*'],
annotation: 'MU Templates',
});
mu = this._debugTree(mu, 'mu-layout:tree:template');
mergedTemplates.push(mu);
} else {
let pods = new Funnel(templates, {
include,
exclude: ['templates/**/*'],
annotation: 'Pod Templates',
});
mergedTemplates.push(pods);
}

mergedTemplates = mergeTrees(mergedTemplates, {
overwrite: true,
annotation: 'Pod & Classic Templates',
annotation: 'Templates',
});
let preprocessedTemplatesFromAddons = callAddonsPreprocessTreeHook(
this.project,
Expand Down Expand Up @@ -631,8 +646,8 @@ module.exports = class DefaultPackager {
}

/*
* Runs pre/post-processors hooks on the application files (javascript,
* styles, templates) and returns a single tree with the processed ones.
* Runs pre/post-processors hooks on the application javascript files
* and returns a single tree with the processed ones.
*
* Used only when `MODULE_UNIFICATION` experiment is enabled.
*
Expand All @@ -654,34 +669,32 @@ module.exports = class DefaultPackager {
* └── app.css
* ```
*
* Returns the tree with the same structure, but with processed files.
* Returns the tree with only the JS/TS files, but with processed files.
*
* @private
* @method processSrc
* @method processJavascriptSrc
* @param {BroccoliTree} tree
* @return {BroccoliTree}
*/
processSrc(tree) {
processJavascriptSrc(tree) {
if (this._cachedProcessedSrc === null && this.isModuleUnificationEnabled) {
let src = new Funnel(tree, {
srcDir: 'src',
destDir: 'src',
include: ['**/*.{js,ts}'],
exclude: ['**/*-test.{js,ts}'],
annotation: 'Module Unification Src',
});

let srcAfterPreprocessTreeHook = callAddonsPreprocessTreeHook(this.project, 'src', src);

let srcAfterTemplatePreprocessing = preprocessTemplates(srcAfterPreprocessTreeHook, {
registry: this.registry,
annotation: 'Process Templates: src',
});
srcAfterPreprocessTreeHook = this._debugTree(srcAfterPreprocessTreeHook, 'mu-layout:addonsPreprocessTree:js');

let srcAfterPostprocessTreeHook = callAddonsPostprocessTreeHook(
this.project,
'src',
srcAfterTemplatePreprocessing
srcAfterPreprocessTreeHook
);
srcAfterPostprocessTreeHook = this._debugTree(srcAfterPostprocessTreeHook, 'mu-layout:addonsPostprocessTree:js');

this._cachedProcessedSrc = new Funnel(mergeTrees([
srcAfterPostprocessTreeHook,
Expand Down
36 changes: 10 additions & 26 deletions tests/unit/broccoli/default-packager/javascript-test.js
Expand Up @@ -363,11 +363,6 @@ if (isExperimentEnabled('MODULE_UNIFICATION')) {

registry: setupRegistry({
js: tree => tree,
template: tree => new Funnel(tree, {
getDestinationPath(relativePath) {
return relativePath.replace(/hbs$/g, 'js');
},
}),
}),

isModuleUnificationEnabled: true,
Expand All @@ -378,13 +373,11 @@ if (isExperimentEnabled('MODULE_UNIFICATION')) {
project: {
addons: [{
preprocessTree(type, tree) {
addonPreprocessTreeHookCalled = true;

expect(type).to.equal('src');
return tree;
},
postprocessTree(type, tree) {
addonPostprocessTreeHookCalled = true;

expect(type).to.equal('src');
return tree;
},
}],
Expand All @@ -393,7 +386,7 @@ if (isExperimentEnabled('MODULE_UNIFICATION')) {

expect(defaultPackager._cachedProcessedSrc).to.equal(null);

outputMU = yield buildOutput(defaultPackager.processSrc(inputMU.path()));
outputMU = yield buildOutput(defaultPackager.processJavascriptSrc(inputMU.path()));

let outputFiles = outputMU.read();

Expand All @@ -406,24 +399,18 @@ if (isExperimentEnabled('MODULE_UNIFICATION')) {
components: {
'login-form': {
'component.js': '',
'template.js': '',
},
},
'index.html': '',
routes: {
application: {
'template.js': '',
},
},
styles: {
'app.css': 'html { height: 100%; }',
},
},
},
});
}));

it('runs pre/post-process add-on hooks', co.wrap(function *() {

addonPreprocessTreeHookCalled = false;
addonPostprocessTreeHookCalled = false;

let defaultPackager = new DefaultPackager({
name: 'the-best-app-ever',

Expand All @@ -435,11 +422,6 @@ if (isExperimentEnabled('MODULE_UNIFICATION')) {

registry: setupRegistry({
js: tree => tree,
template: tree => new Funnel(tree, {
getDestinationPath(relativePath) {
return relativePath.replace(/hbs$/g, 'js');
},
}),
}),

isModuleUnificationEnabled: true,
Expand All @@ -450,11 +432,13 @@ if (isExperimentEnabled('MODULE_UNIFICATION')) {
project: {
addons: [{
preprocessTree(type, tree) {
expect(type).to.equal('src');
addonPreprocessTreeHookCalled = true;

return tree;
},
postprocessTree(type, tree) {
expect(type).to.equal('src');
addonPostprocessTreeHookCalled = true;

return tree;
Expand All @@ -463,7 +447,7 @@ if (isExperimentEnabled('MODULE_UNIFICATION')) {
},
});

outputMU = yield buildOutput(defaultPackager.processSrc(inputMU.path()));
outputMU = yield buildOutput(defaultPackager.processJavascriptSrc(inputMU.path()));

expect(addonPreprocessTreeHookCalled).to.equal(true);
expect(addonPostprocessTreeHookCalled).to.equal(true);
Expand Down
3 changes: 3 additions & 0 deletions tests/unit/broccoli/default-packager/templates-test.js
Expand Up @@ -117,11 +117,14 @@ describe('Default Packager: Templates', function() {
project: {
addons: [{
preprocessTree(type, tree) {
expect(type).to.equal('template');
addonPreprocessTreeHookCalled = true;

return tree;
},
postprocessTree(type, tree) {

expect(type).to.equal('template');
addonPostprocessTreeHookCalled = true;

return tree;
Expand Down

0 comments on commit da739cd

Please sign in to comment.