ripple 0.3.71 → 0.3.74

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (165) hide show
  1. package/CHANGELOG.md +75 -0
  2. package/package.json +3 -3
  3. package/src/jsx-runtime.d.ts +2 -8
  4. package/src/runtime/index-client.js +3 -13
  5. package/src/runtime/internal/client/blocks.js +3 -25
  6. package/src/runtime/internal/client/for.js +80 -5
  7. package/src/runtime/internal/client/index.js +0 -2
  8. package/src/runtime/internal/client/types.d.ts +0 -10
  9. package/tests/client/__snapshots__/computed-properties.test.tsrx.snap +8 -0
  10. package/tests/client/__snapshots__/for.test.tsrx.snap +22 -0
  11. package/tests/client/__snapshots__/html.test.tsrx.snap +4 -0
  12. package/tests/client/array/array.copy-within.test.tsrx +19 -19
  13. package/tests/client/array/array.derived.test.tsrx +97 -109
  14. package/tests/client/array/array.iteration.test.tsrx +28 -28
  15. package/tests/client/array/array.mutations.test.tsrx +68 -68
  16. package/tests/client/array/array.static.test.tsrx +82 -92
  17. package/tests/client/array/array.to-methods.test.tsrx +15 -15
  18. package/tests/client/async-suspend.test.tsrx +180 -179
  19. package/tests/client/basic/__snapshots__/basic.attributes.test.tsrx.snap +2 -0
  20. package/tests/client/basic/__snapshots__/basic.rendering.test.tsrx.snap +4 -0
  21. package/tests/client/basic/basic.attributes.test.tsrx +273 -317
  22. package/tests/client/basic/basic.collections.test.tsrx +59 -71
  23. package/tests/client/basic/basic.components.test.tsrx +196 -222
  24. package/tests/client/basic/basic.errors.test.tsrx +72 -78
  25. package/tests/client/basic/basic.events.test.tsrx +80 -85
  26. package/tests/client/basic/basic.get-set.test.tsrx +54 -64
  27. package/tests/client/basic/basic.hmr.test.tsrx +15 -19
  28. package/tests/client/basic/basic.reactivity.test.tsrx +121 -135
  29. package/tests/client/basic/basic.rendering.test.tsrx +273 -178
  30. package/tests/client/basic/basic.utilities.test.tsrx +8 -10
  31. package/tests/client/boundaries.test.tsrx +18 -18
  32. package/tests/client/compiler/compiler.assignments.test.tsrx +77 -76
  33. package/tests/client/compiler/compiler.attributes.test.tsrx +18 -14
  34. package/tests/client/compiler/compiler.basic.test.tsrx +364 -296
  35. package/tests/client/compiler/compiler.regex.test.tsrx +40 -44
  36. package/tests/client/compiler/compiler.tracked-access.test.tsrx +57 -38
  37. package/tests/client/compiler/compiler.try-in-function.test.tsrx +16 -16
  38. package/tests/client/compiler/compiler.typescript.test.tsrx +4 -3
  39. package/tests/client/composite/composite.dynamic-components.test.tsrx +41 -44
  40. package/tests/client/composite/composite.generics.test.tsrx +165 -167
  41. package/tests/client/composite/composite.props.test.tsrx +66 -74
  42. package/tests/client/composite/composite.reactivity.test.tsrx +132 -166
  43. package/tests/client/composite/composite.render.test.tsrx +92 -101
  44. package/tests/client/computed-properties.test.tsrx +14 -18
  45. package/tests/client/context.test.tsrx +14 -18
  46. package/tests/client/css/global-additional-cases.test.tsrx +491 -437
  47. package/tests/client/css/global-advanced-selectors.test.tsrx +169 -153
  48. package/tests/client/css/global-at-rules.test.tsrx +71 -66
  49. package/tests/client/css/global-basic.test.tsrx +105 -98
  50. package/tests/client/css/global-classes-ids.test.tsrx +128 -114
  51. package/tests/client/css/global-combinators.test.tsrx +83 -78
  52. package/tests/client/css/global-complex-nesting.test.tsrx +134 -120
  53. package/tests/client/css/global-edge-cases.test.tsrx +138 -120
  54. package/tests/client/css/global-keyframes.test.tsrx +108 -96
  55. package/tests/client/css/global-nested.test.tsrx +88 -78
  56. package/tests/client/css/global-pseudo.test.tsrx +104 -98
  57. package/tests/client/css/global-scoping.test.tsrx +145 -125
  58. package/tests/client/css/style-identifier.test.tsrx +62 -69
  59. package/tests/client/date.test.tsrx +83 -83
  60. package/tests/client/dynamic-elements.test.tsrx +227 -283
  61. package/tests/client/events.test.tsrx +252 -266
  62. package/tests/client/for.test.tsrx +120 -127
  63. package/tests/client/head.test.tsrx +40 -48
  64. package/tests/client/html.test.tsrx +37 -49
  65. package/tests/client/input-value.test.tsrx +1125 -1354
  66. package/tests/client/lazy-array.test.tsrx +10 -16
  67. package/tests/client/lazy-destructuring.test.tsrx +169 -221
  68. package/tests/client/map.test.tsrx +39 -41
  69. package/tests/client/media-query.test.tsrx +15 -19
  70. package/tests/client/object.test.tsrx +46 -56
  71. package/tests/client/portal.test.tsrx +31 -37
  72. package/tests/client/ref.test.tsrx +173 -193
  73. package/tests/client/return.test.tsrx +62 -37
  74. package/tests/client/set.test.tsrx +33 -33
  75. package/tests/client/svg.test.tsrx +195 -215
  76. package/tests/client/switch.test.tsrx +201 -191
  77. package/tests/client/track-async-hydration.test.tsrx +14 -18
  78. package/tests/client/tracked-index-access.test.tsrx +18 -28
  79. package/tests/client/try.test.tsrx +494 -619
  80. package/tests/client/tsx.test.tsrx +290 -371
  81. package/tests/client/typescript-generics.test.tsrx +121 -129
  82. package/tests/client/url/url.derived.test.tsrx +21 -25
  83. package/tests/client/url/url.parsing.test.tsrx +35 -35
  84. package/tests/client/url/url.partial-removal.test.tsrx +32 -32
  85. package/tests/client/url/url.reactivity.test.tsrx +68 -72
  86. package/tests/client/url/url.serialization.test.tsrx +8 -8
  87. package/tests/client/url-search-params/url-search-params.derived.test.tsrx +21 -27
  88. package/tests/client/url-search-params/url-search-params.initialization.test.tsrx +16 -16
  89. package/tests/client/url-search-params/url-search-params.iteration.test.tsrx +37 -37
  90. package/tests/client/url-search-params/url-search-params.mutation.test.tsrx +56 -60
  91. package/tests/client/url-search-params/url-search-params.retrieval.test.tsrx +32 -34
  92. package/tests/client/url-search-params/url-search-params.serialization.test.tsrx +9 -9
  93. package/tests/client/url-search-params/url-search-params.tracked-url.test.tsrx +10 -10
  94. package/tests/hydration/compiled/client/basic.js +396 -325
  95. package/tests/hydration/compiled/client/composite.js +52 -44
  96. package/tests/hydration/compiled/client/for.js +734 -604
  97. package/tests/hydration/compiled/client/head.js +183 -103
  98. package/tests/hydration/compiled/client/html.js +93 -86
  99. package/tests/hydration/compiled/client/if-children.js +95 -71
  100. package/tests/hydration/compiled/client/if.js +113 -89
  101. package/tests/hydration/compiled/client/mixed-control-flow.js +225 -209
  102. package/tests/hydration/compiled/client/nested-control-flow.js +94 -98
  103. package/tests/hydration/compiled/client/reactivity.js +26 -24
  104. package/tests/hydration/compiled/client/return.js +8 -42
  105. package/tests/hydration/compiled/client/switch.js +208 -173
  106. package/tests/hydration/compiled/client/track-async-serialization.js +176 -128
  107. package/tests/hydration/compiled/client/try.js +29 -21
  108. package/tests/hydration/compiled/server/basic.js +210 -221
  109. package/tests/hydration/compiled/server/composite.js +13 -14
  110. package/tests/hydration/compiled/server/for.js +427 -444
  111. package/tests/hydration/compiled/server/head.js +199 -189
  112. package/tests/hydration/compiled/server/html.js +33 -41
  113. package/tests/hydration/compiled/server/if-children.js +114 -117
  114. package/tests/hydration/compiled/server/if.js +77 -83
  115. package/tests/hydration/compiled/server/mixed-control-flow.js +145 -150
  116. package/tests/hydration/compiled/server/nested-control-flow.js +10 -0
  117. package/tests/hydration/compiled/server/reactivity.js +24 -22
  118. package/tests/hydration/compiled/server/return.js +6 -18
  119. package/tests/hydration/compiled/server/switch.js +179 -176
  120. package/tests/hydration/compiled/server/track-async-serialization.js +88 -70
  121. package/tests/hydration/compiled/server/try.js +31 -35
  122. package/tests/hydration/components/basic.tsrx +216 -286
  123. package/tests/hydration/components/composite.tsrx +32 -42
  124. package/tests/hydration/components/events.tsrx +81 -101
  125. package/tests/hydration/components/for.tsrx +270 -336
  126. package/tests/hydration/components/head.tsrx +43 -39
  127. package/tests/hydration/components/hmr.tsrx +16 -22
  128. package/tests/hydration/components/html-in-template.tsrx +15 -21
  129. package/tests/hydration/components/html.tsrx +442 -526
  130. package/tests/hydration/components/if-children.tsrx +107 -125
  131. package/tests/hydration/components/if.tsrx +68 -90
  132. package/tests/hydration/components/mixed-control-flow.tsrx +65 -72
  133. package/tests/hydration/components/nested-control-flow.tsrx +202 -216
  134. package/tests/hydration/components/portal.tsrx +33 -41
  135. package/tests/hydration/components/reactivity.tsrx +26 -34
  136. package/tests/hydration/components/return.tsrx +4 -6
  137. package/tests/hydration/components/switch.tsrx +73 -78
  138. package/tests/hydration/components/track-async-serialization.tsrx +83 -93
  139. package/tests/hydration/components/try.tsrx +37 -51
  140. package/tests/hydration/switch.test.js +8 -8
  141. package/tests/server/await.test.tsrx +3 -3
  142. package/tests/server/basic.attributes.test.tsrx +120 -167
  143. package/tests/server/basic.components.test.tsrx +163 -197
  144. package/tests/server/basic.test.tsrx +298 -220
  145. package/tests/server/compiler.test.tsrx +142 -72
  146. package/tests/server/composite.props.test.tsrx +54 -58
  147. package/tests/server/composite.test.tsrx +165 -167
  148. package/tests/server/context.test.tsrx +13 -17
  149. package/tests/server/dynamic-elements.test.tsrx +103 -135
  150. package/tests/server/for.test.tsrx +115 -84
  151. package/tests/server/head.test.tsrx +31 -31
  152. package/tests/server/html-nesting-validation.test.tsrx +16 -8
  153. package/tests/server/if.test.tsrx +49 -59
  154. package/tests/server/lazy-destructuring.test.tsrx +288 -366
  155. package/tests/server/return.test.tsrx +58 -36
  156. package/tests/server/streaming-ssr.test.tsrx +4 -4
  157. package/tests/server/style-identifier.test.tsrx +58 -66
  158. package/tests/server/switch.test.tsrx +89 -97
  159. package/tests/server/track-async-serialization.test.tsrx +85 -103
  160. package/tests/server/try.test.tsrx +275 -360
  161. package/tests/utils/ref-types.test.js +72 -0
  162. package/tests/utils/vite-plugin-config.test.js +41 -74
  163. package/types/index.d.ts +1 -0
  164. package/src/runtime/internal/client/compat.js +0 -40
  165. package/tests/utils/compiler-compat-config.test.js +0 -38
@@ -14,19 +14,19 @@ describe('passing reactivity between boundaries tests', () => {
14
14
  return double;
15
15
  }
16
16
 
17
- function App() {
18
- return <>
19
- let &[count, countTracked] = track(0);
20
- const &[double] = createDouble(countTracked);
21
- <div>{'Double: ' + double}</div>
17
+ function App() @{
18
+ let &[count, countTracked] = track(0);
19
+ const &[double] = createDouble(countTracked);
20
+ <>
21
+ <div>
22
+ {'Double: ' + double}
23
+ </div>
22
24
  <button
23
25
  onClick={() => {
24
26
  count++;
25
27
  }}
26
- >
27
- {'Increment'}
28
- </button>
29
- </>;
28
+ >{'Increment'}</button>
29
+ </>
30
30
  }
31
31
 
32
32
  render(App);
@@ -63,19 +63,19 @@ describe('passing reactivity between boundaries tests', () => {
63
63
  return { double };
64
64
  }
65
65
 
66
- function App() {
67
- return <>
68
- let count = track(0);
69
- const { double } = createDouble({ count });
70
- <div>{'Double: ' + double.value}</div>
66
+ function App() @{
67
+ let count = track(0);
68
+ const { double } = createDouble({ count });
69
+ <>
70
+ <div>
71
+ {'Double: ' + double.value}
72
+ </div>
71
73
  <button
72
74
  onClick={() => {
73
75
  count.value++;
74
76
  }}
75
- >
76
- {'Increment'}
77
- </button>
78
- </>;
77
+ >{'Increment'}</button>
78
+ </>
79
79
  }
80
80
 
81
81
  render(App);
@@ -7,62 +7,61 @@ describe('compiler > assignments', () => {
7
7
  it('properly handles JS assignments, reads and updates to array indices', () => {
8
8
  const logs: (number | undefined)[] = [];
9
9
 
10
- function App() {
11
- return <>
12
- let items: number[] = [];
13
- let tracked_items = track<number[]>([]);
14
- let items2 = new Array();
15
- let items3: RippleArray<number> = new RippleArray();
16
- let i = 0;
17
- logs.push(items[0]);
18
- logs.push(items[i]);
19
- logs.push(tracked_items.value[0]);
20
- logs.push(tracked_items.value[i]);
21
- logs.push(items2[0]);
22
- logs.push(items2[i]);
23
- logs.push(items3[0]);
24
- logs.push(items3[i]);
25
- items[0] = 123;
26
- items[i] = 123;
27
- tracked_items.value[0] = 123;
28
- tracked_items.value[i] = 123;
29
- items2[0] = 123;
30
- items2[i] = 123;
31
- items3[0] = 123;
32
- items3[i] = 123;
33
- logs.push(items[0]);
34
- logs.push(items[i]);
35
- logs.push(tracked_items.value[0]);
36
- logs.push(tracked_items.value[i]);
37
- logs.push(items2[0]);
38
- logs.push(items2[i]);
39
- logs.push(items3[0]);
40
- logs.push(items3[i]);
41
- items[0]++;
42
- items[i]++;
43
- tracked_items.value[0]++;
44
- tracked_items.value[i]++;
45
- items2[0]++;
46
- items2[i]++;
47
- items3[0]++;
48
- items3[i]++;
49
- logs.push(items[0]);
50
- logs.push(items[i]);
51
- logs.push(tracked_items.value[0]);
52
- logs.push(tracked_items.value[i]);
53
- logs.push(items2[0]);
54
- logs.push(items2[i]);
55
- logs.push(items3[0]);
56
- logs.push(items3[i]);
57
- logs.push(--items[0]);
58
- logs.push(--items[i]);
59
- logs.push(--tracked_items.value[0]);
60
- logs.push(--tracked_items.value[i]);
61
- logs.push(--items2[0]);
62
- logs.push(--items2[i]);
63
- logs.push(--items3[0]);
64
- logs.push(--items3[i]);
65
- </>;
10
+ function App() @{
11
+ let items: number[] = [];
12
+ let tracked_items = track<number[]>([]);
13
+ let items2 = new Array();
14
+ let items3: RippleArray<number> = new RippleArray();
15
+ let i = 0;
16
+ logs.push(items[0]);
17
+ logs.push(items[i]);
18
+ logs.push(tracked_items.value[0]);
19
+ logs.push(tracked_items.value[i]);
20
+ logs.push(items2[0]);
21
+ logs.push(items2[i]);
22
+ logs.push(items3[0]);
23
+ logs.push(items3[i]);
24
+ items[0] = 123;
25
+ items[i] = 123;
26
+ tracked_items.value[0] = 123;
27
+ tracked_items.value[i] = 123;
28
+ items2[0] = 123;
29
+ items2[i] = 123;
30
+ items3[0] = 123;
31
+ items3[i] = 123;
32
+ logs.push(items[0]);
33
+ logs.push(items[i]);
34
+ logs.push(tracked_items.value[0]);
35
+ logs.push(tracked_items.value[i]);
36
+ logs.push(items2[0]);
37
+ logs.push(items2[i]);
38
+ logs.push(items3[0]);
39
+ logs.push(items3[i]);
40
+ items[0]++;
41
+ items[i]++;
42
+ tracked_items.value[0]++;
43
+ tracked_items.value[i]++;
44
+ items2[0]++;
45
+ items2[i]++;
46
+ items3[0]++;
47
+ items3[i]++;
48
+ logs.push(items[0]);
49
+ logs.push(items[i]);
50
+ logs.push(tracked_items.value[0]);
51
+ logs.push(tracked_items.value[i]);
52
+ logs.push(items2[0]);
53
+ logs.push(items2[i]);
54
+ logs.push(items3[0]);
55
+ logs.push(items3[i]);
56
+ logs.push(--items[0]);
57
+ logs.push(--items[i]);
58
+ logs.push(--tracked_items.value[0]);
59
+ logs.push(--tracked_items.value[i]);
60
+ logs.push(--items2[0]);
61
+ logs.push(--items2[i]);
62
+ logs.push(--items3[0]);
63
+ logs.push(--items3[i]);
64
+ <></>
66
65
  }
67
66
 
68
67
  render(App);
@@ -105,13 +104,14 @@ describe('compiler > assignments', () => {
105
104
 
106
105
  it('compiles tracked values in effect with assignment expression', () => {
107
106
  const source = `import { track, effect } from 'ripple';
108
- function App() { return <>
107
+ function App() @{
109
108
  let &[count] = track(0);
110
109
 
111
110
  effect(() => {
112
111
  state.count = count;
113
112
  });
114
- </>; }`;
113
+ <></>
114
+ }`;
115
115
  const result = compile(source, 'test.tsrx');
116
116
  const effect_match = result.code.match(EFFECT_BODY_REGEX);
117
117
  expect(effect_match?.[1].trim()).toMatchSnapshot();
@@ -119,7 +119,7 @@ function App() { return <>
119
119
 
120
120
  it('compiles tracked values in effect with update expressions', () => {
121
121
  const source = `import { track, effect, untrack } from 'ripple';
122
- function App() { return <>
122
+ function App() @{
123
123
  let &[count] = track(5);
124
124
 
125
125
  effect(() => {
@@ -130,7 +130,8 @@ function App() { return <>
130
130
  state.postDecrement = count--;
131
131
  });
132
132
  });
133
- </>; }`;
133
+ <></>
134
+ }`;
134
135
  const result = compile(source, 'test.tsrx');
135
136
  const effect_match = result.code.match(EFFECT_BODY_REGEX);
136
137
  expect(effect_match?.[1].trim()).toMatchSnapshot();
@@ -138,15 +139,15 @@ function App() { return <>
138
139
 
139
140
  it('compiles unknown lazy array destructuring through lazy array helpers', () => {
140
141
  const source = `import { track } from 'ripple';
141
- function Child({ tr: &[count, tr] }) { return <>
142
+ function Child({ tr: &[count, tr] }) @{
142
143
  count++;
143
144
  tr[0]++;
144
145
  <div>{count}</div>
145
- </>; }
146
- function App() { return <>
146
+ }
147
+ function App() @{
147
148
  let tracked = track(0);
148
149
  <Child tr={tracked} />
149
- </>; }`;
150
+ }`;
150
151
  const { code } = compile(source, 'test.tsrx', { mode: 'client' });
151
152
 
152
153
  expect(code).toContain('_$_.lazy_array_get(lazy, 0)');
@@ -158,13 +159,13 @@ function App() { return <>
158
159
  });
159
160
 
160
161
  it('compiles writes to unknown lazy array index 1 through lazy array helpers', () => {
161
- const source = `function Child({ pair: &[first, second] }) { return <>
162
+ const source = `function Child({ pair: &[first, second] }) @{
162
163
  second = 10;
163
164
  <div>{first}</div>
164
- </>; }
165
- function App() { return <>
165
+ }
166
+ function App() @{
166
167
  <Child pair={[0, 1]} />
167
- </>; }`;
168
+ }`;
168
169
  const { code } = compile(source, 'test.tsrx', { mode: 'client' });
169
170
 
170
171
  expect(code).toContain('_$_.lazy_array_set(lazy, 10, 1)');
@@ -172,13 +173,13 @@ function App() { return <>
172
173
  });
173
174
 
174
175
  it('does not double-wrap member access on lazy array value bindings', () => {
175
- const source = `function Child({ pair: &[first] }) { return <>
176
+ const source = `function Child({ pair: &[first] }) @{
176
177
  let value = first[0];
177
178
  <div>{value}</div>
178
- </>; }
179
- function App() { return <>
179
+ }
180
+ function App() @{
180
181
  <Child pair={[{ 0: 'x' }]} />
181
- </>; }`;
182
+ }`;
182
183
  const { code } = compile(source, 'test.tsrx', { mode: 'client' });
183
184
 
184
185
  expect(code).toContain('let value = _$_.lazy_array_get(lazy, 0)[0];');
@@ -187,13 +188,13 @@ function App() { return <>
187
188
 
188
189
  it('throws on indexed access through known tracked lazy destructures', () => {
189
190
  const source = `import { track } from 'ripple';
190
- function App() { return <>
191
+ function App() @{
191
192
  let &[value, tracked_ref] = track({ 0: 'x' });
192
193
  let nested = value[0];
193
194
  tracked_ref[0] = { 0: 'y' };
194
195
  let next = value[0];
195
196
  <div>{nested}{next}</div>
196
- </>; }`;
197
+ }`;
197
198
 
198
199
  expect(() => compile(source, 'test.tsrx', { mode: 'client' })).toThrow(
199
200
  /Use \.value or &\[\] lazy destructuring/,
@@ -202,14 +203,14 @@ function App() { return <>
202
203
 
203
204
  it('throws on known tracked indexed access', () => {
204
205
  const source = `import { track } from 'ripple';
205
- function App() { return <>
206
+ function App() @{
206
207
  let tracked = track(0);
207
208
  tracked[0]++;
208
209
  tracked[0] = tracked[0] + 1;
209
210
  let value = tracked[0];
210
211
  let ref = tracked[1];
211
212
  <div>{value}</div>
212
- </>; }`;
213
+ }`;
213
214
 
214
215
  expect(() => compile(source, 'test.tsrx', { mode: 'client' })).toThrow(
215
216
  /Use \.value or &\[\] lazy destructuring/,
@@ -3,13 +3,13 @@ import { parse, compile } from '@tsrx/ripple';
3
3
  describe('compiler > attributes', () => {
4
4
  it('generates valid JavaScript for component props with hyphenated attributes', () => {
5
5
  const source = `
6
- function Child(props) { return <>
6
+ function Child(props) @{
7
7
  <div />
8
- </>; }
8
+ }
9
9
 
10
- export default function App() { return <>
10
+ export default function App() @{
11
11
  <Child data-scope="test" aria-label="accessible" class="valid" />
12
- </>; }`;
12
+ }`;
13
13
 
14
14
  const result = compile(source, 'test.tsrx', { mode: 'client' });
15
15
 
@@ -29,8 +29,12 @@ describe('compiler > attributes', () => {
29
29
 
30
30
  testCases.forEach(({ attr, expected }) => {
31
31
  const source = `
32
- function Child(props) { return <> <div /> </>; }
33
- export default function App() { return <> <Child ${attr} /> </>; }`;
32
+ function Child(props) @{
33
+ <div />
34
+ }
35
+ export default function App() @{
36
+ <Child ${attr} />
37
+ }`;
34
38
 
35
39
  const result = compile(source, 'test.tsrx', { mode: 'client' });
36
40
  expect(result.code).toMatch(expected);
@@ -39,11 +43,11 @@ describe('compiler > attributes', () => {
39
43
 
40
44
  it('handles mixed valid and invalid attribute identifiers correctly', () => {
41
45
  const source = `
42
- function Child(props) { return <>
46
+ function Child(props) @{
43
47
  <div />
44
- </>; }
48
+ }
45
49
 
46
- export default function App() { return <>
50
+ export default function App() @{
47
51
  <Child
48
52
  validProp="valid"
49
53
  class="valid"
@@ -52,7 +56,7 @@ describe('compiler > attributes', () => {
52
56
  aria-invalid="invalid"
53
57
  custom-prop="invalid"
54
58
  />
55
- </>; }`;
59
+ }`;
56
60
 
57
61
  const result = compile(source, 'test.tsrx', { mode: 'client' });
58
62
 
@@ -69,13 +73,13 @@ describe('compiler > attributes', () => {
69
73
 
70
74
  it('ensures generated code is syntactically valid JavaScript', () => {
71
75
  const source = `
72
- function Child(props) { return <>
76
+ function Child(props) @{
73
77
  <div />
74
- </>; }
78
+ }
75
79
 
76
- export default function App() { return <>
80
+ export default function App() @{
77
81
  <Child data-scope="test" />
78
- </>; }`;
82
+ }`;
79
83
 
80
84
  const result = compile(source, 'test.tsrx', { mode: 'client' });
81
85