ripple 0.2.116 → 0.2.119
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.
- package/package.json +16 -16
- package/src/compiler/index.js +20 -1
- package/src/compiler/phases/3-transform/segments.js +99 -57
- package/src/compiler/phases/3-transform/server/index.js +21 -11
- package/src/runtime/index-client.js +1 -1
- package/src/runtime/index-server.js +24 -0
- package/src/runtime/internal/client/runtime.js +10 -0
- package/src/runtime/internal/client/utils.js +0 -8
- package/tests/client/__snapshots__/for.test.ripple.snap +80 -0
- package/tests/client/_etc.test.ripple +5 -0
- package/tests/client/array/array.copy-within.test.ripple +120 -0
- package/tests/client/array/array.derived.test.ripple +495 -0
- package/tests/client/array/array.iteration.test.ripple +115 -0
- package/tests/client/array/array.mutations.test.ripple +385 -0
- package/tests/client/array/array.static.test.ripple +237 -0
- package/tests/client/array/array.to-methods.test.ripple +93 -0
- package/tests/client/basic/__snapshots__/basic.attributes.test.ripple.snap +60 -0
- package/tests/client/basic/__snapshots__/basic.rendering.test.ripple.snap +106 -0
- package/tests/client/basic/__snapshots__/basic.text.test.ripple.snap +49 -0
- package/tests/client/basic/basic.attributes.test.ripple +474 -0
- package/tests/client/basic/basic.collections.test.ripple +94 -0
- package/tests/client/basic/basic.components.test.ripple +225 -0
- package/tests/client/basic/basic.errors.test.ripple +126 -0
- package/tests/client/basic/basic.events.test.ripple +222 -0
- package/tests/client/basic/basic.reactivity.test.ripple +476 -0
- package/tests/client/basic/basic.rendering.test.ripple +204 -0
- package/tests/client/basic/basic.styling.test.ripple +63 -0
- package/tests/client/basic/basic.utilities.test.ripple +25 -0
- package/tests/client/boundaries.test.ripple +2 -21
- package/tests/client/compiler/__snapshots__/compiler.assignments.test.ripple.snap +12 -0
- package/tests/client/compiler/__snapshots__/compiler.typescript.test.ripple.snap +22 -0
- package/tests/client/compiler/compiler.assignments.test.ripple +112 -0
- package/tests/client/compiler/compiler.attributes.test.ripple +95 -0
- package/tests/client/compiler/compiler.basic.test.ripple +203 -0
- package/tests/client/compiler/compiler.regex.test.ripple +87 -0
- package/tests/client/compiler/compiler.typescript.test.ripple +29 -0
- package/tests/client/{__snapshots__/composite.test.ripple.snap → composite/__snapshots__/composite.render.test.ripple.snap} +2 -2
- package/tests/client/composite/composite.dynamic-components.test.ripple +100 -0
- package/tests/client/composite/composite.generics.test.ripple +211 -0
- package/tests/client/composite/composite.props.test.ripple +106 -0
- package/tests/client/composite/composite.reactivity.test.ripple +184 -0
- package/tests/client/composite/composite.render.test.ripple +84 -0
- package/tests/client/computed-properties.test.ripple +2 -21
- package/tests/client/context.test.ripple +5 -22
- package/tests/client/date.test.ripple +1 -20
- package/tests/client/dynamic-elements.test.ripple +16 -24
- package/tests/client/for.test.ripple +4 -23
- package/tests/client/head.test.ripple +11 -23
- package/tests/client/html.test.ripple +1 -20
- package/tests/client/input-value.test.ripple +11 -31
- package/tests/client/map.test.ripple +3 -22
- package/tests/client/media-query.test.ripple +10 -23
- package/tests/client/object.test.ripple +5 -24
- package/tests/client/portal.test.ripple +2 -19
- package/tests/client/ref.test.ripple +8 -26
- package/tests/client/set.test.ripple +3 -22
- package/tests/client/svg.test.ripple +1 -22
- package/tests/client/switch.test.ripple +6 -25
- package/tests/client/tracked-expression.test.ripple +2 -21
- package/tests/client/typescript-generics.test.ripple +0 -21
- package/tests/client/url/url.derived.test.ripple +83 -0
- package/tests/client/url/url.parsing.test.ripple +165 -0
- package/tests/client/url/url.partial-removal.test.ripple +198 -0
- package/tests/client/url/url.reactivity.test.ripple +449 -0
- package/tests/client/url/url.serialization.test.ripple +50 -0
- package/tests/client/url-search-params/url-search-params.derived.test.ripple +84 -0
- package/tests/client/url-search-params/url-search-params.initialization.test.ripple +61 -0
- package/tests/client/url-search-params/url-search-params.iteration.test.ripple +153 -0
- package/tests/client/url-search-params/url-search-params.mutation.test.ripple +343 -0
- package/tests/client/url-search-params/url-search-params.retrieval.test.ripple +160 -0
- package/tests/client/url-search-params/url-search-params.serialization.test.ripple +53 -0
- package/tests/client/url-search-params/url-search-params.tracked-url.test.ripple +55 -0
- package/tests/client.d.ts +12 -0
- package/tests/server/if.test.ripple +66 -0
- package/tests/setup-client.js +28 -0
- package/tsconfig.json +4 -2
- package/types/index.d.ts +5 -1
- package/LICENSE +0 -21
- package/tests/client/__snapshots__/basic.test.ripple.snap +0 -117
- package/tests/client/__snapshots__/compiler.test.ripple.snap +0 -33
- package/tests/client/array.test.ripple +0 -1455
- package/tests/client/basic.test.ripple +0 -1892
- package/tests/client/compiler.test.ripple +0 -541
- package/tests/client/composite.test.ripple +0 -692
- package/tests/client/url-search-params.test.ripple +0 -912
- package/tests/client/url.test.ripple +0 -954
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
import { flushSync, TrackedArray } from 'ripple';
|
|
2
|
+
import { MAX_ARRAY_LENGTH } from '../../../src/runtime/internal/client/constants.js';
|
|
3
|
+
|
|
4
|
+
describe('TrackedArray > static', () => {
|
|
5
|
+
it('handles static methods - from and of', () => {
|
|
6
|
+
component ArrayTest() {
|
|
7
|
+
let itemsFrom = TrackedArray.from([1, 2, 3], (x: number) => x * 2);
|
|
8
|
+
let itemsOf = TrackedArray.of(4, 5, 6);
|
|
9
|
+
|
|
10
|
+
<button onClick={() => itemsFrom.push(8)}>{'add to from'}</button>
|
|
11
|
+
<button onClick={() => itemsOf.push(7)}>{'add to of'}</button>
|
|
12
|
+
<pre>{JSON.stringify(itemsFrom)}</pre>
|
|
13
|
+
<pre>{JSON.stringify(itemsOf)}</pre>
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
render(ArrayTest);
|
|
17
|
+
|
|
18
|
+
const addFromButton = container.querySelectorAll('button')[0];
|
|
19
|
+
const addOfButton = container.querySelectorAll('button')[1];
|
|
20
|
+
|
|
21
|
+
// Initial state
|
|
22
|
+
expect(container.querySelectorAll('pre')[0].textContent).toBe('[2,4,6]');
|
|
23
|
+
expect(container.querySelectorAll('pre')[1].textContent).toBe('[4,5,6]');
|
|
24
|
+
|
|
25
|
+
// Test adding to from-created array
|
|
26
|
+
addFromButton.click();
|
|
27
|
+
flushSync();
|
|
28
|
+
|
|
29
|
+
expect(container.querySelectorAll('pre')[0].textContent).toBe('[2,4,6,8]');
|
|
30
|
+
|
|
31
|
+
// Test adding to of-created array
|
|
32
|
+
addOfButton.click();
|
|
33
|
+
flushSync();
|
|
34
|
+
|
|
35
|
+
expect(container.querySelectorAll('pre')[1].textContent).toBe('[4,5,6,7]');
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
('fromAsync' in Array.prototype ? describe : describe.skip)('TrackedArray fromAsync', async () => {
|
|
39
|
+
it('handles static fromAsync method with reactivity', async () => {
|
|
40
|
+
component Parent() {
|
|
41
|
+
try {
|
|
42
|
+
<ArrayTest />
|
|
43
|
+
} pending {
|
|
44
|
+
<div>{'Loading placeholder...'}</div>
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
component ArrayTest() {
|
|
49
|
+
let items = await TrackedArray.fromAsync([1, 2, 3]);
|
|
50
|
+
|
|
51
|
+
<button onClick={() => {
|
|
52
|
+
if (items) items.push(4);
|
|
53
|
+
}}>{'add item'}</button>
|
|
54
|
+
|
|
55
|
+
<pre>{JSON.stringify(items)}</pre>
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
render(Parent);
|
|
59
|
+
|
|
60
|
+
await new Promise(resolve => setTimeout(resolve, 0));
|
|
61
|
+
flushSync();
|
|
62
|
+
|
|
63
|
+
const addButton = container.querySelector('button');
|
|
64
|
+
|
|
65
|
+
expect(container.querySelectorAll('pre')[0].textContent).toBe('[1,2,3]');
|
|
66
|
+
|
|
67
|
+
// Test adding an item to the async-created array
|
|
68
|
+
addButton.click();
|
|
69
|
+
flushSync();
|
|
70
|
+
|
|
71
|
+
expect(container.querySelectorAll('pre')[1].textContent).toBe('[1,2,3,4]');
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
it('handles static fromAsync method with mapping function', async () => {
|
|
75
|
+
component Parent() {
|
|
76
|
+
try {
|
|
77
|
+
<ArrayTest />
|
|
78
|
+
} pending {
|
|
79
|
+
<div>{'Loading placeholder...'}</div>
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
component ArrayTest() {
|
|
84
|
+
let items = await TrackedArray.fromAsync(
|
|
85
|
+
[1, 2, 3],
|
|
86
|
+
(x: number) => x * 2
|
|
87
|
+
);
|
|
88
|
+
|
|
89
|
+
<button onClick={() => {
|
|
90
|
+
if (items) items.push(8);
|
|
91
|
+
}}>{'add item'}</button>
|
|
92
|
+
<pre>{items ? JSON.stringify(items) : 'Loading...'}</pre>
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
render(Parent);
|
|
96
|
+
|
|
97
|
+
await new Promise(resolve => setTimeout(resolve, 0));
|
|
98
|
+
flushSync();
|
|
99
|
+
|
|
100
|
+
const addButton = container.querySelector('button');
|
|
101
|
+
|
|
102
|
+
expect(container.querySelector('pre').textContent).toBe('[2,4,6]');
|
|
103
|
+
|
|
104
|
+
addButton.click();
|
|
105
|
+
flushSync();
|
|
106
|
+
|
|
107
|
+
expect(container.querySelector('pre').textContent).toBe('[2,4,6,8]');
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
// TODO: Fix this test case, needs some async love around try statements being using in a not template way
|
|
111
|
+
it.skip('handles error in fromAsync method', async () => {
|
|
112
|
+
component Parent() {
|
|
113
|
+
try {
|
|
114
|
+
<ArrayTest />
|
|
115
|
+
} pending {
|
|
116
|
+
<div>{'Loading placeholder...'}</div>
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
component ArrayTest() {
|
|
121
|
+
let items = null;
|
|
122
|
+
let error = null;
|
|
123
|
+
|
|
124
|
+
// try {
|
|
125
|
+
// items = await TrackedArray.fromAsync(Promise.reject(new Error('Async error')));
|
|
126
|
+
// } catch (e) {
|
|
127
|
+
// }
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
component ArrayTest() {
|
|
131
|
+
let items = null;
|
|
132
|
+
let error = null;
|
|
133
|
+
|
|
134
|
+
try {
|
|
135
|
+
// items = await TrackedArray.fromAsync(Promise.reject(new Error('Async error')));
|
|
136
|
+
} catch (e) {
|
|
137
|
+
error = (e as Error).message;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
<pre>{error ? 'Error: ' + error : 'No error'}</pre>
|
|
141
|
+
<pre>{items ? JSON.stringify(items) : 'No items'}</pre>
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
render(Parent);
|
|
145
|
+
|
|
146
|
+
await new Promise(resolve => setTimeout(resolve, 0));
|
|
147
|
+
flushSync();
|
|
148
|
+
|
|
149
|
+
expect(container.querySelectorAll('pre')[0].textContent).toBe('Error: Async error');
|
|
150
|
+
expect(container.querySelectorAll('pre')[1].textContent).toBe('No items');
|
|
151
|
+
});
|
|
152
|
+
});
|
|
153
|
+
|
|
154
|
+
describe('Creates TrackedArray with a single element', () => {
|
|
155
|
+
it('specifies int', () => {
|
|
156
|
+
component ArrayTest() {
|
|
157
|
+
let items = new TrackedArray(3);
|
|
158
|
+
<pre>{JSON.stringify(items)}</pre>
|
|
159
|
+
<pre>{items.length}</pre>
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
render(ArrayTest);
|
|
163
|
+
|
|
164
|
+
expect(container.querySelectorAll('pre')[0].textContent).toBe('[null,null,null]');
|
|
165
|
+
expect(container.querySelectorAll('pre')[1].textContent).toBe('3');
|
|
166
|
+
});
|
|
167
|
+
|
|
168
|
+
it('errors on exceeding max array size', () => {
|
|
169
|
+
component ArrayTest() {
|
|
170
|
+
let error = null;
|
|
171
|
+
|
|
172
|
+
try {
|
|
173
|
+
new TrackedArray(MAX_ARRAY_LENGTH + 1);
|
|
174
|
+
} catch (e) {
|
|
175
|
+
error = (e as Error).message;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
<pre>{error}</pre>
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
render(ArrayTest);
|
|
182
|
+
|
|
183
|
+
expect(container.querySelector('pre').textContent).toBe('Invalid array length');
|
|
184
|
+
});
|
|
185
|
+
|
|
186
|
+
it('specifies int using static from method', () => {
|
|
187
|
+
component ArrayTest() {
|
|
188
|
+
let items = TrackedArray.from([4]);
|
|
189
|
+
<pre>{JSON.stringify(items)}</pre>
|
|
190
|
+
<pre>{items.length}</pre>
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
render(ArrayTest);
|
|
194
|
+
|
|
195
|
+
expect(container.querySelectorAll('pre')[0].textContent).toBe('[4]');
|
|
196
|
+
// expect(container.querySelectorAll('pre')[1].textContent).toBe('1');
|
|
197
|
+
});
|
|
198
|
+
|
|
199
|
+
it('specifies int using static of method', () => {
|
|
200
|
+
component ArrayTest() {
|
|
201
|
+
let items = TrackedArray.of(5);
|
|
202
|
+
<pre>{JSON.stringify(items)}</pre>
|
|
203
|
+
<pre>{items.length}</pre>
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
render(ArrayTest);
|
|
207
|
+
|
|
208
|
+
expect(container.querySelectorAll('pre')[0].textContent).toBe('[5]');
|
|
209
|
+
expect(container.querySelectorAll('pre')[1].textContent).toBe('1');
|
|
210
|
+
});
|
|
211
|
+
|
|
212
|
+
('fromAsync' in Array.prototype ? it : it.skip)('specifies int using static fromAsync method', async () => {
|
|
213
|
+
component Parent() {
|
|
214
|
+
try {
|
|
215
|
+
<ArrayTest />
|
|
216
|
+
} pending {
|
|
217
|
+
<div>{'Loading placeholder...'}</div>
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
component ArrayTest() {
|
|
222
|
+
const items = await TrackedArray.fromAsync([6]);
|
|
223
|
+
|
|
224
|
+
<pre>{items ? JSON.stringify(items) : 'Loading...'}</pre>
|
|
225
|
+
<pre>{items ? items.length : ''}</pre>
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
render(Parent);
|
|
229
|
+
|
|
230
|
+
await new Promise(resolve => setTimeout(resolve, 0));
|
|
231
|
+
flushSync();
|
|
232
|
+
|
|
233
|
+
expect(container.querySelectorAll('pre')[0].textContent).toBe('[6]');
|
|
234
|
+
expect(container.querySelectorAll('pre')[1].textContent).toBe('1');
|
|
235
|
+
});
|
|
236
|
+
});
|
|
237
|
+
});
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { track, flushSync, TrackedArray } from 'ripple';
|
|
2
|
+
|
|
3
|
+
describe('TrackedArray > to* methods', () => {
|
|
4
|
+
it('handles toReversed method with reactivity', (context) => {
|
|
5
|
+
if (!('toReversed' in Array.prototype)) {
|
|
6
|
+
context.skip();
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
component ArrayTest() {
|
|
10
|
+
let items = new TrackedArray(1, 2, 3, 4);
|
|
11
|
+
let reversed = track(() => items.toReversed());
|
|
12
|
+
|
|
13
|
+
<button onClick={() => items.push(5)}>{'add item'}</button>
|
|
14
|
+
<pre>{JSON.stringify(items)}</pre>
|
|
15
|
+
<pre>{JSON.stringify(@reversed)}</pre>
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
render(ArrayTest);
|
|
19
|
+
|
|
20
|
+
const addButton = container.querySelector('button');
|
|
21
|
+
|
|
22
|
+
// Initial state
|
|
23
|
+
expect(container.querySelectorAll('pre')[0].textContent).toBe('[1,2,3,4]');
|
|
24
|
+
expect(container.querySelectorAll('pre')[1].textContent).toBe('[4,3,2,1]');
|
|
25
|
+
|
|
26
|
+
// Test adding an item
|
|
27
|
+
addButton.click();
|
|
28
|
+
flushSync();
|
|
29
|
+
|
|
30
|
+
expect(container.querySelectorAll('pre')[0].textContent).toBe('[1,2,3,4,5]');
|
|
31
|
+
expect(container.querySelectorAll('pre')[1].textContent).toBe('[5,4,3,2,1]');
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
it('handles toSorted method with reactivity', (context) => {
|
|
35
|
+
if (!('toSorted' in Array.prototype)) {
|
|
36
|
+
context.skip();
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
component ArrayTest() {
|
|
40
|
+
let items = new TrackedArray(3, 1, 4, 2);
|
|
41
|
+
let sorted = track(() => items.toSorted());
|
|
42
|
+
|
|
43
|
+
<button onClick={() => items.push(0)}>{'add item'}</button>
|
|
44
|
+
<pre>{JSON.stringify(items)}</pre>
|
|
45
|
+
<pre>{JSON.stringify(@sorted)}</pre>
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
render(ArrayTest);
|
|
49
|
+
|
|
50
|
+
const addButton = container.querySelector('button');
|
|
51
|
+
|
|
52
|
+
// Initial state
|
|
53
|
+
expect(container.querySelectorAll('pre')[0].textContent).toBe('[3,1,4,2]');
|
|
54
|
+
expect(container.querySelectorAll('pre')[1].textContent).toBe('[1,2,3,4]');
|
|
55
|
+
|
|
56
|
+
// Test adding an item
|
|
57
|
+
addButton.click();
|
|
58
|
+
flushSync();
|
|
59
|
+
|
|
60
|
+
expect(container.querySelectorAll('pre')[0].textContent).toBe('[3,1,4,2,0]');
|
|
61
|
+
expect(container.querySelectorAll('pre')[1].textContent).toBe('[0,1,2,3,4]');
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
it('handles toSpliced method with reactivity', (context) => {
|
|
65
|
+
if (!('toSpliced' in Array.prototype)) {
|
|
66
|
+
context.skip();
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
component ArrayTest() {
|
|
70
|
+
let items = new TrackedArray<string | number>(1, 2, 3, 4, 5);
|
|
71
|
+
let spliced = track(() => items.toSpliced(1, 2, 'a', 'b'));
|
|
72
|
+
|
|
73
|
+
<button onClick={() => items[2] = 30}>{'change item'}</button>
|
|
74
|
+
<pre>{JSON.stringify(items)}</pre>
|
|
75
|
+
<pre>{JSON.stringify(@spliced)}</pre>
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
render(ArrayTest);
|
|
79
|
+
|
|
80
|
+
const changeButton = container.querySelector('button');
|
|
81
|
+
|
|
82
|
+
// Initial state
|
|
83
|
+
expect(container.querySelectorAll('pre')[0].textContent).toBe('[1,2,3,4,5]');
|
|
84
|
+
expect(container.querySelectorAll('pre')[1].textContent).toBe('[1,"a","b",4,5]');
|
|
85
|
+
|
|
86
|
+
// Test changing an item
|
|
87
|
+
changeButton.click();
|
|
88
|
+
flushSync();
|
|
89
|
+
|
|
90
|
+
expect(container.querySelectorAll('pre')[0].textContent).toBe('[1,2,30,4,5]');
|
|
91
|
+
expect(container.querySelectorAll('pre')[1].textContent).toBe('[1,"a","b",4,5]');
|
|
92
|
+
});
|
|
93
|
+
});
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
|
|
2
|
+
|
|
3
|
+
exports[`basic client > attribute rendering > handles boolean attributes with no prop value provides 1`] = `
|
|
4
|
+
<div>
|
|
5
|
+
<div
|
|
6
|
+
class="container"
|
|
7
|
+
>
|
|
8
|
+
<button
|
|
9
|
+
disabled=""
|
|
10
|
+
>
|
|
11
|
+
Button
|
|
12
|
+
</button>
|
|
13
|
+
<input
|
|
14
|
+
checked=""
|
|
15
|
+
type="checkbox"
|
|
16
|
+
/>
|
|
17
|
+
</div>
|
|
18
|
+
|
|
19
|
+
</div>
|
|
20
|
+
`;
|
|
21
|
+
|
|
22
|
+
exports[`basic client > attribute rendering > handles boolean props correctly 1`] = `
|
|
23
|
+
<div>
|
|
24
|
+
<div
|
|
25
|
+
data-disabled=""
|
|
26
|
+
/>
|
|
27
|
+
<input
|
|
28
|
+
disabled=""
|
|
29
|
+
/>
|
|
30
|
+
<!---->
|
|
31
|
+
|
|
32
|
+
</div>
|
|
33
|
+
`;
|
|
34
|
+
|
|
35
|
+
exports[`basic client > attribute rendering > render spread props without duplication 1`] = `
|
|
36
|
+
<div>
|
|
37
|
+
<div>
|
|
38
|
+
<input
|
|
39
|
+
id="vehicle1"
|
|
40
|
+
name="car"
|
|
41
|
+
type="checkbox"
|
|
42
|
+
value="Bike"
|
|
43
|
+
/>
|
|
44
|
+
</div>
|
|
45
|
+
|
|
46
|
+
</div>
|
|
47
|
+
`;
|
|
48
|
+
|
|
49
|
+
exports[`basic client > attribute rendering > render static attributes 1`] = `
|
|
50
|
+
<div>
|
|
51
|
+
<div
|
|
52
|
+
class="foo"
|
|
53
|
+
id="bar"
|
|
54
|
+
style="color: red;"
|
|
55
|
+
>
|
|
56
|
+
Hello World
|
|
57
|
+
</div>
|
|
58
|
+
|
|
59
|
+
</div>
|
|
60
|
+
`;
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
|
|
2
|
+
|
|
3
|
+
exports[`basic client > rendering & text > basic operations 1`] = `
|
|
4
|
+
<div>
|
|
5
|
+
<div>
|
|
6
|
+
0
|
|
7
|
+
</div>
|
|
8
|
+
<div>
|
|
9
|
+
2
|
|
10
|
+
</div>
|
|
11
|
+
<div>
|
|
12
|
+
5
|
|
13
|
+
</div>
|
|
14
|
+
<div>
|
|
15
|
+
2
|
|
16
|
+
</div>
|
|
17
|
+
|
|
18
|
+
</div>
|
|
19
|
+
`;
|
|
20
|
+
|
|
21
|
+
exports[`basic client > rendering & text > renders semi-dynamic text 1`] = `
|
|
22
|
+
<div>
|
|
23
|
+
<div>
|
|
24
|
+
Hello World
|
|
25
|
+
</div>
|
|
26
|
+
|
|
27
|
+
</div>
|
|
28
|
+
`;
|
|
29
|
+
|
|
30
|
+
exports[`basic client > rendering & text > renders simple JS expression logic correctly 1`] = `
|
|
31
|
+
<div>
|
|
32
|
+
<div>
|
|
33
|
+
{"0":"Test"}
|
|
34
|
+
</div>
|
|
35
|
+
<div>
|
|
36
|
+
1
|
|
37
|
+
</div>
|
|
38
|
+
|
|
39
|
+
</div>
|
|
40
|
+
`;
|
|
41
|
+
|
|
42
|
+
exports[`basic client > rendering & text > renders static text 1`] = `
|
|
43
|
+
<div>
|
|
44
|
+
<div>
|
|
45
|
+
Hello World
|
|
46
|
+
</div>
|
|
47
|
+
|
|
48
|
+
</div>
|
|
49
|
+
`;
|
|
50
|
+
|
|
51
|
+
exports[`basic client > rendering & text > should handle lexical scopes correctly 1`] = `
|
|
52
|
+
<div>
|
|
53
|
+
<section>
|
|
54
|
+
Nested scope variable
|
|
55
|
+
</section>
|
|
56
|
+
|
|
57
|
+
</div>
|
|
58
|
+
`;
|
|
59
|
+
|
|
60
|
+
exports[`basic client > text rendering > basic operations 1`] = `
|
|
61
|
+
<div>
|
|
62
|
+
<div>
|
|
63
|
+
0
|
|
64
|
+
</div>
|
|
65
|
+
<div>
|
|
66
|
+
2
|
|
67
|
+
</div>
|
|
68
|
+
<div>
|
|
69
|
+
5
|
|
70
|
+
</div>
|
|
71
|
+
<div>
|
|
72
|
+
2
|
|
73
|
+
</div>
|
|
74
|
+
|
|
75
|
+
</div>
|
|
76
|
+
`;
|
|
77
|
+
|
|
78
|
+
exports[`basic client > text rendering > renders semi-dynamic text 1`] = `
|
|
79
|
+
<div>
|
|
80
|
+
<div>
|
|
81
|
+
Hello World
|
|
82
|
+
</div>
|
|
83
|
+
|
|
84
|
+
</div>
|
|
85
|
+
`;
|
|
86
|
+
|
|
87
|
+
exports[`basic client > text rendering > renders simple JS expression logic correctly 1`] = `
|
|
88
|
+
<div>
|
|
89
|
+
<div>
|
|
90
|
+
{"0":"Test"}
|
|
91
|
+
</div>
|
|
92
|
+
<div>
|
|
93
|
+
1
|
|
94
|
+
</div>
|
|
95
|
+
|
|
96
|
+
</div>
|
|
97
|
+
`;
|
|
98
|
+
|
|
99
|
+
exports[`basic client > text rendering > renders static text 1`] = `
|
|
100
|
+
<div>
|
|
101
|
+
<div>
|
|
102
|
+
Hello World
|
|
103
|
+
</div>
|
|
104
|
+
|
|
105
|
+
</div>
|
|
106
|
+
`;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
|
|
2
|
+
|
|
3
|
+
exports[`basic client > text rendering > basic operations 1`] = `
|
|
4
|
+
<div>
|
|
5
|
+
<div>
|
|
6
|
+
0
|
|
7
|
+
</div>
|
|
8
|
+
<div>
|
|
9
|
+
2
|
|
10
|
+
</div>
|
|
11
|
+
<div>
|
|
12
|
+
5
|
|
13
|
+
</div>
|
|
14
|
+
<div>
|
|
15
|
+
2
|
|
16
|
+
</div>
|
|
17
|
+
|
|
18
|
+
</div>
|
|
19
|
+
`;
|
|
20
|
+
|
|
21
|
+
exports[`basic client > text rendering > renders semi-dynamic text 1`] = `
|
|
22
|
+
<div>
|
|
23
|
+
<div>
|
|
24
|
+
Hello World
|
|
25
|
+
</div>
|
|
26
|
+
|
|
27
|
+
</div>
|
|
28
|
+
`;
|
|
29
|
+
|
|
30
|
+
exports[`basic client > text rendering > renders simple JS expression logic correctly 1`] = `
|
|
31
|
+
<div>
|
|
32
|
+
<div>
|
|
33
|
+
{"0":"Test"}
|
|
34
|
+
</div>
|
|
35
|
+
<div>
|
|
36
|
+
1
|
|
37
|
+
</div>
|
|
38
|
+
|
|
39
|
+
</div>
|
|
40
|
+
`;
|
|
41
|
+
|
|
42
|
+
exports[`basic client > text rendering > renders static text 1`] = `
|
|
43
|
+
<div>
|
|
44
|
+
<div>
|
|
45
|
+
Hello World
|
|
46
|
+
</div>
|
|
47
|
+
|
|
48
|
+
</div>
|
|
49
|
+
`;
|