Skip to content

Commit 2bb5a2c

Browse files
committed
fix(broccoli): Rebuild diffs input changes and output patch seperatly.
1 parent 92a7864 commit 2bb5a2c

File tree

5 files changed

+156
-26
lines changed

5 files changed

+156
-26
lines changed

packages/@css-blocks/broccoli/package.json

+1-2
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
"@css-blocks/code-style": "^0.18.0",
3131
"@css-blocks/glimmer": "^0.20.0-beta.0",
3232
"@types/glob": "^5.0.35",
33-
"broccoli-test-helper": "^1.4.0",
33+
"broccoli-test-helper": "^1.5.0",
3434
"watch": "^1.0.2"
3535
},
3636
"dependencies": {
@@ -41,7 +41,6 @@
4141
"broccoli-funnel": "^2.0.1",
4242
"broccoli-merge-trees": "^3.0.0",
4343
"broccoli-plugin": "^1.3.0",
44-
"broccoli-test-helper": "^1.2.0",
4544
"colors": "^1.2.1",
4645
"debug": "^3.1.0",
4746
"fs-extra": "^5.0.0",

packages/@css-blocks/broccoli/src/Analyze.ts

+13-13
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@ export class CSSBlocksAnalyze extends BroccoliPlugin {
3737
private root: string;
3838
private transport: Transport;
3939
private optimizationOptions: Partial<OptiCSSOptions>;
40-
private previous: FSTree = new FSTree();
40+
private previousInput: FSTree = new FSTree();
41+
private previousOutput: FSTree = new FSTree();
4142

4243
/**
4344
* Initialize this new instance with the app tree, transport, and analysis options.
@@ -72,29 +73,29 @@ export class CSSBlocksAnalyze extends BroccoliPlugin {
7273

7374
// Test if anything has changed since last time. If not, skip all analysis work.
7475
let newFsTree = FSTree.fromEntries(walkSync.entries(input));
75-
let diff = this.previous.calculatePatch(newFsTree);
76+
let diff = this.previousInput.calculatePatch(newFsTree);
7677
if (!diff.length) { return; }
77-
this.previous = newFsTree;
78-
FSTree.applyPatch(input, output, diff);
78+
FSTree.applyPatch(input, output, this.previousOutput.calculatePatch(newFsTree));
79+
this.previousInput = newFsTree;
7980

8081
// When no entry points are passed, we treat *every* template as an entry point.
81-
this.entries = this.entries.length ? this.entries : glob.sync("**/*.hbs", { cwd: input });
82+
this.entries = this.entries.length ? this.entries : glob.sync("**/*.hbs", { cwd: output });
8283

8384
// The glimmer-analyzer package tries to require() package.json
8485
// in the root of the directory it is passed. We pass it our broccoli
8586
// tree, so it needs to contain package.json too.
8687
// TODO: Ideally this is configurable in glimmer-analyzer. We can
8788
// contribute that option back to the project. However,
8889
// other template integrations may want this available too...
89-
let pjsonLink = path.join(input, "package.json");
90+
let pjsonLink = path.join(output, "package.json");
9091
if (!fs.existsSync(pjsonLink)) {
9192
symlinkOrCopy(path.join(this.root, "package.json"), pjsonLink);
9293
}
9394

9495
// Oh hey look, we're analyzing.
9596
this.analyzer.reset();
9697
this.transport.reset();
97-
await this.analyzer.analyze(input, this.entries);
98+
await this.analyzer.analyze(output, this.entries);
9899

99100
// Compile all Blocks and add them as sources to the Optimizer.
100101
// TODO: handle a sourcemap from compiling the block file via a preprocessor.
@@ -108,9 +109,8 @@ export class CSSBlocksAnalyze extends BroccoliPlugin {
108109

109110
// If this Block has a representation on disk, remove it from our output tree.
110111
if (filesystemPath) {
111-
let outputStylesheet = path.join(output, path.relative(input, filesystemPath));
112-
debug(`Removing block file ${outputStylesheet} from output.`);
113-
if (fs.existsSync(outputStylesheet)) { fs.removeSync(outputStylesheet); }
112+
debug(`Removing block file ${filesystemPath} from output.`);
113+
if (fs.existsSync(filesystemPath)) { fs.removeSync(filesystemPath); }
114114
}
115115

116116
// Add the compiled Block file to the optimizer.
@@ -122,6 +122,9 @@ export class CSSBlocksAnalyze extends BroccoliPlugin {
122122
}
123123
}
124124

125+
// Save the current state of our output dir for future diffs.
126+
this.previousOutput = FSTree.fromEntries(walkSync.entries(output));
127+
125128
// Add each Analysis to the Optimizer.
126129
this.analyzer.eachAnalysis((a) => optimizer.addAnalysis(a.forOptimizer(options)));
127130

@@ -134,9 +137,6 @@ export class CSSBlocksAnalyze extends BroccoliPlugin {
134137
this.transport.blocks = blocks;
135138
this.transport.analyzer = this.analyzer;
136139
this.transport.css += optimized.output.content.toString();
137-
138140
debug(`Compilation Finished: ${this.transport.id}`);
139-
140141
}
141-
142142
}

packages/@css-blocks/glimmer/test/recursive-template-dependencies-test.ts

+10-9
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1+
import Analyzer from "@amiller-gh/glimmer-analyzer";
2+
13
import { expect } from "chai";
2-
import Analyzer from "glimmer-analyzer";
34

45
import { fixture } from "./fixtures";
56

@@ -26,14 +27,14 @@ describe("Recursive template dependency analysis", function() {
2627
let map = analyzer.resolutionMapForEntryPoint("my-app");
2728

2829
expect(map).to.deep.equal({
29-
"component:/basic-app/components/my-app": "src/ui/components/my-app/component.ts",
30-
"template:/basic-app/components/my-app": "src/ui/components/my-app/template.hbs",
31-
"component:/basic-app/components/my-app/page-banner": "src/ui/components/my-app/page-banner/component.ts",
32-
"template:/basic-app/components/my-app/page-banner": "src/ui/components/my-app/page-banner/template.hbs",
33-
"template:/basic-app/components/ferret-launcher": "src/ui/components/ferret-launcher/template.hbs",
34-
"template:/basic-app/components/my-app/page-banner/user-avatar": "src/ui/components/my-app/page-banner/user-avatar/template.hbs",
35-
"template:/basic-app/components/text-editor": "src/ui/components/text-editor/template.hbs",
36-
"component:/basic-app/components/text-editor": "src/ui/components/text-editor/component.ts",
30+
"component:/basic-app/components/my-app": "ui/components/my-app/component.ts",
31+
"template:/basic-app/components/my-app": "ui/components/my-app/template.hbs",
32+
"component:/basic-app/components/my-app/page-banner": "ui/components/my-app/page-banner/component.ts",
33+
"template:/basic-app/components/my-app/page-banner": "ui/components/my-app/page-banner/template.hbs",
34+
"template:/basic-app/components/ferret-launcher": "ui/components/ferret-launcher/template.hbs",
35+
"template:/basic-app/components/my-app/page-banner/user-avatar": "ui/components/my-app/page-banner/user-avatar/template.hbs",
36+
"template:/basic-app/components/text-editor": "ui/components/text-editor/template.hbs",
37+
"component:/basic-app/components/text-editor": "ui/components/text-editor/component.ts",
3738
});
3839
});
3940
});

packages/@css-blocks/glimmer/test/template-dependencies-test.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1+
import Analyzer from "@amiller-gh/glimmer-analyzer";
2+
13
import { expect } from "chai";
2-
import Analyzer from "glimmer-analyzer";
34

45
import { fixture } from "./fixtures";
56

yarn.lock

+130-1
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,74 @@
134134
dependencies:
135135
find-up "^2.1.0"
136136

137+
"@css-blocks/broccoli@^0.19.0":
138+
version "0.19.0"
139+
resolved "https://registry.npmjs.org/@css-blocks/broccoli/-/broccoli-0.19.0.tgz#4c36cd54542078fe523f106c6a510d21f7caf61c"
140+
dependencies:
141+
"@css-blocks/core" "^0.19.0"
142+
"@glimmer/compiler" "^0.33.0"
143+
"@glimmer/syntax" "^0.33.0"
144+
"@opticss/template-api" "^0.3.0"
145+
"@types/recursive-readdir" "^2.2.0"
146+
broccoli-funnel "^2.0.1"
147+
broccoli-merge-trees "^3.0.0"
148+
broccoli-plugin "^1.3.0"
149+
broccoli-test-helper "^1.2.0"
150+
colors "^1.2.1"
151+
debug "^3.1.0"
152+
fs-extra "^5.0.0"
153+
opticss "^0.3.0"
154+
postcss "^6.0.21"
155+
recursive-readdir "^2.2.2"
156+
walk-sync "^0.3.2"
157+
158+
"@css-blocks/core@^0.19.0":
159+
version "0.19.0"
160+
resolved "https://registry.npmjs.org/@css-blocks/core/-/core-0.19.0.tgz#89cb5584b09ffb2dbbb597570ccc7a6e32eb4839"
161+
dependencies:
162+
"@opticss/element-analysis" "^0.3.0"
163+
"@opticss/template-api" "^0.3.0"
164+
"@opticss/util" "^0.3.0"
165+
"@types/async" "^2.0.40"
166+
"@types/debug" "0.0.29"
167+
async "^2.5.0"
168+
css-property-parser "^1.0.6"
169+
debug "^2.6.8"
170+
inline-source-map-comment "^1.0.5"
171+
json-parse-better-errors "^1.0.1"
172+
object.values "^1.0.4"
173+
opticss "^0.3.0"
174+
regexpu-core "^4.0.11"
175+
source-map "^0.6.1"
176+
watch "^1.0.2"
177+
178+
"@css-blocks/ember-cli@*":
179+
version "0.19.0"
180+
resolved "https://registry.npmjs.org/@css-blocks/ember-cli/-/ember-cli-0.19.0.tgz#86e9798277c65bbb95d725d4e55a99eee038edfd"
181+
dependencies:
182+
"@css-blocks/broccoli" "^0.19.0"
183+
"@css-blocks/glimmer" "^0.19.0"
184+
"@glimmer/application-pipeline" "^0.11.1"
185+
broccoli-funnel "^2.0.1"
186+
187+
"@css-blocks/glimmer@^0.19.0":
188+
version "0.19.0"
189+
resolved "https://registry.npmjs.org/@css-blocks/glimmer/-/glimmer-0.19.0.tgz#bb076d7de613a44114f9dbf8f4f75285a1d64217"
190+
dependencies:
191+
"@css-blocks/core" "^0.19.0"
192+
"@glimmer/compiler" "^0.33.0"
193+
"@glimmer/resolution-map-builder" "0.5.1"
194+
"@glimmer/resolver" "^0.4.3"
195+
"@glimmer/syntax" "^0.33.0"
196+
"@opticss/element-analysis" "^0.3.0"
197+
"@opticss/template-api" "^0.3.0"
198+
"@opticss/util" "^0.3.0"
199+
"@types/glob" "^5.0.30"
200+
debug "^2.6.8"
201+
glimmer-analyzer "^0.2.0"
202+
glob "^7.1.2"
203+
object.values "^1.0.4"
204+
137205
"@ember/test-helpers@^0.7.18":
138206
version "0.7.25"
139207
resolved "https://registry.npmjs.org/@ember/test-helpers/-/test-helpers-0.7.25.tgz#b4014c108b40ffaf74f3c4d5918800917541541d"
@@ -297,6 +365,12 @@
297365
dependencies:
298366
babel-plugin-glimmer-inline-precompile "^1.2.0"
299367

368+
"@glimmer/interfaces@^0.29.10":
369+
version "0.29.10"
370+
resolved "https://registry.npmjs.org/@glimmer/interfaces/-/interfaces-0.29.10.tgz#7744451ca329a42c62b08fa460808bccbddeb2ab"
371+
dependencies:
372+
"@glimmer/wire-format" "^0.29.10"
373+
300374
"@glimmer/interfaces@^0.31.0":
301375
version "0.31.0"
302376
resolved "https://registry.npmjs.org/@glimmer/interfaces/-/interfaces-0.31.0.tgz#642764765b266d5cf921f64354e06a3112551081"
@@ -398,6 +472,15 @@
398472
"@glimmer/vm" "^0.31.0"
399473
"@glimmer/wire-format" "^0.31.0"
400474

475+
"@glimmer/syntax@^0.29.1":
476+
version "0.29.10"
477+
resolved "https://registry.npmjs.org/@glimmer/syntax/-/syntax-0.29.10.tgz#2a074223fc3b42d49c8b9345684a80b5133dc030"
478+
dependencies:
479+
"@glimmer/interfaces" "^0.29.10"
480+
"@glimmer/util" "^0.29.10"
481+
handlebars "^4.0.6"
482+
simple-html-tokenizer "^0.4.1"
483+
401484
"@glimmer/syntax@^0.31.0":
402485
version "0.31.0"
403486
resolved "https://registry.npmjs.org/@glimmer/syntax/-/syntax-0.31.0.tgz#5e4f2732c39b07060a716a95e55e7a67c7d1a213"
@@ -429,6 +512,10 @@
429512
version "0.30.3"
430513
resolved "https://registry.npmjs.org/@glimmer/test-helpers/-/test-helpers-0.30.3.tgz#57bd84fba9aa498de025f8d0b4c3f0ab2e9afa97"
431514

515+
"@glimmer/util@^0.29.10":
516+
version "0.29.10"
517+
resolved "https://registry.npmjs.org/@glimmer/util/-/util-0.29.10.tgz#8662daf273ffef9254b8d943d39aa396ed7225a5"
518+
432519
"@glimmer/util@^0.31.0":
433520
version "0.31.0"
434521
resolved "https://registry.npmjs.org/@glimmer/util/-/util-0.31.0.tgz#45e353a7dcaffe6df00cc3d729153ae6121cf0e4"
@@ -449,6 +536,12 @@
449536
"@glimmer/program" "^0.31.0"
450537
"@glimmer/util" "^0.31.0"
451538

539+
"@glimmer/wire-format@^0.29.10":
540+
version "0.29.10"
541+
resolved "https://registry.npmjs.org/@glimmer/wire-format/-/wire-format-0.29.10.tgz#90e82f67a6325468d6fee4f8dd7affc1070a9557"
542+
dependencies:
543+
"@glimmer/util" "^0.29.10"
544+
452545
"@glimmer/wire-format@^0.31.0":
453546
version "0.31.0"
454547
resolved "https://registry.npmjs.org/@glimmer/wire-format/-/wire-format-0.31.0.tgz#5a12e7a770a981ce9ea3a7daf737433bd6cd03d9"
@@ -1213,6 +1306,12 @@
12131306
"@types/prop-types" "*"
12141307
csstype "^2.2.0"
12151308

1309+
"@types/recursive-readdir@^2.2.0":
1310+
version "2.2.0"
1311+
resolved "https://registry.npmjs.org/@types/recursive-readdir/-/recursive-readdir-2.2.0.tgz#b39cd5474fd58ea727fe434d5c68b7a20ba9121c"
1312+
dependencies:
1313+
"@types/node" "*"
1314+
12161315
12171316
version "0.7.8"
12181317
resolved "https://registry.npmjs.org/@types/shelljs/-/shelljs-0.7.8.tgz#4b4d6ee7926e58d7bca448a50ba442fd9f6715bd"
@@ -1232,6 +1331,10 @@
12321331
version "0.2.4"
12331332
resolved "https://registry.npmjs.org/@types/tapable/-/tapable-0.2.4.tgz#8181a228da46185439300e600c5ae3b3b3982585"
12341333

1334+
"@types/tmp@^0.0.33":
1335+
version "0.0.33"
1336+
resolved "https://registry.npmjs.org/@types/tmp/-/tmp-0.0.33.tgz#1073c4bc824754ae3d10cfab88ab0237ba964e4d"
1337+
12351338
"@types/uglify-js@*":
12361339
version "3.0.3"
12371340
resolved "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.0.3.tgz#801a5ca1dc642861f47c46d14b700ed2d610840b"
@@ -3131,6 +3234,17 @@ broccoli-test-helper@^1.1.0, broccoli-test-helper@^1.2.0:
31313234
rimraf "^2.5.4"
31323235
walk-sync "^0.3.1"
31333236

3237+
broccoli-test-helper@^1.5.0:
3238+
version "1.5.0"
3239+
resolved "https://registry.npmjs.org/broccoli-test-helper/-/broccoli-test-helper-1.5.0.tgz#95848e759c10851a74ea72056bdf9991bae8fd75"
3240+
dependencies:
3241+
"@types/tmp" "^0.0.33"
3242+
broccoli "^1.1.0"
3243+
fixturify "^0.3.2"
3244+
fs-tree-diff "^0.5.9"
3245+
tmp "^0.0.33"
3246+
walk-sync "^0.3.3"
3247+
31343248
broccoli-tslinter@^3.0.1:
31353249
version "3.0.1"
31363250
resolved "https://registry.npmjs.org/broccoli-tslinter/-/broccoli-tslinter-3.0.1.tgz#f30b167356cd2b96c604e8a56f1557de1e2048ed"
@@ -6549,6 +6663,15 @@ gitconfiglocal@^1.0.0:
65496663
dependencies:
65506664
ini "^1.3.2"
65516665

6666+
glimmer-analyzer@^0.2.0:
6667+
version "0.2.3"
6668+
resolved "https://registry.npmjs.org/glimmer-analyzer/-/glimmer-analyzer-0.2.3.tgz#29746c3027bd342c9930d020e4e8f5902f01fc62"
6669+
dependencies:
6670+
"@glimmer/resolution-map-builder" "^0.4.0"
6671+
"@glimmer/resolver" "^0.3.0"
6672+
"@glimmer/syntax" "^0.29.1"
6673+
simple-html-tokenizer "^0.4.1"
6674+
65526675
glimmer-analyzer@^0.3.2:
65536676
version "0.3.3"
65546677
resolved "https://registry.npmjs.org/glimmer-analyzer/-/glimmer-analyzer-0.3.3.tgz#a03e202998cb93e179f04742cb9a82a4036d3f47"
@@ -9143,7 +9266,7 @@ minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1:
91439266
version "1.0.1"
91449267
resolved "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
91459268

9146-
"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4:
9269+
"minimatch@2 || 3", minimatch@3.0.4, minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4:
91479270
version "3.0.4"
91489271
resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
91499272
dependencies:
@@ -11041,6 +11164,12 @@ [email protected]:
1104111164
dependencies:
1104211165
minimatch "3.0.3"
1104311166

11167+
recursive-readdir@^2.2.2:
11168+
version "2.2.2"
11169+
resolved "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz#9946fb3274e1628de6e36b2f6714953b4845094f"
11170+
dependencies:
11171+
minimatch "3.0.4"
11172+
1104411173
redent@^1.0.0:
1104511174
version "1.0.0"
1104611175
resolved "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde"

0 commit comments

Comments
 (0)