Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

preprocessTemplates is called only once in MU layout #8414

Merged
merged 1 commit into from Feb 14, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
53 changes: 34 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,36 @@ 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, {
srcDir: 'src',
destDir: `${this.name}/src`,
include,
exclude: ['templates/**/*'],
annotation: 'MU Templates',
});
mu = this._debugTree(mu, 'mu-layout:tree:template');
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍

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 +648,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 +671,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