ripple 0.2.152 → 0.2.154

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 (67) hide show
  1. package/README.md +3 -3
  2. package/package.json +5 -5
  3. package/src/compiler/phases/1-parse/index.js +1 -1
  4. package/src/compiler/phases/3-transform/client/index.js +37 -16
  5. package/src/compiler/phases/3-transform/server/index.js +43 -25
  6. package/src/runtime/internal/client/events.js +5 -1
  7. package/src/runtime/internal/client/index.js +2 -1
  8. package/src/runtime/internal/client/render.js +18 -15
  9. package/src/runtime/internal/client/runtime.js +75 -10
  10. package/src/runtime/internal/server/index.js +51 -11
  11. package/src/server/index.js +1 -1
  12. package/tests/client/array/array.derived.test.ripple +61 -33
  13. package/tests/client/array/array.iteration.test.ripple +3 -1
  14. package/tests/client/array/array.mutations.test.ripple +19 -15
  15. package/tests/client/array/array.static.test.ripple +115 -104
  16. package/tests/client/array/array.to-methods.test.ripple +3 -3
  17. package/tests/client/basic/basic.attributes.test.ripple +110 -57
  18. package/tests/client/basic/basic.collections.test.ripple +41 -22
  19. package/tests/client/basic/basic.errors.test.ripple +12 -6
  20. package/tests/client/basic/basic.events.test.ripple +51 -33
  21. package/tests/client/basic/basic.reactivity.test.ripple +120 -56
  22. package/tests/client/basic/basic.rendering.test.ripple +49 -19
  23. package/tests/client/basic/basic.styling.test.ripple +2 -2
  24. package/tests/client/basic/basic.utilities.test.ripple +1 -1
  25. package/tests/client/boundaries.test.ripple +70 -58
  26. package/tests/client/compiler/compiler.assignments.test.ripple +32 -4
  27. package/tests/client/compiler/compiler.attributes.test.ripple +46 -46
  28. package/tests/client/compiler/compiler.basic.test.ripple +18 -15
  29. package/tests/client/compiler/compiler.tracked-access.test.ripple +53 -42
  30. package/tests/client/compiler/compiler.typescript.test.ripple +1 -2
  31. package/tests/client/composite/composite.dynamic-components.test.ripple +6 -6
  32. package/tests/client/composite/composite.generics.test.ripple +39 -36
  33. package/tests/client/composite/composite.props.test.ripple +4 -3
  34. package/tests/client/composite/composite.reactivity.test.ripple +112 -27
  35. package/tests/client/composite/composite.render.test.ripple +9 -8
  36. package/tests/client/computed-properties.test.ripple +24 -24
  37. package/tests/client/context.test.ripple +11 -9
  38. package/tests/client/date.test.ripple +3 -1
  39. package/tests/client/dynamic-elements.test.ripple +103 -78
  40. package/tests/client/for.test.ripple +27 -17
  41. package/tests/client/head.test.ripple +42 -6
  42. package/tests/client/html.test.ripple +42 -32
  43. package/tests/client/input-value.test.ripple +4 -4
  44. package/tests/client/map.test.ripple +140 -141
  45. package/tests/client/media-query.test.ripple +31 -31
  46. package/tests/client/object.test.ripple +148 -112
  47. package/tests/client/portal.test.ripple +29 -15
  48. package/tests/client/ref.test.ripple +9 -3
  49. package/tests/client/set.test.ripple +111 -111
  50. package/tests/client/tracked-expression.test.ripple +16 -17
  51. package/tests/client/url/url.derived.test.ripple +19 -9
  52. package/tests/client/url/url.parsing.test.ripple +24 -8
  53. package/tests/client/url/url.partial-removal.test.ripple +12 -4
  54. package/tests/client/url/url.reactivity.test.ripple +63 -25
  55. package/tests/client/url/url.serialization.test.ripple +18 -6
  56. package/tests/client/url-search-params/url-search-params.derived.test.ripple +10 -6
  57. package/tests/client/url-search-params/url-search-params.iteration.test.ripple +3 -1
  58. package/tests/client/url-search-params/url-search-params.mutation.test.ripple +26 -14
  59. package/tests/client/url-search-params/url-search-params.tracked-url.test.ripple +3 -1
  60. package/tests/server/await.test.ripple +23 -22
  61. package/tests/server/basic.test.ripple +1 -1
  62. package/tests/server/compiler.test.ripple +3 -7
  63. package/tests/server/composite.test.ripple +38 -36
  64. package/tests/server/for.test.ripple +9 -5
  65. package/tests/server/if.test.ripple +1 -1
  66. package/tests/server/streaming-ssr.test.ripple +67 -0
  67. package/types/server.d.ts +5 -4
@@ -1,161 +1,161 @@
1
1
  import { flushSync, TrackedSet, track } from 'ripple';
2
2
 
3
3
  describe('TrackedSet', () => {
4
- it('handles add and delete operations', () => {
5
- component SetTest() {
6
- let items = new TrackedSet([1, 2, 3]);
4
+ it('handles add and delete operations', () => {
5
+ component SetTest() {
6
+ let items = new TrackedSet([1, 2, 3]);
7
7
 
8
- <button onClick={() => items.add(4)}>{'add'}</button>
9
- <button onClick={() => items.delete(2)}>{'delete'}</button>
10
- <Child items={items} />
11
- }
8
+ <button onClick={() => items.add(4)}>{'add'}</button>
9
+ <button onClick={() => items.delete(2)}>{'delete'}</button>
10
+ <Child {items} />
11
+ }
12
12
 
13
- component Child({ items }: { items: TrackedSet<number> }) {
14
- <pre>{JSON.stringify(items)}</pre>
15
- <pre>{items.size}</pre>
16
- }
13
+ component Child({ items }: { items: TrackedSet<number> }) {
14
+ <pre>{JSON.stringify(items)}</pre>
15
+ <pre>{items.size}</pre>
16
+ }
17
17
 
18
- render(SetTest);
18
+ render(SetTest);
19
19
 
20
- const addButton = container.querySelectorAll('button')[0];
21
- const deleteButton = container.querySelectorAll('button')[1];
20
+ const addButton = container.querySelectorAll('button')[0];
21
+ const deleteButton = container.querySelectorAll('button')[1];
22
22
 
23
- addButton.click();
24
- flushSync();
23
+ addButton.click();
24
+ flushSync();
25
25
 
26
- expect(container.querySelectorAll('pre')[0].textContent).toBe('[1,2,3,4]');
27
- expect(container.querySelectorAll('pre')[1].textContent).toBe('4');
26
+ expect(container.querySelectorAll('pre')[0].textContent).toBe('[1,2,3,4]');
27
+ expect(container.querySelectorAll('pre')[1].textContent).toBe('4');
28
28
 
29
- deleteButton.click();
30
- flushSync();
29
+ deleteButton.click();
30
+ flushSync();
31
31
 
32
- expect(container.querySelectorAll('pre')[0].textContent).toBe('[1,3,4]');
33
- expect(container.querySelectorAll('pre')[1].textContent).toBe('3');
34
- });
32
+ expect(container.querySelectorAll('pre')[0].textContent).toBe('[1,3,4]');
33
+ expect(container.querySelectorAll('pre')[1].textContent).toBe('3');
34
+ });
35
35
 
36
- it('handles clear operation', () => {
37
- component SetTest() {
38
- let items = new TrackedSet([1, 2, 3]);
36
+ it('handles clear operation', () => {
37
+ component SetTest() {
38
+ let items = new TrackedSet([1, 2, 3]);
39
39
 
40
- <button onClick={() => items.clear()}>{'clear'}</button>
41
- <Child items={items} />
42
- }
40
+ <button onClick={() => items.clear()}>{'clear'}</button>
41
+ <Child {items} />
42
+ }
43
43
 
44
- component Child({ items }: { items: TrackedSet<number> }) {
45
- <pre>{JSON.stringify(items)}</pre>
46
- <pre>{items.size}</pre>
47
- }
44
+ component Child({ items }: { items: TrackedSet<number> }) {
45
+ <pre>{JSON.stringify(items)}</pre>
46
+ <pre>{items.size}</pre>
47
+ }
48
48
 
49
- render(SetTest);
49
+ render(SetTest);
50
50
 
51
- const clearButton = container.querySelector('button');
51
+ const clearButton = container.querySelector('button');
52
52
 
53
- clearButton.click();
54
- flushSync();
53
+ clearButton.click();
54
+ flushSync();
55
55
 
56
- expect(container.querySelectorAll('pre')[0].textContent).toBe('[]');
57
- expect(container.querySelectorAll('pre')[1].textContent).toBe('0');
58
- });
56
+ expect(container.querySelectorAll('pre')[0].textContent).toBe('[]');
57
+ expect(container.querySelectorAll('pre')[1].textContent).toBe('0');
58
+ });
59
59
 
60
- it('handles has operation', () => {
61
- component SetTest() {
62
- let items = new TrackedSet([1, 2, 3]);
63
- let hasValue = track(() => items.has(2));
60
+ it('handles has operation', () => {
61
+ component SetTest() {
62
+ let items = new TrackedSet([1, 2, 3]);
63
+ let hasValue = track(() => items.has(2));
64
64
 
65
- <button onClick={() => items.delete(2)}>{'delete'}</button>
66
- <pre>{@hasValue}</pre>
67
- }
65
+ <button onClick={() => items.delete(2)}>{'delete'}</button>
66
+ <pre>{@hasValue}</pre>
67
+ }
68
68
 
69
- render(SetTest);
69
+ render(SetTest);
70
70
 
71
- expect(container.querySelectorAll('pre')[0].textContent).toBe('true');
71
+ expect(container.querySelectorAll('pre')[0].textContent).toBe('true');
72
72
 
73
- const deleteButton = container.querySelectorAll('button')[0];
73
+ const deleteButton = container.querySelectorAll('button')[0];
74
74
 
75
- deleteButton.click();
76
- flushSync();
75
+ deleteButton.click();
76
+ flushSync();
77
77
 
78
- expect(container.querySelectorAll('pre')[0].textContent).toBe('false');
79
- });
78
+ expect(container.querySelectorAll('pre')[0].textContent).toBe('false');
79
+ });
80
80
 
81
- it('creates empty TrackedSet using #Set() shorthand syntax', () => {
82
- component SetTest() {
83
- let items = #Set();
81
+ it('creates empty TrackedSet using #Set() shorthand syntax', () => {
82
+ component SetTest() {
83
+ let items = #Set();
84
84
 
85
- <button onClick={() => items.add(1)}>{'add'}</button>
86
- <pre>{items.size}</pre>
87
- }
85
+ <button onClick={() => items.add(1)}>{'add'}</button>
86
+ <pre>{items.size}</pre>
87
+ }
88
88
 
89
- render(SetTest);
89
+ render(SetTest);
90
90
 
91
- expect(container.querySelector('pre').textContent).toBe('0');
91
+ expect(container.querySelector('pre').textContent).toBe('0');
92
92
 
93
- const addButton = container.querySelector('button');
94
- addButton.click();
95
- flushSync();
93
+ const addButton = container.querySelector('button');
94
+ addButton.click();
95
+ flushSync();
96
96
 
97
- expect(container.querySelector('pre').textContent).toBe('1');
98
- });
97
+ expect(container.querySelector('pre').textContent).toBe('1');
98
+ });
99
99
 
100
- it('creates TrackedSet with initial values using #Set() shorthand syntax', () => {
101
- component SetTest() {
102
- let items = #Set([1, 2, 3, 4]);
103
- let hasValue = track(() => items.has(3));
100
+ it('creates TrackedSet with initial values using #Set() shorthand syntax', () => {
101
+ component SetTest() {
102
+ let items = #Set([1, 2, 3, 4]);
103
+ let hasValue = track(() => items.has(3));
104
104
 
105
- <button onClick={() => items.delete(3)}>{'delete'}</button>
106
- <pre>{items.size}</pre>
107
- <pre>{@hasValue}</pre>
108
- }
105
+ <button onClick={() => items.delete(3)}>{'delete'}</button>
106
+ <pre>{items.size}</pre>
107
+ <pre>{@hasValue}</pre>
108
+ }
109
109
 
110
- render(SetTest);
110
+ render(SetTest);
111
111
 
112
- expect(container.querySelectorAll('pre')[0].textContent).toBe('4');
113
- expect(container.querySelectorAll('pre')[1].textContent).toBe('true');
112
+ expect(container.querySelectorAll('pre')[0].textContent).toBe('4');
113
+ expect(container.querySelectorAll('pre')[1].textContent).toBe('true');
114
114
 
115
- const deleteButton = container.querySelector('button');
116
- deleteButton.click();
117
- flushSync();
115
+ const deleteButton = container.querySelector('button');
116
+ deleteButton.click();
117
+ flushSync();
118
118
 
119
- expect(container.querySelectorAll('pre')[0].textContent).toBe('3');
120
- expect(container.querySelectorAll('pre')[1].textContent).toBe('false');
121
- });
119
+ expect(container.querySelectorAll('pre')[0].textContent).toBe('3');
120
+ expect(container.querySelectorAll('pre')[1].textContent).toBe('false');
121
+ });
122
122
 
123
- it('handles all operations with #Set() shorthand syntax', () => {
124
- component SetTest() {
125
- let items = #Set([10, 20, 30]);
126
- let values = track(() => Array.from(items.values()));
123
+ it('handles all operations with #Set() shorthand syntax', () => {
124
+ component SetTest() {
125
+ let items = #Set([10, 20, 30]);
126
+ let values = track(() => Array.from(items.values()));
127
127
 
128
- <button onClick={() => items.add(40)}>{'add'}</button>
129
- <button onClick={() => items.delete(20)}>{'delete'}</button>
130
- <button onClick={() => items.clear()}>{'clear'}</button>
128
+ <button onClick={() => items.add(40)}>{'add'}</button>
129
+ <button onClick={() => items.delete(20)}>{'delete'}</button>
130
+ <button onClick={() => items.clear()}>{'clear'}</button>
131
131
 
132
- <pre>{JSON.stringify(@values)}</pre>
133
- <pre>{items.size}</pre>
134
- }
132
+ <pre>{JSON.stringify(@values)}</pre>
133
+ <pre>{items.size}</pre>
134
+ }
135
135
 
136
- render(SetTest);
136
+ render(SetTest);
137
137
 
138
- const [addButton, deleteButton, clearButton] = container.querySelectorAll('button');
138
+ const [addButton, deleteButton, clearButton] = container.querySelectorAll('button');
139
139
 
140
- expect(container.querySelectorAll('pre')[0].textContent).toBe('[10,20,30]');
141
- expect(container.querySelectorAll('pre')[1].textContent).toBe('3');
140
+ expect(container.querySelectorAll('pre')[0].textContent).toBe('[10,20,30]');
141
+ expect(container.querySelectorAll('pre')[1].textContent).toBe('3');
142
142
 
143
- addButton.click();
144
- flushSync();
143
+ addButton.click();
144
+ flushSync();
145
145
 
146
- expect(container.querySelectorAll('pre')[0].textContent).toBe('[10,20,30,40]');
147
- expect(container.querySelectorAll('pre')[1].textContent).toBe('4');
146
+ expect(container.querySelectorAll('pre')[0].textContent).toBe('[10,20,30,40]');
147
+ expect(container.querySelectorAll('pre')[1].textContent).toBe('4');
148
148
 
149
- deleteButton.click();
150
- flushSync();
149
+ deleteButton.click();
150
+ flushSync();
151
151
 
152
- expect(container.querySelectorAll('pre')[0].textContent).toBe('[10,30,40]');
153
- expect(container.querySelectorAll('pre')[1].textContent).toBe('3');
152
+ expect(container.querySelectorAll('pre')[0].textContent).toBe('[10,30,40]');
153
+ expect(container.querySelectorAll('pre')[1].textContent).toBe('3');
154
154
 
155
- clearButton.click();
156
- flushSync();
155
+ clearButton.click();
156
+ flushSync();
157
157
 
158
- expect(container.querySelectorAll('pre')[0].textContent).toBe('[]');
159
- expect(container.querySelectorAll('pre')[1].textContent).toBe('0');
160
- });
158
+ expect(container.querySelectorAll('pre')[0].textContent).toBe('[]');
159
+ expect(container.querySelectorAll('pre')[1].textContent).toBe('0');
160
+ });
161
161
  });
@@ -3,25 +3,24 @@ import { track } from 'ripple';
3
3
  describe('TrackedExpression tests', () => {
4
4
  it('should handle the syntax correctly', () => {
5
5
  component App() {
6
- let count = track(0);
6
+ let count = track(0);
7
7
 
8
- function get_count() {
9
- return count;
10
- }
8
+ function get_count() {
9
+ return count;
10
+ }
11
11
 
12
+ <div>{@(count)}</div>
13
+ <div>{@(get_count())}</div>
14
+ <div>{++@(count)}</div>
15
+ <div>{++@(get_count())}</div>
16
+ <div>{@(count)++}</div>
17
+ <div>{@(get_count())++}</div>
18
+ <div>{@(count)}</div>
19
+ <div>{!@(count)}</div>
20
+ <div>{!!@(count)}</div>
21
+ }
12
22
 
13
- <div>{@(count)}</div>
14
- <div>{@(get_count())}</div>
15
- <div>{++@(count)}</div>
16
- <div>{++@(get_count())}</div>
17
- <div>{@(count)++}</div>
18
- <div>{@(get_count())++}</div>
19
- <div>{@(count)}</div>
20
- <div>{!@(count)}</div>
21
- <div>{!!@(count)}</div>
22
- }
23
-
24
- render(App);
25
- expect(container).toMatchSnapshot();
23
+ render(App);
24
+ expect(container).toMatchSnapshot();
26
25
  });
27
26
  });
@@ -41,15 +41,19 @@ describe('TrackedURL > derived', () => {
41
41
  component ParentTest() {
42
42
  const url = new TrackedURL('https://example.com/path?count=0');
43
43
 
44
- <ChildA url={url} />
45
- <ChildB url={url} />
44
+ <ChildA {url} />
45
+ <ChildB {url} />
46
46
  }
47
47
 
48
48
  component ChildA({ url }: { url: TrackedURL }) {
49
- <button onClick={() => {
50
- const current = parseInt(url.searchParams.get('count') || '0', 10);
51
- url.searchParams.set('count', String(current + 1));
52
- }}>{'Increment Count'}</button>
49
+ <button
50
+ onClick={() => {
51
+ const current = parseInt(url.searchParams.get('count') || '0', 10);
52
+ url.searchParams.set('count', String(current + 1));
53
+ }}
54
+ >
55
+ {'Increment Count'}
56
+ </button>
53
57
  }
54
58
 
55
59
  component ChildB({ url }: { url: TrackedURL }) {
@@ -64,20 +68,26 @@ describe('TrackedURL > derived', () => {
64
68
  const button = container.querySelector('button');
65
69
 
66
70
  // Initial state
67
- expect(container.querySelectorAll('pre')[0].textContent).toBe('https://example.com/path?count=0');
71
+ expect(container.querySelectorAll('pre')[0].textContent).toBe(
72
+ 'https://example.com/path?count=0',
73
+ );
68
74
  expect(container.querySelectorAll('pre')[1].textContent).toBe('0');
69
75
 
70
76
  // Increment from child
71
77
  button.click();
72
78
  flushSync();
73
79
 
74
- expect(container.querySelectorAll('pre')[0].textContent).toBe('https://example.com/path?count=1');
80
+ expect(container.querySelectorAll('pre')[0].textContent).toBe(
81
+ 'https://example.com/path?count=1',
82
+ );
75
83
  expect(container.querySelectorAll('pre')[1].textContent).toBe('1');
76
84
 
77
85
  button.click();
78
86
  flushSync();
79
87
 
80
- expect(container.querySelectorAll('pre')[0].textContent).toBe('https://example.com/path?count=2');
88
+ expect(container.querySelectorAll('pre')[0].textContent).toBe(
89
+ 'https://example.com/path?count=2',
90
+ );
81
91
  expect(container.querySelectorAll('pre')[1].textContent).toBe('2');
82
92
  });
83
93
  });
@@ -16,7 +16,9 @@ describe('TrackedURL > parsing', () => {
16
16
 
17
17
  render(URLTest);
18
18
 
19
- expect(container.querySelectorAll('pre')[0].textContent).toBe('https://example.com:8080/path?foo=bar#section');
19
+ expect(container.querySelectorAll('pre')[0].textContent).toBe(
20
+ 'https://example.com:8080/path?foo=bar#section',
21
+ );
20
22
  expect(container.querySelectorAll('pre')[1].textContent).toBe('https:');
21
23
  expect(container.querySelectorAll('pre')[2].textContent).toBe('example.com');
22
24
  expect(container.querySelectorAll('pre')[3].textContent).toBe('8080');
@@ -35,7 +37,9 @@ describe('TrackedURL > parsing', () => {
35
37
 
36
38
  render(URLTest);
37
39
 
38
- expect(container.querySelectorAll('pre')[0].textContent).toBe('https://example.com/path?query=value');
40
+ expect(container.querySelectorAll('pre')[0].textContent).toBe(
41
+ 'https://example.com/path?query=value',
42
+ );
39
43
  expect(container.querySelectorAll('pre')[1].textContent).toBe('https://example.com');
40
44
  });
41
45
 
@@ -52,7 +56,9 @@ describe('TrackedURL > parsing', () => {
52
56
 
53
57
  expect(container.querySelectorAll('pre')[0].textContent).toBe('/path%20with%20spaces');
54
58
  expect(container.querySelectorAll('pre')[1].textContent).toBe('?key=value%20with%20spaces');
55
- expect(container.querySelectorAll('pre')[2].textContent).toBe('https://example.com/path%20with%20spaces?key=value%20with%20spaces');
59
+ expect(container.querySelectorAll('pre')[2].textContent).toBe(
60
+ 'https://example.com/path%20with%20spaces?key=value%20with%20spaces',
61
+ );
56
62
  });
57
63
 
58
64
  it('handles URL with file protocol', () => {
@@ -67,8 +73,12 @@ describe('TrackedURL > parsing', () => {
67
73
  render(URLTest);
68
74
 
69
75
  expect(container.querySelectorAll('pre')[0].textContent).toBe('file:');
70
- expect(container.querySelectorAll('pre')[1].textContent).toBe('/Users/username/documents/file.txt');
71
- expect(container.querySelectorAll('pre')[2].textContent).toBe('file:///Users/username/documents/file.txt');
76
+ expect(container.querySelectorAll('pre')[1].textContent).toBe(
77
+ '/Users/username/documents/file.txt',
78
+ );
79
+ expect(container.querySelectorAll('pre')[2].textContent).toBe(
80
+ 'file:///Users/username/documents/file.txt',
81
+ );
72
82
  });
73
83
 
74
84
  it('handles URL with IPv4 address', () => {
@@ -139,14 +149,18 @@ describe('TrackedURL > parsing', () => {
139
149
 
140
150
  // Initial state
141
151
  expect(container.querySelectorAll('pre')[0].textContent).toBe('/api/v1/users/123/profile');
142
- expect(container.querySelectorAll('pre')[1].textContent).toBe('https://example.com/api/v1/users/123/profile');
152
+ expect(container.querySelectorAll('pre')[1].textContent).toBe(
153
+ 'https://example.com/api/v1/users/123/profile',
154
+ );
143
155
 
144
156
  // Change path
145
157
  button.click();
146
158
  flushSync();
147
159
 
148
160
  expect(container.querySelectorAll('pre')[0].textContent).toBe('/api/v2/users/456/settings');
149
- expect(container.querySelectorAll('pre')[1].textContent).toBe('https://example.com/api/v2/users/456/settings');
161
+ expect(container.querySelectorAll('pre')[1].textContent).toBe(
162
+ 'https://example.com/api/v2/users/456/settings',
163
+ );
150
164
  });
151
165
 
152
166
  it('handles relative URL paths correctly', () => {
@@ -159,7 +173,9 @@ describe('TrackedURL > parsing', () => {
159
173
 
160
174
  render(URLTest);
161
175
 
162
- expect(container.querySelectorAll('pre')[0].textContent).toBe('https://example.com/sibling/path');
176
+ expect(container.querySelectorAll('pre')[0].textContent).toBe(
177
+ 'https://example.com/sibling/path',
178
+ );
163
179
  expect(container.querySelectorAll('pre')[1].textContent).toBe('/sibling/path');
164
180
  });
165
181
  });
@@ -112,7 +112,9 @@ describe('TrackedURL > partials/removal', () => {
112
112
  const button = container.querySelector('button');
113
113
 
114
114
  // Initial state
115
- expect(container.querySelectorAll('pre')[0].textContent).toBe('https://example.com/path#section');
115
+ expect(container.querySelectorAll('pre')[0].textContent).toBe(
116
+ 'https://example.com/path#section',
117
+ );
116
118
  expect(container.querySelectorAll('pre')[1].textContent).toBe('#section');
117
119
 
118
120
  // Remove hash
@@ -138,7 +140,9 @@ describe('TrackedURL > partials/removal', () => {
138
140
  const button = container.querySelector('button');
139
141
 
140
142
  // Initial state
141
- expect(container.querySelectorAll('pre')[0].textContent).toBe('https://example.com/path?foo=bar');
143
+ expect(container.querySelectorAll('pre')[0].textContent).toBe(
144
+ 'https://example.com/path?foo=bar',
145
+ );
142
146
  expect(container.querySelectorAll('pre')[1].textContent).toBe('?foo=bar');
143
147
  expect(container.querySelectorAll('pre')[2].textContent).toBe('1');
144
148
 
@@ -172,7 +176,9 @@ describe('TrackedURL > partials/removal', () => {
172
176
  flushSync();
173
177
 
174
178
  expect(container.querySelectorAll('pre')[0].textContent).toBe('#section');
175
- expect(container.querySelectorAll('pre')[1].textContent).toBe('https://example.com/path#section');
179
+ expect(container.querySelectorAll('pre')[1].textContent).toBe(
180
+ 'https://example.com/path#section',
181
+ );
176
182
  });
177
183
 
178
184
  it('handles search without leading ? character', () => {
@@ -193,6 +199,8 @@ describe('TrackedURL > partials/removal', () => {
193
199
  flushSync();
194
200
 
195
201
  expect(container.querySelectorAll('pre')[0].textContent).toBe('foo=bar');
196
- expect(container.querySelectorAll('pre')[1].textContent).toBe('https://example.com/path?foo=bar');
202
+ expect(container.querySelectorAll('pre')[1].textContent).toBe(
203
+ 'https://example.com/path?foo=bar',
204
+ );
197
205
  });
198
206
  });