@@ -2,100 +2,245 @@ import { rewriteModule } from '../src';
2
2
import { stripIndent } from 'common-tags' ;
3
3
import { GlintEnvironment } from '@glint/config' ;
4
4
5
- const glimmerxEnvironment = GlintEnvironment . load ( 'glimmerx' ) ;
6
-
7
5
describe ( 'rewriteModule' , ( ) => {
8
- test ( 'with a simple class' , ( ) => {
9
- let script = {
10
- filename : 'test.ts' ,
11
- contents : stripIndent `
12
- import Component, { hbs } from '@glimmerx/component';
6
+ describe ( 'inline tagged template' , ( ) => {
7
+ const glimmerxEnvironment = GlintEnvironment . load ( 'glimmerx' ) ;
8
+
9
+ test ( 'with a simple class' , ( ) => {
10
+ let script = {
11
+ filename : 'test.ts' ,
12
+ contents : stripIndent `
13
+ import Component, { hbs } from '@glimmerx/component';
14
+ export default class MyComponent extends Component {
15
+ static template = hbs\`\`;
16
+ }
17
+ ` ,
18
+ } ;
19
+
20
+ let transformedModule = rewriteModule ( { script } , glimmerxEnvironment ) ;
21
+
22
+ expect ( transformedModule ?. errors ) . toEqual ( [ ] ) ;
23
+ expect ( transformedModule ?. transformedContents ) . toMatchInlineSnapshot ( `
24
+ "import Component, { hbs } from '@glimmerx/component';
13
25
export default class MyComponent extends Component {
14
- static template = hbs\`\`;
15
- }
16
- ` ,
17
- } ;
18
-
19
- let transformedModule = rewriteModule ( { script } , glimmerxEnvironment ) ;
20
-
21
- expect ( transformedModule ?. errors ) . toEqual ( [ ] ) ;
22
- expect ( transformedModule ?. transformedContents ) . toMatchInlineSnapshot ( `
23
- "import Component, { hbs } from '@glimmerx/component' ;
24
- export default class MyComponent extends Component {
25
- static template = ( () => {
26
- hbs;
27
- let χ!: typeof import(\\"@glint/environment-glimmerx/types\\");
28
- return χ.template(function(𝚪: import(\\"@glint/environment-glimmerx/types\\").ResolveContext<MyComponent>) {
29
- 𝚪 ;
30
- });
31
- })() ;
32
- }"
33
- ` ) ;
34
- } ) ;
26
+ static template = (() => {
27
+ hbs;
28
+ let χ!: typeof import(\\"@glint/environment-glimmerx/types\\");
29
+ return χ.template(function(𝚪: import(\\"@glint/environment-glimmerx/types\\").ResolveContext<MyComponent>) {
30
+ 𝚪;
31
+ } );
32
+ })();
33
+ }"
34
+ ` ) ;
35
+ } ) ;
36
+
37
+ test ( 'with a class with type parameters' , ( ) => {
38
+ let script = {
39
+ filename : 'test.ts' ,
40
+ contents : stripIndent `
41
+ import Component, { hbs } from '@glimmerx/component' ;
42
+ export default class MyComponent<K extends string> extends Component<{ value: K }> {
43
+ static template = hbs\`\` ;
44
+ }
45
+ ` ,
46
+ } ;
35
47
36
- test ( 'with a class with type parameters' , ( ) => {
37
- let script = {
38
- filename : 'test.ts' ,
39
- contents : stripIndent `
40
- import Component, { hbs } from '@glimmerx/component';
48
+ let transformedModule = rewriteModule ( { script } , glimmerxEnvironment ) ;
49
+
50
+ expect ( transformedModule ?. errors ) . toEqual ( [ ] ) ;
51
+ expect ( transformedModule ?. transformedContents ) . toMatchInlineSnapshot ( `
52
+ " import Component, { hbs } from '@glimmerx/component';
41
53
export default class MyComponent<K extends string> extends Component<{ value: K }> {
42
- static template = hbs\`\`;
43
- }
44
- ` ,
45
- } ;
46
-
47
- let transformedModule = rewriteModule ( { script } , glimmerxEnvironment ) ;
48
-
49
- expect ( transformedModule ?. errors ) . toEqual ( [ ] ) ;
50
- expect ( transformedModule ?. transformedContents ) . toMatchInlineSnapshot ( `
51
- "import Component, { hbs } from '@glimmerx/component';
52
- export default class MyComponent<K extends string> extends Component<{ value: K }> {
53
- static template = (() => {
54
- hbs;
55
- let χ!: typeof import(\\"@glint/environment-glimmerx/types\\");
56
- return χ.template(function<K extends string>(𝚪: import(\\"@glint/environment-glimmerx/types\\").ResolveContext<MyComponent<K>>) {
57
- 𝚪;
58
- });
59
- })();
60
- }"
61
- ` ) ;
62
- } ) ;
54
+ static template = (() => {
55
+ hbs;
56
+ let χ!: typeof import(\\"@glint/environment-glimmerx/types\\");
57
+ return χ.template(function<K extends string>(𝚪: import(\\"@glint/environment-glimmerx/types\\").ResolveContext<MyComponent<K>>) {
58
+ 𝚪;
59
+ });
60
+ })();
61
+ }"
62
+ ` ) ;
63
+ } ) ;
64
+
65
+ test ( 'with an anonymous class' , ( ) => {
66
+ let script = {
67
+ filename : 'test.ts' ,
68
+ contents : stripIndent `
69
+ import Component, { hbs } from '@glimmerx/component';
70
+ export default class extends Component {
71
+ static template = hbs\`\`;
72
+ }
73
+ ` ,
74
+ } ;
75
+
76
+ let transformedModule = rewriteModule ( { script } , glimmerxEnvironment ) ;
77
+
78
+ expect ( transformedModule ?. errors ) . toEqual ( [
79
+ {
80
+ message : 'Classes containing templates must have a name' ,
81
+ source : script ,
82
+ location : {
83
+ start : script . contents . indexOf ( 'hbs`' ) ,
84
+ end : script . contents . lastIndexOf ( '`' ) + 1 ,
85
+ } ,
86
+ } ,
87
+ ] ) ;
63
88
64
- test ( 'with an anonymous class' , ( ) => {
65
- let script = {
66
- filename : 'test.ts' ,
67
- contents : stripIndent `
68
- import Component, { hbs } from '@glimmerx/component';
89
+ expect ( transformedModule ?. transformedContents ) . toMatchInlineSnapshot ( `
90
+ "import Component, { hbs } from '@glimmerx/component';
69
91
export default class extends Component {
70
- static template = hbs\`\`;
92
+ static template = (() => {
93
+ hbs;
94
+ let χ!: typeof import(\\"@glint/environment-glimmerx/types\\");
95
+ return χ.template(function(𝚪: import(\\"@glint/environment-glimmerx/types\\").ResolveContext<unknown>) {
96
+ 𝚪;
97
+ });
98
+ })();
99
+ }"
100
+ ` ) ;
101
+ } ) ;
102
+ } ) ;
103
+
104
+ describe ( 'standalone companion template' , ( ) => {
105
+ const emberLooseEnvironment = GlintEnvironment . load ( `ember-loose` ) ;
106
+
107
+ test ( 'with a simple class' , ( ) => {
108
+ let script = {
109
+ filename : 'test.ts' ,
110
+ contents : stripIndent `
111
+ import Component from '@glimmer/component';
112
+ export default class MyComponent extends Component {
113
+ }
114
+ ` ,
115
+ } ;
116
+
117
+ let template = {
118
+ filename : 'test.hbs' ,
119
+ contents : stripIndent `` ,
120
+ } ;
121
+
122
+ let transformedModule = rewriteModule ( { script, template } , emberLooseEnvironment ) ;
123
+
124
+ expect ( transformedModule ?. errors ) . toEqual ( [ ] ) ;
125
+ expect ( transformedModule ?. transformedContents ) . toMatchInlineSnapshot ( `
126
+ "import Component from '@glimmer/component';
127
+ export default class MyComponent extends Component {
128
+ private static '~template' = (() => {
129
+ MyComponent['~template'];
130
+ let χ!: typeof import(\\"@glint/environment-ember-loose/types\\");
131
+ return χ.template(function(𝚪: import(\\"@glint/environment-ember-loose/types\\").ResolveContext<MyComponent>) {
132
+ 𝚪;
133
+ });
134
+ })();
135
+ }"
136
+ ` ) ;
137
+ } ) ;
138
+
139
+ test ( 'with a class that is separately exported' , ( ) => {
140
+ let script = {
141
+ filename : 'test.ts' ,
142
+ contents : stripIndent `
143
+ import Component from '@glimmer/component';
144
+ class MyComponent extends Component {
145
+ }
146
+ export default MyComponent;
147
+ ` ,
148
+ } ;
149
+
150
+ let template = {
151
+ filename : 'test.hbs' ,
152
+ contents : stripIndent `` ,
153
+ } ;
154
+
155
+ let transformedModule = rewriteModule ( { script, template } , emberLooseEnvironment ) ;
156
+
157
+ expect ( transformedModule ?. errors ) . toEqual ( [ ] ) ;
158
+ expect ( transformedModule ?. transformedContents ) . toMatchInlineSnapshot ( `
159
+ "import Component from '@glimmer/component';
160
+ class MyComponent extends Component {
161
+ private static '~template' = (() => {
162
+ MyComponent['~template'];
163
+ let χ!: typeof import(\\"@glint/environment-ember-loose/types\\");
164
+ return χ.template(function(𝚪: import(\\"@glint/environment-ember-loose/types\\").ResolveContext<MyComponent>) {
165
+ 𝚪;
166
+ });
167
+ })();
71
168
}
72
- ` ,
73
- } ;
74
-
75
- let transformedModule = rewriteModule ( { script } , glimmerxEnvironment ) ;
76
-
77
- expect ( transformedModule ?. errors ) . toEqual ( [
78
- {
79
- message : 'Classes containing templates must have a name' ,
80
- source : script ,
81
- location : {
82
- start : script . contents . indexOf ( 'hbs`' ) ,
83
- end : script . contents . lastIndexOf ( '`' ) + 1 ,
169
+ export default MyComponent;"
170
+ ` ) ;
171
+ } ) ;
172
+
173
+ test ( 'with a class with type parameters' , ( ) => {
174
+ let script = {
175
+ filename : 'test.ts' ,
176
+ contents : stripIndent `
177
+ import Component from '@glimmer/component';
178
+ export default class MyComponent<K extends string> extends Component<{ value: K }> {
179
+ }
180
+ ` ,
181
+ } ;
182
+
183
+ let template = {
184
+ filename : 'test.hbs' ,
185
+ contents : stripIndent `` ,
186
+ } ;
187
+
188
+ let transformedModule = rewriteModule ( { script, template } , emberLooseEnvironment ) ;
189
+
190
+ expect ( transformedModule ?. errors ) . toEqual ( [ ] ) ;
191
+ expect ( transformedModule ?. transformedContents ) . toMatchInlineSnapshot ( `
192
+ "import Component from '@glimmer/component';
193
+ export default class MyComponent<K extends string> extends Component<{ value: K }> {
194
+ private static '~template' = (() => {
195
+ MyComponent['~template'];
196
+ let χ!: typeof import(\\"@glint/environment-ember-loose/types\\");
197
+ return χ.template(function<K extends string>(𝚪: import(\\"@glint/environment-ember-loose/types\\").ResolveContext<MyComponent<K>>) {
198
+ 𝚪;
199
+ });
200
+ })();
201
+ }"
202
+ ` ) ;
203
+ } ) ;
204
+
205
+ test ( 'with an anonymous class' , ( ) => {
206
+ let script = {
207
+ filename : 'test.ts' ,
208
+ contents : stripIndent `
209
+ import Component from '@glimmer/component';
210
+ export default class extends Component {
211
+ }
212
+ ` ,
213
+ } ;
214
+
215
+ let template = {
216
+ filename : 'test.hbs' ,
217
+ contents : stripIndent `` ,
218
+ } ;
219
+
220
+ let transformedModule = rewriteModule ( { script, template } , emberLooseEnvironment ) ;
221
+
222
+ expect ( transformedModule ?. errors ) . toEqual ( [
223
+ {
224
+ message : 'Classes with an associated template must have a name' ,
225
+ source : script ,
226
+ location : {
227
+ start : script . contents . indexOf ( 'class' ) ,
228
+ end : script . contents . lastIndexOf ( '}' ) + 1 ,
229
+ } ,
84
230
} ,
85
- } ,
86
- ] ) ;
87
-
88
- expect ( transformedModule ?. transformedContents ) . toMatchInlineSnapshot ( `
89
- "import Component, { hbs } from '@glimmerx/component';
90
- export default class extends Component {
91
- static template = (() => {
92
- hbs;
93
- let χ!: typeof import(\\"@glint/environment-glimmerx/types\\");
94
- return χ.template(function(𝚪: import(\\"@glint/environment-glimmerx/types\\").ResolveContext<unknown>) {
95
- 𝚪;
96
- });
97
- })();
98
- }"
99
- ` ) ;
231
+ ] ) ;
232
+
233
+ expect ( transformedModule ?. transformedContents ) . toMatchInlineSnapshot ( `
234
+ "import Component from '@glimmer/component';
235
+ export default class extends Component {
236
+ private static '~template' = (() => {
237
+ let χ!: typeof import(\\"@glint/environment-ember-loose/types\\");
238
+ return χ.template(function(𝚪: import(\\"@glint/environment-ember-loose/types\\").ResolveContext<unknown>) {
239
+ 𝚪;
240
+ });
241
+ })();
242
+ }"
243
+ ` ) ;
244
+ } ) ;
100
245
} ) ;
101
246
} ) ;
0 commit comments