ripple 0.3.72 → 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 +66 -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 +55 -61
  23. package/tests/client/basic/basic.components.test.tsrx +196 -218
  24. package/tests/client/basic/basic.errors.test.tsrx +70 -76
  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 +357 -288
  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 +286 -292
  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 +390 -319
  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 -258
  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 +117 -162
  143. package/tests/server/basic.components.test.tsrx +163 -193
  144. package/tests/server/basic.test.tsrx +298 -198
  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
@@ -1,200 +1,192 @@
1
1
  describe('generic patterns', () => {
2
2
  it('tests simple generic function', () => {
3
- function App() {
4
- return <>
5
- const e = new Map<string, Promise<number>>();
6
- const a = new Array<number>();
7
- const b = new Array<string>();
8
- <div class="still-works">
9
- <span>{'Test'}</span>
10
- </div>
11
- const someSource = new Array<number>(1, 2, 3);
12
- const d = someSource.map<number>((x) => x * 2).filter<number>((x) => !!x);
13
- </>;
3
+ function App() @{
4
+ const e = new Map<string, Promise<number>>();
5
+ const a = new Array<number>();
6
+ const b = new Array<string>();
7
+ const someSource = new Array<number>(1, 2, 3);
8
+ const d = someSource.map<number>((x) => x * 2).filter<number>((x) => !!x);
9
+ <div class="still-works">
10
+ <span>{'Test'}</span>
11
+ </div>
14
12
  }
15
13
 
16
14
  render(App);
17
15
  });
18
16
 
19
17
  it('tests member expression)', () => {
20
- function App() {
21
- return <>
22
- class List<T> {
23
- items: T[];
24
- constructor() {
25
- this.items = [];
26
- }
18
+ function App() @{
19
+ class List<T> {
20
+ items: T[];
21
+ constructor() {
22
+ this.items = [];
27
23
  }
28
- <div class="still-works">
29
- <span>{'Test'}</span>
30
- </div>
31
- class Containers {
32
- static List<T>() {
33
- return new List<T>();
34
- }
24
+ }
25
+ class Containers {
26
+ static List<T>() {
27
+ return new List<T>();
35
28
  }
36
- const c = Containers.List<string>();
37
- </>;
29
+ }
30
+ const c = Containers.List<string>();
31
+ <div class="still-works">
32
+ <span>{'Test'}</span>
33
+ </div>
38
34
  }
39
35
 
40
36
  render(App);
41
37
  });
42
38
 
43
39
  it('tests simple generic function with return type', () => {
44
- function App() {
45
- return <>
46
- function getBuilder() {
47
- return {
48
- build: function <T>() {
49
- return 'test';
50
- },
51
- };
52
- }
53
- </>;
40
+ function App() @{
41
+ function getBuilder() {
42
+ return {
43
+ build: function <T>() {
44
+ return 'test';
45
+ },
46
+ };
47
+ }
48
+ <></>
54
49
  }
55
50
 
56
51
  render(App);
57
52
  });
58
53
 
59
54
  it('tests simple generic function with return type and no arrow function', () => {
60
- function App() {
61
- return <>
62
- function getBuilder() {
63
- return {
64
- build<T>(): T {
65
- return 'test' as unknown as T;
66
- },
67
- };
68
- }
69
- <div class="still-works">
70
- <span>{'Test'}</span>
71
- </div>
72
- const f = getBuilder().build<string>();
73
- </>;
55
+ function App() @{
56
+ function getBuilder() {
57
+ return {
58
+ build<T>(): T {
59
+ return 'test' as unknown as T;
60
+ },
61
+ };
62
+ }
63
+ const f = getBuilder().build<string>();
64
+ <div class="still-works">
65
+ <span>{'Test'}</span>
66
+ </div>
74
67
  }
75
68
 
76
69
  render(App);
77
70
  });
78
71
 
79
72
  it('tests simple generic arrow function with return type', () => {
80
- function App() {
81
- return <>
82
- function getBuilder() {
83
- return <T,>() => ({
84
- build<T>(): T {
85
- return 'test' as unknown as T;
86
- },
87
- });
88
- }
89
- type ResultType = string;
90
- const f = getBuilder()<ResultType>().build<string>();
91
- </>;
73
+ function App() @{
74
+ function getBuilder() {
75
+ return <T,>() => ({
76
+ build<T>(): T {
77
+ return 'test' as unknown as T;
78
+ },
79
+ });
80
+ }
81
+ type ResultType = string;
82
+ const f = getBuilder()<ResultType>().build<string>();
83
+ <></>
92
84
  }
93
85
 
94
86
  render(App);
95
87
  });
96
88
 
97
89
  it('tests simple generic arrow function with explicit return type', () => {
98
- function App() {
99
- return <>
100
- function getBuilder() {
101
- return <T,>() => ({
102
- build<U>(): U {
103
- return 'test' as U;
104
- },
105
- });
106
- }
90
+ function App() @{
91
+ function getBuilder() {
92
+ return <T,>() => ({
93
+ build<U>(): U {
94
+ return 'test' as U;
95
+ },
96
+ });
97
+ }
98
+ type ResultType = string;
99
+ const f = getBuilder()<ResultType>().build<string>();
100
+ <>
107
101
  <div class="still-works">
108
102
  <span>{'Test'}</span>
109
103
  </div>
110
- type ResultType = string;
111
- const f = getBuilder()<ResultType>().build<string>();
112
104
  <div>{f}</div>
113
- </>;
105
+ </>
114
106
  }
115
107
 
116
108
  render(App);
117
109
  });
118
110
 
119
111
  it('tests complex generic arrow function with return type', () => {
120
- function App() {
121
- return <>
122
- function getBuilder() {
123
- return <T,>() => ({
124
- build<V, T, U>(): { build: () => V; data: T; key: U } {
125
- return {
126
- build(): V {
127
- return 'test' as V;
128
- },
129
- data: undefined as T,
130
- key: undefined as U,
131
- };
132
- },
133
- });
134
- }
112
+ function App() @{
113
+ function getBuilder() {
114
+ return <T,>() => ({
115
+ build<V, T, U>(): { build: () => V; data: T; key: U } {
116
+ return {
117
+ build(): V {
118
+ return 'test' as V;
119
+ },
120
+ data: undefined as T,
121
+ key: undefined as U,
122
+ };
123
+ },
124
+ });
125
+ }
126
+ type ResultType = string;
127
+ const f = getBuilder()<ResultType>().build<string, object, string>();
128
+ <>
135
129
  <div class="still-works">
136
130
  <span>{'Test'}</span>
137
131
  </div>
138
- type ResultType = string;
139
- const f = getBuilder()<ResultType>().build<string, object, string>();
140
132
  <div>{f}</div>
141
- </>;
133
+ </>
142
134
  }
143
135
 
144
136
  render(App);
145
137
  });
146
138
 
147
139
  it('tests more complex generic arrow function with return type', () => {
148
- function App() {
149
- return <>
150
- function getBuilder() {
151
- return <T,>() => ({
152
- build<V, T, U>(): { build: () => V; data: T; key: U } {
153
- return {
154
- build(): V {
155
- return 'test' as V;
156
- },
157
- data: undefined as T,
158
- key: undefined as U,
159
- };
160
- },
161
- });
162
- }
140
+ function App() @{
141
+ function getBuilder() {
142
+ return <T,>() => ({
143
+ build<V, T, U>(): { build: () => V; data: T; key: U } {
144
+ return {
145
+ build(): V {
146
+ return 'test' as V;
147
+ },
148
+ data: undefined as T,
149
+ key: undefined as U,
150
+ };
151
+ },
152
+ });
153
+ }
154
+ type ResultType = string;
155
+ const f = getBuilder()<ResultType>().build<string, object, string>();
156
+ <>
163
157
  <div class="still-works">
164
158
  <span>{'Test'}</span>
165
159
  </div>
166
- type ResultType = string;
167
- const f = getBuilder()<ResultType>().build<string, object, string>();
168
160
  <div>{f}</div>
169
- </>;
161
+ </>
170
162
  }
171
163
 
172
164
  render(App);
173
165
  });
174
166
 
175
167
  it('tests most complex generic arrow function with return type', () => {
176
- function App() {
177
- return <>
178
- function getBuilder() {
179
- return <T,>() => ({
180
- build<V, T, U>(): { build: () => V; data: T; key: U } {
181
- return {
182
- build(): V {
183
- return 42 as V;
184
- },
185
- data: undefined as T,
186
- key: undefined as U,
187
- };
188
- },
189
- });
190
- }
168
+ function App() @{
169
+ function getBuilder() {
170
+ return <T,>() => ({
171
+ build<V, T, U>(): { build: () => V; data: T; key: U } {
172
+ return {
173
+ build(): V {
174
+ return 42 as V;
175
+ },
176
+ data: undefined as T,
177
+ key: undefined as U,
178
+ };
179
+ },
180
+ });
181
+ }
182
+ type ResultType = string;
183
+ const f = getBuilder()<ResultType>().build<number, object, string>();
184
+ <>
191
185
  <div class="still-works">
192
186
  <span>{'Test'}</span>
193
187
  </div>
194
- type ResultType = string;
195
- const f = getBuilder()<ResultType>().build<number, object, string>();
196
188
  <div>{f}</div>
197
- </>;
189
+ </>
198
190
  }
199
191
 
200
192
  render(App);
@@ -2,16 +2,16 @@ import { RippleURL, flushSync, track } from 'ripple';
2
2
 
3
3
  describe('RippleURL > derived', () => {
4
4
  it('handles reactive computed properties based on URL', () => {
5
- function URLTest() {
6
- return <>
7
- const url = RippleURL('https://example.com/users/123?tab=profile');
8
- let &[userId] = track(() => url.pathname.split('/').pop());
9
- let &[activeTab] = track(() => url.searchParams.get('tab'));
5
+ function URLTest() @{
6
+ const url = RippleURL('https://example.com/users/123?tab=profile');
7
+ let &[userId] = track(() => url.pathname.split('/').pop());
8
+ let &[activeTab] = track(() => url.searchParams.get('tab'));
9
+ <>
10
10
  <button onClick={() => (url.pathname = '/users/456')}>{'Change User'}</button>
11
11
  <button onClick={() => url.searchParams.set('tab', 'settings')}>{'Change Tab'}</button>
12
12
  <pre>{`User ID: ${userId}`}</pre>
13
13
  <pre>{`Active Tab: ${activeTab}`}</pre>
14
- </>;
14
+ </>
15
15
  }
16
16
 
17
17
  render(URLTest);
@@ -39,33 +39,29 @@ describe('RippleURL > derived', () => {
39
39
  });
40
40
 
41
41
  it('maintains reactivity across multiple components', () => {
42
- function ParentTest() {
43
- return <>
44
- const url = RippleURL('https://example.com/path?count=0');
42
+ function ParentTest() @{
43
+ const url = RippleURL('https://example.com/path?count=0');
44
+ <>
45
45
  <ChildA {url} />
46
46
  <ChildB {url} />
47
- </>;
47
+ </>
48
48
  }
49
49
 
50
- function ChildA({ url }: { url: RippleURL }) {
51
- return <>
52
- <button
53
- onClick={() => {
54
- const current = parseInt(url.searchParams.get('count') || '0', 10);
55
- url.searchParams.set('count', String(current + 1));
56
- }}
57
- >
58
- {'Increment Count'}
59
- </button>
60
- </>;
50
+ function ChildA({ url }: { url: RippleURL }) @{
51
+ <button
52
+ onClick={() => {
53
+ const current = parseInt(url.searchParams.get('count') || '0', 10);
54
+ url.searchParams.set('count', String(current + 1));
55
+ }}
56
+ >{'Increment Count'}</button>
61
57
  }
62
58
 
63
- function ChildB({ url }: { url: RippleURL }) {
64
- return <>
65
- let &[count] = track(() => url.searchParams.get('count'));
59
+ function ChildB({ url }: { url: RippleURL }) @{
60
+ let &[count] = track(() => url.searchParams.get('count'));
61
+ <>
66
62
  <pre>{url.href}</pre>
67
63
  <pre>{count}</pre>
68
- </>;
64
+ </>
69
65
  }
70
66
 
71
67
  render(ParentTest);
@@ -2,9 +2,9 @@ import { RippleURL, flushSync } from 'ripple';
2
2
 
3
3
  describe('RippleURL > parsing', () => {
4
4
  it('creates URL from string with reactivity', () => {
5
- function URLTest() {
6
- return <>
7
- const url = RippleURL('https://example.com:8080/path?foo=bar#section');
5
+ function URLTest() @{
6
+ const url = RippleURL('https://example.com:8080/path?foo=bar#section');
7
+ <>
8
8
  <pre>{url.href}</pre>
9
9
  <pre>{url.protocol}</pre>
10
10
  <pre>{url.hostname}</pre>
@@ -12,7 +12,7 @@ describe('RippleURL > parsing', () => {
12
12
  <pre>{url.pathname}</pre>
13
13
  <pre>{url.search}</pre>
14
14
  <pre>{url.hash}</pre>
15
- </>;
15
+ </>
16
16
  }
17
17
 
18
18
  render(URLTest);
@@ -29,12 +29,12 @@ describe('RippleURL > parsing', () => {
29
29
  });
30
30
 
31
31
  it('creates URL from string with base URL', () => {
32
- function URLTest() {
33
- return <>
34
- const url = RippleURL('/path?query=value', 'https://example.com');
32
+ function URLTest() @{
33
+ const url = RippleURL('/path?query=value', 'https://example.com');
34
+ <>
35
35
  <pre>{url.href}</pre>
36
36
  <pre>{url.origin}</pre>
37
- </>;
37
+ </>
38
38
  }
39
39
 
40
40
  render(URLTest);
@@ -46,13 +46,13 @@ describe('RippleURL > parsing', () => {
46
46
  });
47
47
 
48
48
  it('handles URL encoding correctly', () => {
49
- function URLTest() {
50
- return <>
51
- const url = RippleURL('https://example.com/path with spaces?key=value with spaces');
49
+ function URLTest() @{
50
+ const url = RippleURL('https://example.com/path with spaces?key=value with spaces');
51
+ <>
52
52
  <pre>{url.pathname}</pre>
53
53
  <pre>{url.search}</pre>
54
54
  <pre>{url.href}</pre>
55
- </>;
55
+ </>
56
56
  }
57
57
 
58
58
  render(URLTest);
@@ -65,13 +65,13 @@ describe('RippleURL > parsing', () => {
65
65
  });
66
66
 
67
67
  it('handles URL with file protocol', () => {
68
- function URLTest() {
69
- return <>
70
- const url = RippleURL('file:///Users/username/documents/file.txt');
68
+ function URLTest() @{
69
+ const url = RippleURL('file:///Users/username/documents/file.txt');
70
+ <>
71
71
  <pre>{url.protocol}</pre>
72
72
  <pre>{url.pathname}</pre>
73
73
  <pre>{url.href}</pre>
74
- </>;
74
+ </>
75
75
  }
76
76
 
77
77
  render(URLTest);
@@ -86,13 +86,13 @@ describe('RippleURL > parsing', () => {
86
86
  });
87
87
 
88
88
  it('handles URL with IPv4 address', () => {
89
- function URLTest() {
90
- return <>
91
- const url = RippleURL('https://192.168.1.1:8080/path');
89
+ function URLTest() @{
90
+ const url = RippleURL('https://192.168.1.1:8080/path');
91
+ <>
92
92
  <button onClick={() => (url.hostname = '10.0.0.1')}>{'Change IP'}</button>
93
93
  <pre>{url.href}</pre>
94
94
  <pre>{url.hostname}</pre>
95
- </>;
95
+ </>
96
96
  }
97
97
 
98
98
  render(URLTest);
@@ -112,14 +112,14 @@ describe('RippleURL > parsing', () => {
112
112
  });
113
113
 
114
114
  it('handles URL with localhost', () => {
115
- function URLTest() {
116
- return <>
117
- const url = RippleURL('http://localhost:3000/api/data');
115
+ function URLTest() @{
116
+ const url = RippleURL('http://localhost:3000/api/data');
117
+ <>
118
118
  <button onClick={() => (url.port = '8080')}>{'Change Port'}</button>
119
119
  <pre>{url.href}</pre>
120
120
  <pre>{url.hostname}</pre>
121
121
  <pre>{url.port}</pre>
122
- </>;
122
+ </>
123
123
  }
124
124
 
125
125
  render(URLTest);
@@ -141,15 +141,15 @@ describe('RippleURL > parsing', () => {
141
141
  });
142
142
 
143
143
  it('handles URL with multiple path segments', () => {
144
- function URLTest() {
145
- return <>
146
- const url = RippleURL('https://example.com/api/v1/users/123/profile');
147
- <button onClick={() => (url.pathname = '/api/v2/users/456/settings')}>
148
- {'Change Path'}
149
- </button>
144
+ function URLTest() @{
145
+ const url = RippleURL('https://example.com/api/v1/users/123/profile');
146
+ <>
147
+ <button
148
+ onClick={() => (url.pathname = '/api/v2/users/456/settings')}
149
+ >{'Change Path'}</button>
150
150
  <pre>{url.pathname}</pre>
151
151
  <pre>{url.href}</pre>
152
- </>;
152
+ </>
153
153
  }
154
154
 
155
155
  render(URLTest);
@@ -173,12 +173,12 @@ describe('RippleURL > parsing', () => {
173
173
  });
174
174
 
175
175
  it('handles relative URL paths correctly', () => {
176
- function URLTest() {
177
- return <>
178
- const url = RippleURL('../sibling/path', 'https://example.com/parent/current');
176
+ function URLTest() @{
177
+ const url = RippleURL('../sibling/path', 'https://example.com/parent/current');
178
+ <>
179
179
  <pre>{url.href}</pre>
180
180
  <pre>{url.pathname}</pre>
181
- </>;
181
+ </>
182
182
  }
183
183
 
184
184
  render(URLTest);