ripple 0.2.152 → 0.2.153
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/README.md +3 -3
- package/package.json +5 -5
- package/src/compiler/phases/1-parse/index.js +1 -1
- package/src/compiler/phases/3-transform/client/index.js +37 -16
- package/src/compiler/phases/3-transform/server/index.js +43 -25
- package/src/runtime/internal/client/events.js +5 -1
- package/src/runtime/internal/client/index.js +2 -1
- package/src/runtime/internal/client/render.js +18 -15
- package/src/runtime/internal/client/runtime.js +75 -10
- package/src/runtime/internal/server/index.js +51 -11
- package/src/server/index.js +1 -1
- package/tests/client/array/array.derived.test.ripple +61 -33
- package/tests/client/array/array.iteration.test.ripple +3 -1
- package/tests/client/array/array.mutations.test.ripple +19 -15
- package/tests/client/array/array.static.test.ripple +115 -104
- package/tests/client/array/array.to-methods.test.ripple +3 -3
- package/tests/client/basic/basic.attributes.test.ripple +110 -57
- package/tests/client/basic/basic.collections.test.ripple +41 -22
- package/tests/client/basic/basic.errors.test.ripple +12 -6
- package/tests/client/basic/basic.events.test.ripple +51 -33
- package/tests/client/basic/basic.reactivity.test.ripple +120 -56
- package/tests/client/basic/basic.rendering.test.ripple +49 -19
- package/tests/client/basic/basic.styling.test.ripple +2 -2
- package/tests/client/basic/basic.utilities.test.ripple +1 -1
- package/tests/client/boundaries.test.ripple +70 -58
- package/tests/client/compiler/compiler.assignments.test.ripple +32 -4
- package/tests/client/compiler/compiler.attributes.test.ripple +46 -46
- package/tests/client/compiler/compiler.basic.test.ripple +18 -15
- package/tests/client/compiler/compiler.tracked-access.test.ripple +53 -42
- package/tests/client/compiler/compiler.typescript.test.ripple +1 -2
- package/tests/client/composite/composite.dynamic-components.test.ripple +6 -6
- package/tests/client/composite/composite.generics.test.ripple +39 -36
- package/tests/client/composite/composite.props.test.ripple +4 -3
- package/tests/client/composite/composite.reactivity.test.ripple +112 -27
- package/tests/client/composite/composite.render.test.ripple +9 -8
- package/tests/client/computed-properties.test.ripple +24 -24
- package/tests/client/context.test.ripple +11 -9
- package/tests/client/date.test.ripple +3 -1
- package/tests/client/dynamic-elements.test.ripple +103 -78
- package/tests/client/for.test.ripple +27 -17
- package/tests/client/head.test.ripple +42 -6
- package/tests/client/html.test.ripple +42 -32
- package/tests/client/input-value.test.ripple +4 -4
- package/tests/client/map.test.ripple +140 -141
- package/tests/client/media-query.test.ripple +31 -31
- package/tests/client/object.test.ripple +148 -112
- package/tests/client/portal.test.ripple +29 -15
- package/tests/client/ref.test.ripple +9 -3
- package/tests/client/set.test.ripple +111 -111
- package/tests/client/tracked-expression.test.ripple +16 -17
- package/tests/client/url/url.derived.test.ripple +19 -9
- package/tests/client/url/url.parsing.test.ripple +24 -8
- package/tests/client/url/url.partial-removal.test.ripple +12 -4
- package/tests/client/url/url.reactivity.test.ripple +63 -25
- package/tests/client/url/url.serialization.test.ripple +18 -6
- package/tests/client/url-search-params/url-search-params.derived.test.ripple +10 -6
- package/tests/client/url-search-params/url-search-params.iteration.test.ripple +3 -1
- package/tests/client/url-search-params/url-search-params.mutation.test.ripple +26 -14
- package/tests/client/url-search-params/url-search-params.tracked-url.test.ripple +3 -1
- package/tests/server/await.test.ripple +23 -22
- package/tests/server/basic.test.ripple +1 -1
- package/tests/server/compiler.test.ripple +3 -7
- package/tests/server/composite.test.ripple +38 -36
- package/tests/server/for.test.ripple +9 -5
- package/tests/server/if.test.ripple +1 -1
- package/tests/server/streaming-ssr.test.ripple +67 -0
- package/types/server.d.ts +5 -4
|
@@ -12,7 +12,9 @@ describe('for statements in SSR', () => {
|
|
|
12
12
|
}
|
|
13
13
|
|
|
14
14
|
const { body } = await render(App);
|
|
15
|
-
expect(body).toBe(
|
|
15
|
+
expect(body).toBe(
|
|
16
|
+
'<div class="Item 1">Item 1</div><div class="Item 2">Item 2</div><div class="Item 3">Item 3</div>',
|
|
17
|
+
);
|
|
16
18
|
});
|
|
17
19
|
|
|
18
20
|
it('renders nested for...of loops', async () => {
|
|
@@ -20,12 +22,12 @@ describe('for statements in SSR', () => {
|
|
|
20
22
|
const groups = [
|
|
21
23
|
{
|
|
22
24
|
name: 'Group 1',
|
|
23
|
-
items: ['Item 1.1', 'Item 1.2']
|
|
25
|
+
items: ['Item 1.1', 'Item 1.2'],
|
|
24
26
|
},
|
|
25
27
|
{
|
|
26
28
|
name: 'Group 2',
|
|
27
|
-
items: ['Item 2.1', 'Item 2.2']
|
|
28
|
-
}
|
|
29
|
+
items: ['Item 2.1', 'Item 2.2'],
|
|
30
|
+
},
|
|
29
31
|
];
|
|
30
32
|
|
|
31
33
|
for (const group of groups) {
|
|
@@ -39,6 +41,8 @@ describe('for statements in SSR', () => {
|
|
|
39
41
|
}
|
|
40
42
|
|
|
41
43
|
const { body } = await render(App);
|
|
42
|
-
expect(body).toBe(
|
|
44
|
+
expect(body).toBe(
|
|
45
|
+
'<h1>Group 1</h1><ul><li>Item 1.1</li><li>Item 1.2</li></ul><h1>Group 2</h1><ul><li>Item 2.1</li><li>Item 2.2</li></ul>',
|
|
46
|
+
);
|
|
43
47
|
});
|
|
44
48
|
});
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { test } from 'vitest';
|
|
2
|
+
import { renderToStream } from 'ripple/server';
|
|
3
|
+
import { Readable } from 'stream';
|
|
4
|
+
|
|
5
|
+
test('renderToStream renders a simple component', async ({ expect }) => {
|
|
6
|
+
component Basic() {
|
|
7
|
+
<div>{'Hello, streaming SSR!'}</div>
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
const stream = renderToStream(Basic);
|
|
11
|
+
|
|
12
|
+
let result = '';
|
|
13
|
+
await new Promise((resolve) => {
|
|
14
|
+
stream.on('data', (chunk) => {
|
|
15
|
+
result += chunk.toString();
|
|
16
|
+
});
|
|
17
|
+
stream.on('end', resolve);
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
expect(result).toBe('<div>Hello, streaming SSR!</div>');
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
test('renderToStream handles async components', async ({ expect }) => {
|
|
24
|
+
component AsyncComponent() {
|
|
25
|
+
await new Promise((resolve) => setTimeout(resolve, 10));
|
|
26
|
+
<p>{'Async content loaded.'}</p>
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
const stream = renderToStream(AsyncComponent);
|
|
30
|
+
|
|
31
|
+
let result = '';
|
|
32
|
+
await new Promise((resolve) => {
|
|
33
|
+
stream.on('data', (chunk) => {
|
|
34
|
+
result += chunk.toString();
|
|
35
|
+
});
|
|
36
|
+
stream.on('end', resolve);
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
expect(result).toBe('<p>Async content loaded.</p>');
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
test('renderToStream handles await blocks with pending state', async ({ expect }) => {
|
|
43
|
+
component AwaitComponent() {
|
|
44
|
+
let data = 'initial';
|
|
45
|
+
await new Promise((resolve) => setTimeout(() => {
|
|
46
|
+
data = 'resolved';
|
|
47
|
+
resolve('');
|
|
48
|
+
}, 20));
|
|
49
|
+
try {
|
|
50
|
+
<div>{'Data: '}{data}</div>
|
|
51
|
+
} pending {
|
|
52
|
+
<div>{'Loading...'}</div>
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
const stream = renderToStream(AwaitComponent);
|
|
57
|
+
|
|
58
|
+
let result = '';
|
|
59
|
+
await new Promise((resolve) => {
|
|
60
|
+
stream.on('data', (chunk) => {
|
|
61
|
+
result += chunk.toString();
|
|
62
|
+
});
|
|
63
|
+
stream.on('end', resolve);
|
|
64
|
+
});
|
|
65
|
+
console.log(result)
|
|
66
|
+
expect(result).toBe('<div>Loading...</div><div>Data: resolved</div>');
|
|
67
|
+
});
|
package/types/server.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type { Props } from '#public'
|
|
1
|
+
import type { Props } from '#public';
|
|
2
|
+
import type { Readable } from 'node:stream';
|
|
2
3
|
|
|
3
4
|
export interface SSRRenderOutput {
|
|
4
5
|
head: string;
|
|
@@ -21,6 +22,6 @@ export interface SSRRenderResult {
|
|
|
21
22
|
|
|
22
23
|
export type SSRRender = (component: SSRComponent) => Promise<SSRRenderResult>;
|
|
23
24
|
|
|
24
|
-
export declare function render(
|
|
25
|
-
|
|
26
|
-
):
|
|
25
|
+
export declare function render(component: SSRComponent): Promise<SSRRenderResult>;
|
|
26
|
+
|
|
27
|
+
export declare function renderToStream(component: SSRComponent): Readable;
|