Skip to content

Commit 51d7a09

Browse files
committed
fix: call seal() on element analyses before using them.
1 parent bae23cb commit 51d7a09

File tree

2 files changed

+18
-0
lines changed

2 files changed

+18
-0
lines changed

packages/glimmer-templates/src/ElementAnalyzer.ts

+1
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ export class ElementAnalyzer {
4747
analyzeForRewrite(node: AST.ElementNode, atRootElement: boolean): TemplateElement {
4848
let element = new ElementAnalysis<BooleanExpression, StringExpression, TernaryExpression>(nodeLocation(node), node.tag);
4949
this._analyze(node, atRootElement, {element, storeConditionals: true});
50+
element.seal();
5051
return element;
5152
}
5253

packages/glimmer-templates/test/classnames-helper-test.ts

+17
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ describe('Classnames Helper', () => {
6868
whenTrue: [b, c2],
6969
whenFalse: [c1]
7070
});
71+
element.seal();
7172
let result = print(helperGenerator(rewrite, element));
7273
expect(result).deep.equals(
7374
"{{/css-blocks/components/classnames 1 0 0 true 2 0 2 1 1}}"
@@ -87,6 +88,7 @@ describe('Classnames Helper', () => {
8788
whenTrue: [b],
8889
});
8990
element.addStaticState(b, s1);
91+
element.seal();
9092
let result = print(helperGenerator(rewrite, element));
9193
expect(result).deep.equals(
9294
"{{/css-blocks/components/classnames 2 0 0 true 1 0 0 1 1 0 1 3}}"
@@ -106,6 +108,7 @@ describe('Classnames Helper', () => {
106108
whenTrue: [b],
107109
});
108110
element.addDynamicState(b, s1, builders.boolean(false));
111+
element.seal();
109112
let result = print(helperGenerator(rewrite, element));
110113
expect(result).deep.equals(
111114
"{{/css-blocks/components/classnames 2 0 0 true 1 0 0 3 1 0 false 1 3}}"
@@ -122,6 +125,7 @@ describe('Classnames Helper', () => {
122125
let rewrite = new IndexedClassMapping(inputs, [], { });
123126
let element = new ElementAnalysis<BooleanAST, StringAST, TernaryAST>({start: POSITION_UNKNOWN});
124127
element.addDynamicGroup(b, {red, orange, blue}, builders.mustache(builders.string("blue")));
128+
element.seal();
125129
let result = print(helperGenerator(rewrite, element));
126130
expect(result).deep.equals(
127131
'{{/css-blocks/components/classnames 1 0 4 3 1 "blue" "red" 1 1 "orange" 1 2 "blue" 1 3}}'
@@ -142,6 +146,7 @@ describe('Classnames Helper', () => {
142146
whenTrue: [ b ]
143147
});
144148
element.addDynamicGroup(b, {red, orange, blue}, builders.mustache(builders.path("/app/foo/helperz"), [builders.string("blue")]));
149+
element.seal();
145150
let result = print(helperGenerator(rewrite, element));
146151
expect(result).deep.equals(
147152
'{{/css-blocks/components/classnames 2 0 0 true 1 0 0 5 1 0 3 1 (/app/foo/helperz "blue") "red" 1 1 "orange" 1 2 "blue" 1 3}}'
@@ -163,6 +168,7 @@ describe('Classnames Helper', () => {
163168
whenTrue: [b, c2],
164169
whenFalse: [c1]
165170
});
171+
element.seal();
166172
let result = print(helperGenerator(rewrite, element));
167173
expect(result).deep.equals(
168174
'{{/css-blocks/components/classnames 1 1 0 true 2 0 2 1 1 "a" -3 2 0 2}}'
@@ -184,6 +190,7 @@ describe('Classnames Helper', () => {
184190
whenTrue: [b, c2],
185191
whenFalse: [c1]
186192
});
193+
element.seal();
187194
let result = print(helperGenerator(rewrite, element));
188195
expect(result).deep.equals(
189196
'{{/css-blocks/components/classnames 1 1 0 true 2 0 2 1 1 "a" -3 2 0 2}}'
@@ -205,6 +212,7 @@ describe('Classnames Helper', () => {
205212
whenTrue: [b, c2],
206213
whenFalse: [c1]
207214
});
215+
element.seal();
208216
let result = print(helperGenerator(rewrite, element));
209217
expect(result).deep.equals(
210218
'{{/css-blocks/components/classnames 1 1 0 true 2 0 2 1 1 "a" -3 2 0 -1 2}}'
@@ -226,6 +234,7 @@ describe('Classnames Helper', () => {
226234
whenTrue: [b, c2],
227235
whenFalse: [c1]
228236
});
237+
element.seal();
229238
let result = print(helperGenerator(rewrite, element));
230239
expect(result).deep.equals(
231240
'{{/css-blocks/components/classnames 1 1 0 true 2 0 2 1 1 "a" -2 2 0 -1 2}}'
@@ -250,6 +259,7 @@ describe('Classnames Helper', () => {
250259
whenTrue: [b, c2],
251260
whenFalse: [c1]
252261
});
262+
element.seal();
253263
let ast = helperGenerator(rewrite, element);
254264
expect(print(ast)).deep.equals(
255265
'{{/css-blocks/components/classnames 1 4 0 true 2 0 2 1 1 "a" 0 "b" 1 "c" 2 "d" 3}}');
@@ -274,6 +284,7 @@ describe('Classnames Helper', () => {
274284
whenTrue: [b, c2],
275285
whenFalse: [c1]
276286
});
287+
element.seal();
277288
let ast = helperGenerator(rewrite, element);
278289
expect(print(ast)).deep.equals(
279290
'{{/css-blocks/components/classnames 1 4 0 false 2 0 2 1 1 "a" 0 "b" 1 "c" 2 "d" 3}}');
@@ -298,6 +309,7 @@ describe('Classnames Helper', () => {
298309
whenTrue: [ b ]
299310
});
300311
element.addDynamicGroup(b, {red, orange, blue}, builders.mustache(builders.string("blue")));
312+
element.seal();
301313
let ast = helperGenerator(rewrite, element);
302314
expect(print(ast)).deep.equals(
303315
'{{/css-blocks/components/classnames 2 4 0 true 1 0 0 5 1 0 3 1 "blue" "red" 1 1 "orange" 1 2 "blue" 1 3 "a" 0 "b" 1 "c" 2 "d" 3}}'
@@ -323,6 +335,7 @@ describe('Classnames Helper', () => {
323335
whenTrue: [ b ]
324336
});
325337
element.addDynamicGroup(b, {red, orange, blue}, builders.mustache(builders.string("blue")));
338+
element.seal();
326339
let ast = helperGenerator(rewrite, element);
327340
expect(print(ast)).deep.equals(
328341
'{{/css-blocks/components/classnames 2 4 0 false 1 0 0 5 1 0 3 1 "blue" "red" 1 1 "orange" 1 2 "blue" 1 3 "a" 0 "b" 1 "c" 2 "d" 3}}'
@@ -348,6 +361,7 @@ describe('Classnames Helper', () => {
348361
whenTrue: [ b ]
349362
});
350363
element.addDynamicGroup(b, {red, orange, blue}, builders.mustache(builders.undefined()));
364+
element.seal();
351365
let ast = helperGenerator(rewrite, element);
352366
expect(print(ast)).deep.equals(
353367
'{{/css-blocks/components/classnames 2 4 0 true 1 0 0 5 1 0 3 1 undefined "red" 1 1 "orange" 1 2 "blue" 1 3 "a" 0 "b" 1 "c" 2 "d" 3}}'
@@ -373,10 +387,12 @@ describe('Classnames Helper', () => {
373387
whenTrue: [ b ]
374388
});
375389
element.addDynamicGroup(b, {red, orange, blue}, builders.mustache(builders.undefined()), true);
390+
element.seal();
376391
expect(() => {
377392
run(helperGenerator(rewrite, element));
378393
}).throws("string expected");
379394
});
395+
380396
it('handles complex boolean expressions', () => {
381397
let b = new Block("test", "test");
382398
let c1 = b.ensureClass("class-1");
@@ -404,6 +420,7 @@ describe('Classnames Helper', () => {
404420
whenTrue: [ c3 ]
405421
});
406422
element.addDynamicGroup(b, {red, orange, blue}, builders.mustache(builders.string("blue")));
423+
element.seal();
407424
let inputs = [b, red, orange, blue, c1, c2, c3];
408425
let rewrite = new IndexedClassMapping(inputs, [], {
409426
a: {and: [ 0 ]},

0 commit comments

Comments
 (0)