ripple 0.3.68 → 0.3.70

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 (182) hide show
  1. package/CHANGELOG.md +57 -0
  2. package/package.json +3 -3
  3. package/src/jsx-runtime.d.ts +2 -2
  4. package/src/runtime/element.js +1 -1
  5. package/src/runtime/index-client.js +11 -11
  6. package/src/runtime/index-server.js +7 -4
  7. package/src/runtime/internal/client/bindings.js +1 -1
  8. package/src/runtime/internal/client/blocks.js +13 -4
  9. package/src/runtime/internal/client/component.js +55 -0
  10. package/src/runtime/internal/client/composite.js +4 -2
  11. package/src/runtime/internal/client/expression.js +65 -7
  12. package/src/runtime/internal/client/hmr.js +54 -43
  13. package/src/runtime/internal/client/index.js +5 -1
  14. package/src/runtime/internal/client/portal.js +70 -69
  15. package/src/runtime/internal/client/render.js +3 -0
  16. package/src/runtime/internal/server/index.js +92 -8
  17. package/tests/client/__snapshots__/html.test.tsrx.snap +3 -3
  18. package/tests/client/array/array.copy-within.test.tsrx +33 -31
  19. package/tests/client/array/array.derived.test.tsrx +186 -169
  20. package/tests/client/array/array.iteration.test.tsrx +40 -37
  21. package/tests/client/array/array.mutations.test.tsrx +113 -101
  22. package/tests/client/array/array.static.test.tsrx +119 -101
  23. package/tests/client/array/array.to-methods.test.tsrx +24 -21
  24. package/tests/client/async-suspend.test.tsrx +247 -246
  25. package/tests/client/basic/__snapshots__/basic.rendering.test.tsrx.snap +0 -1
  26. package/tests/client/basic/basic.attributes.test.tsrx +428 -423
  27. package/tests/client/basic/basic.collections.test.tsrx +109 -102
  28. package/tests/client/basic/basic.components.test.tsrx +323 -205
  29. package/tests/client/basic/basic.errors.test.tsrx +91 -91
  30. package/tests/client/basic/basic.events.test.tsrx +114 -115
  31. package/tests/client/basic/basic.get-set.test.tsrx +97 -87
  32. package/tests/client/basic/basic.hmr.test.tsrx +19 -16
  33. package/tests/client/basic/basic.reactivity.test.tsrx +199 -191
  34. package/tests/client/basic/basic.rendering.test.tsrx +272 -182
  35. package/tests/client/basic/basic.styling.test.tsrx +23 -22
  36. package/tests/client/basic/basic.utilities.test.tsrx +10 -8
  37. package/tests/client/boundaries.test.tsrx +26 -26
  38. package/tests/client/compiler/__snapshots__/compiler.assignments.test.rsrx.snap +5 -5
  39. package/tests/client/compiler/__snapshots__/compiler.assignments.test.tsrx.snap +5 -5
  40. package/tests/client/compiler/compiler.assignments.test.tsrx +77 -81
  41. package/tests/client/compiler/compiler.attributes.test.tsrx +15 -15
  42. package/tests/client/compiler/compiler.basic.test.tsrx +322 -314
  43. package/tests/client/compiler/compiler.regex.test.tsrx +44 -47
  44. package/tests/client/compiler/compiler.tracked-access.test.tsrx +38 -38
  45. package/tests/client/compiler/compiler.try-in-function.test.tsrx +16 -16
  46. package/tests/client/compiler/compiler.typescript.test.tsrx +2 -2
  47. package/tests/client/composite/composite.dynamic-components.test.tsrx +47 -48
  48. package/tests/client/composite/composite.generics.test.tsrx +168 -192
  49. package/tests/client/composite/composite.props.test.tsrx +97 -81
  50. package/tests/client/composite/composite.reactivity.test.tsrx +177 -147
  51. package/tests/client/composite/composite.render.test.tsrx +122 -105
  52. package/tests/client/computed-properties.test.tsrx +28 -28
  53. package/tests/client/context.test.tsrx +21 -21
  54. package/tests/client/css/global-additional-cases.test.tsrx +58 -58
  55. package/tests/client/css/global-advanced-selectors.test.tsrx +16 -16
  56. package/tests/client/css/global-at-rules.test.tsrx +10 -10
  57. package/tests/client/css/global-basic.test.tsrx +14 -14
  58. package/tests/client/css/global-classes-ids.test.tsrx +14 -14
  59. package/tests/client/css/global-combinators.test.tsrx +10 -10
  60. package/tests/client/css/global-complex-nesting.test.tsrx +14 -14
  61. package/tests/client/css/global-edge-cases.test.tsrx +18 -18
  62. package/tests/client/css/global-keyframes.test.tsrx +12 -12
  63. package/tests/client/css/global-nested.test.tsrx +10 -10
  64. package/tests/client/css/global-pseudo.test.tsrx +12 -12
  65. package/tests/client/css/global-scoping.test.tsrx +20 -20
  66. package/tests/client/css/style-identifier.test.tsrx +126 -259
  67. package/tests/client/date.test.tsrx +146 -133
  68. package/tests/client/dynamic-elements.test.tsrx +398 -365
  69. package/tests/client/events.test.tsrx +292 -290
  70. package/tests/client/for.test.tsrx +156 -153
  71. package/tests/client/head.test.tsrx +105 -96
  72. package/tests/client/html.test.tsrx +122 -26
  73. package/tests/client/input-value.test.tsrx +1361 -1314
  74. package/tests/client/lazy-array.test.tsrx +16 -13
  75. package/tests/client/lazy-destructuring.test.tsrx +257 -213
  76. package/tests/client/map.test.tsrx +65 -60
  77. package/tests/client/media-query.test.tsrx +22 -20
  78. package/tests/client/object.test.tsrx +87 -81
  79. package/tests/client/portal.test.tsrx +57 -51
  80. package/tests/client/ref.test.tsrx +233 -202
  81. package/tests/client/return.test.tsrx +71 -2560
  82. package/tests/client/set.test.tsrx +54 -45
  83. package/tests/client/svg.test.tsrx +216 -186
  84. package/tests/client/switch.test.tsrx +194 -193
  85. package/tests/client/track-async-hydration.test.tsrx +18 -14
  86. package/tests/client/tracked-index-access.test.tsrx +28 -18
  87. package/tests/client/try.test.tsrx +675 -548
  88. package/tests/client/tsx.test.tsrx +373 -311
  89. package/tests/client/typescript-generics.test.tsrx +145 -145
  90. package/tests/client/url/url.derived.test.tsrx +33 -28
  91. package/tests/client/url/url.parsing.test.tsrx +61 -51
  92. package/tests/client/url/url.partial-removal.test.tsrx +56 -48
  93. package/tests/client/url/url.reactivity.test.tsrx +142 -125
  94. package/tests/client/url/url.serialization.test.tsrx +13 -11
  95. package/tests/client/url-search-params/url-search-params.derived.test.tsrx +34 -29
  96. package/tests/client/url-search-params/url-search-params.initialization.test.tsrx +25 -21
  97. package/tests/client/url-search-params/url-search-params.iteration.test.tsrx +50 -45
  98. package/tests/client/url-search-params/url-search-params.mutation.test.tsrx +111 -99
  99. package/tests/client/url-search-params/url-search-params.retrieval.test.tsrx +49 -43
  100. package/tests/client/url-search-params/url-search-params.serialization.test.tsrx +14 -12
  101. package/tests/client/url-search-params/url-search-params.tracked-url.test.tsrx +16 -14
  102. package/tests/hydration/basic.test.js +3 -3
  103. package/tests/hydration/compiled/client/basic.js +586 -651
  104. package/tests/hydration/compiled/client/composite.js +79 -104
  105. package/tests/hydration/compiled/client/events.js +140 -148
  106. package/tests/hydration/compiled/client/for.js +1005 -1018
  107. package/tests/hydration/compiled/client/head.js +124 -134
  108. package/tests/hydration/compiled/client/hmr.js +41 -48
  109. package/tests/hydration/compiled/client/html-in-template.js +38 -41
  110. package/tests/hydration/compiled/client/html.js +970 -1314
  111. package/tests/hydration/compiled/client/if-children.js +234 -249
  112. package/tests/hydration/compiled/client/if.js +182 -189
  113. package/tests/hydration/compiled/client/mixed-control-flow.js +347 -303
  114. package/tests/hydration/compiled/client/nested-control-flow.js +1084 -832
  115. package/tests/hydration/compiled/client/portal.js +65 -85
  116. package/tests/hydration/compiled/client/reactivity.js +84 -90
  117. package/tests/hydration/compiled/client/return.js +38 -1939
  118. package/tests/hydration/compiled/client/switch.js +218 -224
  119. package/tests/hydration/compiled/client/track-async-serialization.js +250 -259
  120. package/tests/hydration/compiled/client/try.js +123 -132
  121. package/tests/hydration/compiled/server/basic.js +773 -831
  122. package/tests/hydration/compiled/server/composite.js +166 -191
  123. package/tests/hydration/compiled/server/events.js +170 -184
  124. package/tests/hydration/compiled/server/for.js +851 -909
  125. package/tests/hydration/compiled/server/head.js +206 -216
  126. package/tests/hydration/compiled/server/hmr.js +64 -72
  127. package/tests/hydration/compiled/server/html-in-template.js +42 -76
  128. package/tests/hydration/compiled/server/html.js +1362 -1667
  129. package/tests/hydration/compiled/server/if-children.js +419 -445
  130. package/tests/hydration/compiled/server/if.js +194 -208
  131. package/tests/hydration/compiled/server/mixed-control-flow.js +249 -257
  132. package/tests/hydration/compiled/server/nested-control-flow.js +491 -515
  133. package/tests/hydration/compiled/server/portal.js +152 -160
  134. package/tests/hydration/compiled/server/reactivity.js +94 -106
  135. package/tests/hydration/compiled/server/return.js +28 -2172
  136. package/tests/hydration/compiled/server/switch.js +274 -286
  137. package/tests/hydration/compiled/server/track-async-serialization.js +340 -358
  138. package/tests/hydration/compiled/server/try.js +167 -185
  139. package/tests/hydration/components/basic.tsrx +320 -272
  140. package/tests/hydration/components/composite.tsrx +44 -32
  141. package/tests/hydration/components/events.tsrx +101 -91
  142. package/tests/hydration/components/for.tsrx +510 -452
  143. package/tests/hydration/components/head.tsrx +87 -80
  144. package/tests/hydration/components/hmr.tsrx +22 -17
  145. package/tests/hydration/components/html-in-template.tsrx +22 -17
  146. package/tests/hydration/components/html.tsrx +525 -443
  147. package/tests/hydration/components/if-children.tsrx +158 -148
  148. package/tests/hydration/components/if.tsrx +109 -95
  149. package/tests/hydration/components/mixed-control-flow.tsrx +100 -96
  150. package/tests/hydration/components/nested-control-flow.tsrx +215 -203
  151. package/tests/hydration/components/portal.tsrx +41 -34
  152. package/tests/hydration/components/reactivity.tsrx +37 -27
  153. package/tests/hydration/components/return.tsrx +12 -556
  154. package/tests/hydration/components/switch.tsrx +120 -114
  155. package/tests/hydration/components/track-async-serialization.tsrx +107 -91
  156. package/tests/hydration/components/try.tsrx +55 -40
  157. package/tests/hydration/html.test.js +4 -4
  158. package/tests/hydration/return.test.js +13 -532
  159. package/tests/server/await.test.tsrx +3 -3
  160. package/tests/server/basic.attributes.test.tsrx +264 -195
  161. package/tests/server/basic.components.test.tsrx +296 -169
  162. package/tests/server/basic.test.tsrx +300 -198
  163. package/tests/server/compiler.test.tsrx +62 -60
  164. package/tests/server/composite.props.test.tsrx +77 -63
  165. package/tests/server/composite.test.tsrx +168 -192
  166. package/tests/server/context.test.tsrx +18 -12
  167. package/tests/server/dynamic-elements.test.tsrx +197 -180
  168. package/tests/server/for.test.tsrx +85 -78
  169. package/tests/server/head.test.tsrx +50 -43
  170. package/tests/server/html-nesting-validation.test.tsrx +8 -8
  171. package/tests/server/if.test.tsrx +57 -51
  172. package/tests/server/lazy-destructuring.test.tsrx +366 -294
  173. package/tests/server/return.test.tsrx +76 -1355
  174. package/tests/server/streaming-ssr.test.tsrx +4 -75
  175. package/tests/server/style-identifier.test.tsrx +169 -131
  176. package/tests/server/switch.test.tsrx +91 -85
  177. package/tests/server/track-async-serialization.test.tsrx +105 -85
  178. package/tests/server/try.test.tsrx +374 -280
  179. package/tests/utils/compiler-compat-config.test.js +2 -2
  180. package/tests/utils/runtime-imports.test.js +10 -0
  181. package/types/index.d.ts +8 -0
  182. package/tests/client/__snapshots__/html.test.rsrx.snap +0 -40
@@ -14,21 +14,22 @@ describe('basic client > collections', () => {
14
14
  }
15
15
 
16
16
  it('renders with simple reactive objects', () => {
17
- component Basic() {
18
- let &[user] = track({
19
- name: 'John',
20
- age: 25,
21
- });
22
-
23
- <div class="name">{user.name}</div>
24
- <div class="age">{user.age}</div>
25
- <button
26
- onClick={() => {
27
- user = { ...user, name: 'Jane', age: 30 };
28
- }}
29
- >
30
- {'Update User'}
31
- </button>
17
+ function Basic() {
18
+ return <>
19
+ let &[user] = track({
20
+ name: 'John',
21
+ age: 25,
22
+ });
23
+ <div class="name">{user.name}</div>
24
+ <div class="age">{user.age}</div>
25
+ <button
26
+ onClick={() => {
27
+ user = { ...user, name: 'Jane', age: 30 };
28
+ }}
29
+ >
30
+ {'Update User'}
31
+ </button>
32
+ </>;
32
33
  }
33
34
 
34
35
  render(Basic);
@@ -48,22 +49,23 @@ describe('basic client > collections', () => {
48
49
  });
49
50
 
50
51
  it('renders with nested reactive objects', () => {
51
- component Basic() {
52
- let &[user] = track({
53
- name: track('John'),
54
- age: track(25),
55
- });
56
-
57
- <div class="name">{user.name.value}</div>
58
- <div class="age">{user.age.value}</div>
59
- <button
60
- onClick={() => {
61
- user.name.value = 'Jane';
62
- user.age.value = 30;
63
- }}
64
- >
65
- {'Update User'}
66
- </button>
52
+ function Basic() {
53
+ return <>
54
+ let &[user] = track({
55
+ name: track('John'),
56
+ age: track(25),
57
+ });
58
+ <div class="name">{user.name.value}</div>
59
+ <div class="age">{user.age.value}</div>
60
+ <button
61
+ onClick={() => {
62
+ user.name.value = 'Jane';
63
+ user.age.value = 30;
64
+ }}
65
+ >
66
+ {'Update User'}
67
+ </button>
68
+ </>;
67
69
  }
68
70
 
69
71
  render(Basic);
@@ -83,21 +85,21 @@ describe('basic client > collections', () => {
83
85
  });
84
86
 
85
87
  it('works as a reactive RippleArray when constructed using # syntactic sugar', () => {
86
- component App() {
87
- const array = new RippleArray(1, 2, 3);
88
-
89
- <pre>{String(array[3])}</pre>
90
- <pre>{array[0]}</pre>
91
- <pre>{TRACKED_ARRAY in array}</pre>
92
-
93
- <button
94
- onClick={() => {
95
- array.push(array.length + 1);
96
- array[0] = array[0] + 1;
97
- }}
98
- >
99
- {'Add'}
100
- </button>
88
+ function App() {
89
+ return <>
90
+ const array = new RippleArray(1, 2, 3);
91
+ <pre>{String(array[3])}</pre>
92
+ <pre>{array[0]}</pre>
93
+ <pre>{TRACKED_ARRAY in array}</pre>
94
+ <button
95
+ onClick={() => {
96
+ array.push(array.length + 1);
97
+ array[0] = array[0] + 1;
98
+ }}
99
+ >
100
+ {'Add'}
101
+ </button>
102
+ </>;
101
103
  }
102
104
 
103
105
  render(App);
@@ -119,35 +121,36 @@ describe('basic client > collections', () => {
119
121
  });
120
122
 
121
123
  it('cleans up mixed tsrx collection sentinels and trailing text on rerender', () => {
122
- component App() {
123
- let &[primary] = track(true);
124
-
125
- <div class="frame">
126
- {<tsx>
127
- {primary
128
- ? [
129
- 'first:',
130
- <strong class="middle">
131
- {'one'}
132
- </strong>,
133
- ':tail',
134
- ]
135
- : [
136
- 'second:',
137
- <strong class="middle">
138
- {'two'}
139
- </strong>,
140
- ':done',
141
- ]}
142
- </tsx>}
143
- </div>
144
- <button
145
- onClick={() => {
146
- primary = !primary;
147
- }}
148
- >
149
- {'toggle'}
150
- </button>
124
+ function App() {
125
+ return <>
126
+ let &[primary] = track(true);
127
+ <div class="frame">
128
+ {<tsx>
129
+ {primary
130
+ ? [
131
+ 'first:',
132
+ <strong class="middle">
133
+ {'one'}
134
+ </strong>,
135
+ ':tail',
136
+ ]
137
+ : [
138
+ 'second:',
139
+ <strong class="middle">
140
+ {'two'}
141
+ </strong>,
142
+ ':done',
143
+ ]}
144
+ </tsx>}
145
+ </div>
146
+ <button
147
+ onClick={() => {
148
+ primary = !primary;
149
+ }}
150
+ >
151
+ {'toggle'}
152
+ </button>
153
+ </>;
151
154
  }
152
155
 
153
156
  render(App);
@@ -175,19 +178,21 @@ describe('basic client > collections', () => {
175
178
  });
176
179
 
177
180
  it('flattens nested primitive arrays inside mixed tsrx collections', () => {
178
- component App() {
179
- <div class="frame">
180
- {<tsx>
181
- {[
182
- 'start:',
183
- ['one', 2, true, null, false],
184
- <strong>
185
- {'!'}
186
- </strong>,
187
- ':end',
188
- ]}
189
- </tsx>}
190
- </div>
181
+ function App() {
182
+ return <>
183
+ <div class="frame">
184
+ {<tsx>
185
+ {[
186
+ 'start:',
187
+ ['one', 2, true, null, false],
188
+ <strong>
189
+ {'!'}
190
+ </strong>,
191
+ ':end',
192
+ ]}
193
+ </tsx>}
194
+ </div>
195
+ </>;
191
196
  }
192
197
 
193
198
  render(App);
@@ -196,11 +201,12 @@ describe('basic client > collections', () => {
196
201
  });
197
202
 
198
203
  it('flattens direct primitive array expressions', () => {
199
- component App() {
200
- const items = ['start:', ['one', 2], null, true, false, ':end'];
201
-
202
- <div class="frame">{['start:', ['one', 2], null, true, false, ':end']}</div>
203
- <div class="bound-frame">{items}</div>
204
+ function App() {
205
+ return <>
206
+ const items = ['start:', ['one', 2], null, true, false, ':end'];
207
+ <div class="frame">{['start:', ['one', 2], null, true, false, ':end']}</div>
208
+ <div class="bound-frame">{items}</div>
209
+ </>;
204
210
  }
205
211
 
206
212
  render(App);
@@ -210,15 +216,16 @@ describe('basic client > collections', () => {
210
216
  });
211
217
 
212
218
  it('flattens conditional primitive array expressions', () => {
213
- component App() {
214
- const condition = true;
215
- const ternary_items = condition
216
- ? ['start:', ['one', 2], null, true, false, ':end']
217
- : ['fallback'];
218
- const logical_items = condition && ['start:', ['one', 2], null, true, false, ':end'];
219
-
220
- <div class="ternary-frame">{ternary_items}</div>
221
- <div class="logical-frame">{logical_items}</div>
219
+ function App() {
220
+ return <>
221
+ const condition = true;
222
+ const ternary_items = condition
223
+ ? ['start:', ['one', 2], null, true, false, ':end']
224
+ : ['fallback'];
225
+ const logical_items = condition && ['start:', ['one', 2], null, true, false, ':end'];
226
+ <div class="ternary-frame">{ternary_items}</div>
227
+ <div class="logical-frame">{logical_items}</div>
228
+ </>;
222
229
  }
223
230
 
224
231
  render(App);