Skip to content

Commit eeaebd3

Browse files
amiller-ghchriseppstein
authored andcommitted
feat: Require Analyzers to provide optimizationOptions hash.
1 parent 4fdcea3 commit eeaebd3

16 files changed

+107
-88
lines changed

packages/css-blocks/src/Analyzer/Analysis.ts

+2-22
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import {
99
SerializedTemplateInfo,
1010
TemplateAnalysis as OptimizationTemplateAnalysis,
1111
TemplateInfoFactory,
12-
TemplateIntegrationOptions,
1312
TemplateTypes,
1413
} from "@opticss/template-api";
1514
import { ObjectDictionary, objectValues } from "@opticss/util";
@@ -137,25 +136,6 @@ export class Analysis<K extends keyof TemplateTypes> {
137136
return c;
138137
}
139138

140-
/**
141-
* Get either the owner Analyzer's optimization options, or a default set of options.
142-
*/
143-
optimizationOptions(): TemplateIntegrationOptions {
144-
// TODO: Optimization options must be handled / propagated better.
145-
return this.parent ? this.parent.optimizationOptions : {
146-
rewriteIdents: {
147-
id: false,
148-
class: true,
149-
omitIdents: {
150-
id: [],
151-
class: [],
152-
},
153-
},
154-
analyzedAttributes: ["class"],
155-
analyzedTagnames: false,
156-
};
157-
}
158-
159139
/**
160140
* Get an Element by ID.
161141
*/
@@ -391,10 +371,10 @@ export class Analysis<K extends keyof TemplateTypes> {
391371
return analysis;
392372
}
393373

394-
forOptimizer(opts: ResolvedConfiguration): OptimizationTemplateAnalysis<K> {
374+
forOptimizer(config: ResolvedConfiguration): OptimizationTemplateAnalysis<K> {
395375
let optAnalysis = new OptimizationTemplateAnalysis<K>(this.template);
396376
for (let element of this.elements.values()) {
397-
let result = element.forOptimizer(opts);
377+
let result = element.forOptimizer(config);
398378
optAnalysis.elements.push(result[0]);
399379
}
400380
return optAnalysis;

packages/css-blocks/src/Analyzer/Analyzer.ts

+3-17
Original file line numberDiff line numberDiff line change
@@ -20,19 +20,6 @@ import { TemplateValidatorOptions } from "./validations";
2020

2121
const debug = debugGenerator("css-blocks:analyzer");
2222

23-
const DEFAULT_FEATURES = {
24-
rewriteIdents: {
25-
id: false,
26-
class: true,
27-
omitIdents: {
28-
id: [],
29-
class: [],
30-
},
31-
},
32-
analyzedAttributes: ["class"],
33-
analyzedTagnames: false,
34-
};
35-
3623
export interface AnalysisOptions {
3724
validations?: TemplateValidatorOptions;
3825
features?: TemplateIntegrationOptions;
@@ -46,7 +33,6 @@ export abstract class Analyzer<K extends keyof TemplateTypes> {
4633
public readonly blockFactory: BlockFactory;
4734

4835
public readonly validatorOptions: TemplateValidatorOptions;
49-
public readonly optimizationOptions: TemplateIntegrationOptions;
5036
public readonly cssBlocksOptions: ResolvedConfiguration;
5137

5238
protected analysisMap: Map<string, Analysis<K>>;
@@ -59,14 +45,14 @@ export abstract class Analyzer<K extends keyof TemplateTypes> {
5945
) {
6046
this.cssBlocksOptions = resolveConfiguration(options);
6147
this.validatorOptions = analysisOpts && analysisOpts.validations || {};
62-
this.optimizationOptions = analysisOpts && analysisOpts.features || DEFAULT_FEATURES;
6348
this.blockFactory = new BlockFactory(this.cssBlocksOptions);
6449
this.analysisMap = new Map();
6550
this.staticStyles = new MultiMap();
6651
this.dynamicStyles = new MultiMap();
6752
}
6853

6954
abstract analyze(...entryPoints: string[]): Promise<Analyzer<K>>;
55+
abstract get optimizationOptions(): TemplateIntegrationOptions;
7056

7157
// TODO: We don't really want to burn the world here.
7258
// We need more targeted Analysis / BlockFactory invalidation.
@@ -134,10 +120,10 @@ export abstract class Analyzer<K extends keyof TemplateTypes> {
134120
return { analyses };
135121
}
136122

137-
forOptimizer(opts: ResolvedConfiguration): OptimizationAnalysis<K>[] {
123+
forOptimizer(config: ResolvedConfiguration): OptimizationAnalysis<K>[] {
138124
let analyses = new Array<OptimizationAnalysis<K>>();
139125
this.eachAnalysis(a => {
140-
analyses.push(a.forOptimizer(opts));
126+
analyses.push(a.forOptimizer(config));
141127
});
142128
return analyses;
143129
}

packages/css-blocks/test/opticss-test.ts

+14
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,20 @@ export class TemplateAnalysisTests {
7979
return this;
8080
});
8181
}
82+
get optimizationOptions() {
83+
return {
84+
rewriteIdents: {
85+
id: false,
86+
class: true,
87+
omitIdents: {
88+
id: [],
89+
class: [],
90+
},
91+
},
92+
analyzedAttributes: ["class"],
93+
analyzedTagnames: false,
94+
};
95+
}
8296
}
8397
let analyzer = new TestAnalyzer();
8498
return analyzer.analyze().then(async (analyzer: TestAnalyzer) => {

packages/css-blocks/test/template-analysis-test.ts

+2-5
Original file line numberDiff line numberDiff line change
@@ -4,22 +4,19 @@ import { assert } from "chai";
44
import { skip, suite, test } from "mocha-typescript";
55
import * as postcss from "postcss";
66

7-
import { Analyzer, ElementAnalysis, SerializedAnalysis } from "../src/Analyzer";
7+
import { ElementAnalysis, SerializedAnalysis } from "../src/Analyzer";
88
import { BlockFactory } from "../src/BlockParser";
99
import { Attribute, AttrValue, Block, BlockClass } from "../src/BlockTree";
1010
import { Options, resolveConfiguration } from "../src/configuration";
1111
import * as cssBlocks from "../src/errors";
1212

13+
import { TestAnalyzer } from "./util/TestAnalyzer";
1314
import { assertParseError } from "./util/assertError";
1415
import { setupImporting } from "./util/setupImporting";
1516

1617
type TestElement = ElementAnalysis<null, null, null>;
1718
type TemplateType = "Opticss.Template";
1819

19-
class TestAnalyzer extends Analyzer<"Opticss.Template"> {
20-
analyze() { return Promise.resolve(this); }
21-
}
22-
2320
type BlockAndRoot = [Block, postcss.Container];
2421

2522
@suite("Template Analysis")
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import { Analyzer } from "../../src/Analyzer";
2+
3+
export class TestAnalyzer extends Analyzer<"Opticss.Template"> {
4+
analyze() { return Promise.resolve(this); }
5+
get optimizationOptions() {
6+
return {
7+
rewriteIdents: {
8+
id: false,
9+
class: true,
10+
omitIdents: {
11+
id: [],
12+
class: [],
13+
},
14+
},
15+
analyzedAttributes: ["class"],
16+
analyzedTagnames: false,
17+
};
18+
}
19+
}

packages/css-blocks/test/validations/attribute-group-validator-test.ts

+2-6
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,15 @@ import { assert } from "chai";
33
import { suite, test } from "mocha-typescript";
44
import * as postcss from "postcss";
55

6-
import { Analyzer } from "../../src/Analyzer";
76
import { BlockFactory } from "../../src/BlockParser";
87
import { Block } from "../../src/BlockTree";
98
import { Options, resolveConfiguration } from "../../src/configuration";
109
import * as cssBlocks from "../../src/errors";
10+
import { TestAnalyzer } from "../util/TestAnalyzer";
11+
import { assertParseError } from "../util/assertError";
1112
import { setupImporting } from "../util/setupImporting";
1213

13-
import { assertParseError } from "./../util/assertError";
14-
1514
type BlockAndRoot = [Block, postcss.Container];
16-
class TestAnalyzer extends Analyzer<"Opticss.Template"> {
17-
analyze() { return Promise.resolve(this); }
18-
}
1915

2016
@suite("Attribute Group Validator")
2117
export class TemplateAnalysisTests {

packages/css-blocks/test/validations/attribute-parent-validator-test.ts

+1-4
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,16 @@ import { assert } from "chai";
33
import { suite, test } from "mocha-typescript";
44
import * as postcss from "postcss";
55

6-
import { Analyzer } from "../../src/Analyzer";
76
import { BlockFactory } from "../../src/BlockParser";
87
import { Block, BlockClass } from "../../src/BlockTree";
98
import { Options, resolveConfiguration } from "../../src/configuration";
109
import * as cssBlocks from "../../src/errors";
1110

11+
import { TestAnalyzer } from "../util/TestAnalyzer";
1212
import { assertParseError } from "../util/assertError";
1313
import { setupImporting } from "../util/setupImporting";
1414

1515
type BlockAndRoot = [Block, postcss.Container];
16-
class TestAnalyzer extends Analyzer<"Opticss.Template"> {
17-
analyze() { return Promise.resolve(this); }
18-
}
1916

2017
@suite("State Parent Validator")
2118
export class TemplateAnalysisTests {

packages/css-blocks/test/validations/class-pairs-validator-test.ts

+2-4
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,15 @@ import { Template } from "@opticss/template-api";
22
import { suite, test } from "mocha-typescript";
33
import * as postcss from "postcss";
44

5-
import { Analyzer } from "../../src/Analyzer";
65
import { BlockFactory } from "../../src/BlockParser";
76
import { Block } from "../../src/BlockTree";
87
import { Options, resolveConfiguration } from "../../src/configuration";
98
import * as cssBlocks from "../../src/errors";
9+
10+
import { TestAnalyzer } from "../util/TestAnalyzer";
1011
import { assertParseError } from "../util/assertError";
1112

1213
type BlockAndRoot = [Block, postcss.Container];
13-
class TestAnalyzer extends Analyzer<"Opticss.Template"> {
14-
analyze() { return Promise.resolve(this); }
15-
}
1614

1715
@suite("Class Pairs Validator")
1816
export class TemplateAnalysisTests {

packages/css-blocks/test/validations/property-conflict-validator-test.ts

+1-4
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,17 @@ import { assert } from "chai";
33
import { suite, test } from "mocha-typescript";
44
import * as postcss from "postcss";
55

6-
import { Analyzer } from "../../src/Analyzer";
76
import { BlockFactory } from "../../src/BlockParser";
87
import { AttrValue, Block, BlockClass, isAttrValue, isBlockClass } from "../../src/BlockTree";
98
import { Options, resolveConfiguration } from "../../src/configuration";
109
import { CssBlockError, TemplateAnalysisError } from "../../src/errors";
1110

1211
import { MockImportRegistry } from "../util/MockImportRegistry";
12+
import { TestAnalyzer } from "../util/TestAnalyzer";
1313
import { assertParseError } from "../util/assertError";
1414
import { indented } from "../util/indented";
1515

1616
type BlockAndRoot = [Block, postcss.Container];
17-
class TestAnalyzer extends Analyzer<"Opticss.Template"> {
18-
analyze() { return Promise.resolve(this); }
19-
}
2017

2118
@suite("Property Conflict Validator")
2219
export class TemplateAnalysisTests {

packages/css-blocks/test/validations/root-class-validator-test.ts

+4-6
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,17 @@ import { assert } from "chai";
33
import { suite, test } from "mocha-typescript";
44
import * as postcss from "postcss";
55

6-
import { Analyzer, SerializedAnalysis } from "../../src/Analyzer";
6+
import { SerializedAnalysis } from "../../src/Analyzer";
77
import { BlockFactory } from "../../src/BlockParser";
88
import { Block } from "../../src/BlockTree";
99
import { Options, resolveConfiguration } from "../../src/configuration";
1010
import * as cssBlocks from "../../src/errors";
1111

12-
import { MockImportRegistry } from "./../util/MockImportRegistry";
13-
import { assertParseError } from "./../util/assertError";
12+
import { MockImportRegistry } from "../util/MockImportRegistry";
13+
import { TestAnalyzer } from "../util/TestAnalyzer";
14+
import { assertParseError } from "../util/assertError";
1415

1516
type BlockAndRoot = [Block, postcss.Container];
16-
class TestAnalyzer extends Analyzer<"Opticss.Template"> {
17-
analyze() { return Promise.resolve(this); }
18-
}
1917

2018
@suite("Root Class Validator")
2119
export class AnalysisTests {

packages/css-blocks/test/validations/validator-test.ts

+2-4
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,15 @@ import { Template } from "@opticss/template-api";
33
import { suite, test } from "mocha-typescript";
44
import * as postcss from "postcss";
55

6-
import { Analyzer } from "../../src/Analyzer";
76
import { BlockFactory } from "../../src/BlockParser";
87
import { Block } from "../../src/BlockTree";
98
import { Options, resolveConfiguration } from "../../src/configuration";
109
import { TemplateAnalysisError } from "../../src/errors";
10+
11+
import { TestAnalyzer } from "../util/TestAnalyzer";
1112
import { assertParseError } from "../util/assertError";
1213

1314
type BlockAndRoot = [Block, postcss.Container];
14-
class TestAnalyzer extends Analyzer<"Opticss.Template"> {
15-
analyze() { return Promise.resolve(this); }
16-
}
1715

1816
@suite("Validators")
1917
export class TemplateAnalysisTests {

packages/glimmer-templates/src/Analyzer.ts

+17
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { preprocess, traverse } from "@glimmer/syntax";
2+
import { TemplateIntegrationOptions } from "@opticss/template-api";
23
import {
34
Analysis,
45
AnalysisOptions,
@@ -40,9 +41,25 @@ export class GlimmerAnalyzer extends Analyzer<TEMPLATE_TYPE> {
4041
}
4142

4243
reset() {
44+
super.reset();
4345
this.project.reset();
4446
}
4547

48+
get optimizationOptions(): TemplateIntegrationOptions {
49+
return {
50+
rewriteIdents: {
51+
id: false,
52+
class: true,
53+
omitIdents: {
54+
id: [],
55+
class: [],
56+
},
57+
},
58+
analyzedAttributes: ["class"],
59+
analyzedTagnames: false,
60+
};
61+
}
62+
4663
async analyze(...templateNames: string[]): Promise<GlimmerAnalyzer> {
4764

4865
// TODO pass module config https://github.com/tomdale/glimmer-analyzer/pull/1

packages/jsx/src/analyzer/index.ts

+16
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { TemplateIntegrationOptions } from "@opticss/template-api";
12
import { some, unwrap } from "@opticss/util";
23
import traverse from "babel-traverse";
34
import * as babylon from "babylon";
@@ -43,6 +44,21 @@ export class CSSBlocksJSXAnalyzer extends Analyzer<TEMPLATE_TYPE> {
4344
this.blockPromises = new Map();
4445
}
4546

47+
get optimizationOptions(): TemplateIntegrationOptions {
48+
return {
49+
rewriteIdents: {
50+
id: false,
51+
class: true,
52+
omitIdents: {
53+
id: [],
54+
class: [],
55+
},
56+
},
57+
analyzedAttributes: ["class"],
58+
analyzedTagnames: false,
59+
};
60+
}
61+
4662
async analyze(...entryPoints: string[]): Promise<CSSBlocksJSXAnalyzer> {
4763
if (!entryPoints.length) {
4864
throw new JSXParseError("CSS Blocks JSX Analyzer must be passed at least one entry point.");

packages/webpack-plugin/test/configs/basicConfig.ts

+1-5
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,14 @@
1-
import { Analyzer } from "css-blocks";
21
import { Configuration as WebpackConfiguration } from "webpack";
32
import * as merge from "webpack-merge";
43

54
import { LoaderOptions } from "../../src/LoaderOptions";
65
import { CssBlocksPlugin } from "../../src/Plugin";
76

7+
import { TestAnalyzer } from "../util/TestAnalyzer";
88
import { BLOCK_LOADER_PATH } from "../util/testPaths";
99

1010
import { config as defaultOutputConfig } from "./defaultOutputConfig";
1111

12-
export class TestAnalyzer extends Analyzer<"Opticss.Template"> {
13-
analyze(): Promise<Analyzer<"Opticss.Template">> { return Promise.resolve(this); }
14-
}
15-
1612
export function config(entry: string, options?: LoaderOptions): WebpackConfiguration {
1713
const baseConfig: WebpackConfiguration = {
1814
entry: entry,

0 commit comments

Comments
 (0)