Skip to content

Commit 65e8792

Browse files
committed
🙊
1 parent a775c0d commit 65e8792

File tree

3 files changed

+78
-13
lines changed

3 files changed

+78
-13
lines changed

‎index.js

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ module.exports = {
123123
let TemplateCompiler = require('./lib/preprocessors/markdown-template-compiler');
124124
let ContentExtractor = require('./lib/preprocessors/hbs-content-extractor');
125125
registry.add('template', new TemplateCompiler());
126-
registry.add('template', this.contentExtractor = new ContentExtractor());
126+
registry.add('template', new ContentExtractor(this.getBroccoliBridge()));
127127
}
128128
},
129129

@@ -197,15 +197,29 @@ module.exports = {
197197

198198
let docsTree = new MergeTrees(docsTrees);
199199

200-
let templateContentsTree = this.contentExtractor.getTemplateContentsTree();
201-
let searchIndexTree = new SearchIndexer(new MergeTrees([docsTree, templateContentsTree]), {
200+
let searchIndexInput = new MergeTrees([docsTree]);
201+
let searchIndexTree = new SearchIndexer(searchIndexInput, {
202202
outputFile: 'ember-cli-addon-docs/search-index.json',
203203
config: this.project.config(EmberApp.env())
204204
});
205205

206+
this.getBroccoliBridge().register({
207+
name: 'search-index-input',
208+
tree: searchIndexInput,
209+
dependencies: ['template-contents']
210+
});
211+
206212
return new MergeTrees([ defaultTree, docsTree, searchIndexTree ]);
207213
},
208214

215+
getBroccoliBridge() {
216+
if (!this._broccoliBridge) {
217+
const Bridge = require('./lib/broccoli/bridge');
218+
this._broccoliBridge = new Bridge();
219+
}
220+
return this._broccoliBridge;
221+
},
222+
209223
_lunrTree() {
210224
return new Funnel(path.dirname(require.resolve('lunr/package.json')), { destDir: 'lunr' });
211225
},

‎lib/broccoli/bridge.js

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
module.exports = class Bridge {
2+
constructor() {
3+
this._members = new Map();
4+
}
5+
6+
register({ name, tree, dependencies = [] }) {
7+
if (this._members.has(name)) {
8+
throw new Error(`Duplicate tree '${name}' in bridge.`);
9+
}
10+
11+
let newMember = new Member(name, tree, dependencies);
12+
13+
for (let existingMember of this._members.values()) {
14+
newMember.link(existingMember);
15+
existingMember.link(newMember);
16+
}
17+
18+
this._members.set(name, newMember);
19+
this._patchBuild(name, tree);
20+
}
21+
22+
_patchBuild(name, tree) {
23+
if (typeof tree.build !== 'function') return;
24+
25+
let { dependencies } = this._members.get(name);
26+
let oldBuild = tree.build.bind(tree);
27+
tree.build = () => {
28+
if (dependencies.size > 0) {
29+
throw new Error(`Tree '${name}' is missing dependencies: ${[...dependencies].join(',')}`);
30+
}
31+
32+
return oldBuild();
33+
};
34+
}
35+
}
36+
37+
class Member {
38+
constructor(name, tree, dependencies) {
39+
this.name = name;
40+
this.tree = tree;
41+
this.dependencies = new Set(dependencies);
42+
}
43+
44+
needs(dep) {
45+
return this.dependencies.has(dep.name);
46+
}
47+
48+
link(dep) {
49+
if (this.needs(dep)) {
50+
this.dependencies.delete(dep.name);
51+
this.tree._inputNodes.push(dep.tree);
52+
}
53+
}
54+
}

‎lib/preprocessors/hbs-content-extractor.js

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,18 @@
33
const HBSContentFilter = require('../broccoli/hbs-content-filter');
44

55
module.exports = class HBSContentExtractor {
6-
constructor() {
6+
constructor(bridge) {
77
this.name = 'hbs-content-extractor';
88
this.ext = ['hbs'];
9-
this._contentsTree = null;
10-
}
11-
12-
getTemplateContentsTree() {
13-
if (!this._contentsTree) {
14-
throw new Error(`Templates contents haven't been extracted yet`);
15-
}
16-
return this._contentsTree;
9+
this._bridge = bridge;
1710
}
1811

1912
toTree(tree) {
20-
this._contentsTree = new HBSContentFilter(tree);
13+
this._bridge.register({
14+
name: 'template-contents',
15+
tree: new HBSContentFilter(tree),
16+
});
17+
2118
return tree;
2219
}
2320
};

0 commit comments

Comments
 (0)