Skip to content

Commit 85af918

Browse files
committed
feat(ssr): keep track of written size, expose write()
1 parent 46f2062 commit 85af918

File tree

11 files changed

+36
-12
lines changed

11 files changed

+36
-12
lines changed

packages/docs/src/routes/api/qwik-testing/api.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@
178178
}
179179
],
180180
"kind": "Function",
181-
"content": "```typescript\nexport declare function ssrRenderToDom(jsx: JSXOutput, opts?: {\n debug?: boolean;\n raw?: boolean;\n}): Promise<{\n container: _DomContainer;\n document: Document;\n vNode: _VNode | null;\n getStyles: () => Record<string, string | string[]>;\n}>;\n```\n\n\n<table><thead><tr><th>\n\nParameter\n\n\n</th><th>\n\nType\n\n\n</th><th>\n\nDescription\n\n\n</th></tr></thead>\n<tbody><tr><td>\n\njsx\n\n\n</td><td>\n\nJSXOutput\n\n\n</td><td>\n\n\n</td></tr>\n<tr><td>\n\nopts\n\n\n</td><td>\n\n{ debug?: boolean; raw?: boolean; }\n\n\n</td><td>\n\n_(Optional)_\n\n\n</td></tr>\n</tbody></table>\n\n**Returns:**\n\nPromise&lt;{ container: \\_DomContainer; document: Document; vNode: \\_VNode \\| null; getStyles: () =&gt; Record&lt;string, string \\| string\\[\\]&gt;; }&gt;",
181+
"content": "```typescript\nexport declare function ssrRenderToDom(jsx: JSXOutput, opts?: {\n debug?: boolean;\n raw?: boolean;\n qwikLoader?: boolean;\n}): Promise<{\n container: _DomContainer;\n document: Document;\n vNode: _VNode | null;\n getStyles: () => Record<string, string | string[]>;\n}>;\n```\n\n\n<table><thead><tr><th>\n\nParameter\n\n\n</th><th>\n\nType\n\n\n</th><th>\n\nDescription\n\n\n</th></tr></thead>\n<tbody><tr><td>\n\njsx\n\n\n</td><td>\n\nJSXOutput\n\n\n</td><td>\n\n\n</td></tr>\n<tr><td>\n\nopts\n\n\n</td><td>\n\n{ debug?: boolean; raw?: boolean; qwikLoader?: boolean; }\n\n\n</td><td>\n\n_(Optional)_\n\n\n</td></tr>\n</tbody></table>\n\n**Returns:**\n\nPromise&lt;{ container: \\_DomContainer; document: Document; vNode: \\_VNode \\| null; getStyles: () =&gt; Record&lt;string, string \\| string\\[\\]&gt;; }&gt;",
182182
"editUrl": "https://github.com/QwikDev/qwik/tree/main/packages/qwik/src/testing/rendering.unit-util.tsx",
183183
"mdFile": "core.ssrrendertodom.md"
184184
},

packages/docs/src/routes/api/qwik-testing/index.mdx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -435,6 +435,7 @@ export declare function ssrRenderToDom(
435435
opts?: {
436436
debug?: boolean;
437437
raw?: boolean;
438+
qwikLoader?: boolean;
438439
},
439440
): Promise<{
440441
container: _DomContainer;
@@ -474,7 +475,7 @@ opts
474475

475476
</td><td>
476477

477-
\{ debug?: boolean; raw?: boolean; }
478+
\{ debug?: boolean; raw?: boolean; qwikLoader?: boolean; }
478479

479480
</td><td>
480481

packages/qwik/src/core/ssr/ssr-types.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ export type SymbolToChunkResolver = (symbol: string) => string;
6161
export interface SSRContainer extends Container {
6262
readonly tag: string;
6363
readonly isHtml: boolean;
64+
readonly size: number;
6465
readonly writer: StreamWriter;
6566
readonly serializationCtx: SerializationContext;
6667
readonly symbolToChunkResolver: SymbolToChunkResolver;
@@ -69,6 +70,8 @@ export interface SSRContainer extends Container {
6970
additionalBodyNodes: Array<JSXNodeInternal>;
7071
unclaimedProjectionComponentFrameQueue: ISsrComponentFrame[];
7172

73+
write(text: string): void;
74+
7275
openContainer(): void;
7376
closeContainer(): ValueOrPromise<void>;
7477

packages/qwik/src/core/tests/backpatch.spec.tsx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,11 @@ import { ELEMENT_BACKPATCH_DATA } from '../../server/qwik-copy';
1717
const debug = false; //true;
1818
Error.stackTraceLimit = 100;
1919

20+
vi.hoisted(() => {
21+
vi.stubGlobal('QWIK_BACKPATCH_EXECUTOR_MINIFIED', 'min');
22+
vi.stubGlobal('QWIK_BACKPATCH_EXECUTOR_DEBUG', 'debug');
23+
});
24+
2025
describe('SSR Backpatching', () => {
2126
it('should handle basic backpatching', async () => {
2227
const Ctx = createContextId<{ descId: Signal<string> }>('bp-ctx-1');

packages/qwik/src/core/tests/use-context.spec.tsx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,11 @@ import * as qError from '../shared/error/error';
3333
const debug = false; //true;
3434
Error.stackTraceLimit = 100;
3535

36+
vi.hoisted(() => {
37+
vi.stubGlobal('QWIK_LOADER_DEFAULT_MINIFIED', 'min');
38+
vi.stubGlobal('QWIK_LOADER_DEFAULT_DEBUG', 'debug');
39+
});
40+
3641
/**
3742
* Below are helper functions that are constant. They have to be in the top level scope so that the
3843
* optimizer doesn't consider them as captured scope. It would be great if the optimizer could

packages/qwik/src/core/tests/use-styles-scoped.spec.tsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import {
1212
import { renderToString } from '@qwik.dev/core/server';
1313
import { createDocument, domRender, ssrRenderToDom, trigger } from '@qwik.dev/core/testing';
1414
import { cleanupAttrs } from 'packages/qwik/src/testing/element-fixture';
15-
import { afterEach, describe, expect, it } from 'vitest';
15+
import { afterEach, describe, expect, it, vi } from 'vitest';
1616
import { useStore } from '..';
1717
import { getPlatform, setPlatform } from '../shared/platform/platform';
1818
import { QStyleSelector } from '../shared/utils/markers';
@@ -21,6 +21,11 @@ import { getScopedStyles } from '../shared/utils/scoped-stylesheet';
2121
const debug = false; //true;
2222
Error.stackTraceLimit = 100;
2323

24+
vi.hoisted(() => {
25+
vi.stubGlobal('QWIK_LOADER_DEFAULT_MINIFIED', 'min');
26+
vi.stubGlobal('QWIK_LOADER_DEFAULT_DEBUG', 'debug');
27+
});
28+
2429
describe.each([
2530
{ render: ssrRenderToDom }, //
2631
{ render: domRender }, //

packages/qwik/src/core/tests/use-styles.spec.tsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,18 @@ import {
1010
} from '@qwik.dev/core';
1111
import { renderToString } from '@qwik.dev/core/server';
1212
import { createDocument, domRender, ssrRenderToDom, trigger } from '@qwik.dev/core/testing';
13-
import { afterEach, describe, expect, it } from 'vitest';
13+
import { afterEach, describe, expect, it, vi } from 'vitest';
1414
import { getPlatform, setPlatform } from '../shared/platform/platform';
1515
import { QStyleSelector } from '../shared/utils/markers';
1616

1717
const debug = false; //true;
1818
Error.stackTraceLimit = 100;
1919

20+
vi.hoisted(() => {
21+
vi.stubGlobal('QWIK_LOADER_DEFAULT_MINIFIED', 'min');
22+
vi.stubGlobal('QWIK_LOADER_DEFAULT_DEBUG', 'debug');
23+
});
24+
2025
describe.each([
2126
{ render: ssrRenderToDom }, //
2227
{ render: domRender }, //

packages/qwik/src/server/preload-impl.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ export const preloaderPre = (
9999
scriptAttrs.push('nonce', nonce);
100100
}
101101
container.openElement('script', null, scriptAttrs);
102-
container.writer.write(script);
102+
container.write(script);
103103
container.closeElement();
104104
}
105105

@@ -197,7 +197,7 @@ export const includePreloader = (
197197
attrs.push('nonce', nonce);
198198
}
199199
container.openElement('script', null, attrs);
200-
container.writer.write(script);
200+
container.write(script);
201201
container.closeElement();
202202
}
203203

packages/qwik/src/server/ssr-container.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,7 @@ class SSRContainer extends _SharedContainer implements ISSRContainer {
183183
public isHtml: boolean;
184184
public writer: StreamWriter;
185185
public timing: RenderToStreamResult['timing'];
186+
public size = 0;
186187
public resolvedManifest: ResolvedManifest;
187188
public symbolToChunkResolver: SymbolToChunkResolver;
188189
public renderOptions: RenderOptions;
@@ -1106,7 +1107,8 @@ class SSRContainer extends _SharedContainer implements ISSRContainer {
11061107
}
11071108

11081109
////////////////////////////////////
1109-
private write(text: string) {
1110+
write(text: string) {
1111+
this.size += text.length;
11101112
this.writer.write(text);
11111113
}
11121114

packages/qwik/src/server/ssr-render.ts

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ export const renderToStream = async (
7575
? opts.locale(opts)
7676
: opts.serverData?.locale || opts.locale || opts.containerAttributes?.locale || '';
7777

78-
const { stream, flush, networkFlushes, totalSize } = handleStreaming(opts, timing);
78+
const { stream, flush, networkFlushes } = handleStreaming(opts, timing);
7979

8080
const ssrContainer = ssrCreateContainer({
8181
tagName: containerTagName,
@@ -101,7 +101,7 @@ export const renderToStream = async (
101101
snapshotResult,
102102
flushes: networkFlushes,
103103
manifest: resolvedManifest?.manifest,
104-
size: totalSize,
104+
size: ssrContainer.size,
105105
isStatic: !isDynamic,
106106
timing: timing,
107107
};
@@ -134,7 +134,6 @@ function handleStreaming(opts: RenderToStreamOptions, timing: RenderToStreamResu
134134
let stream = opts.stream;
135135
let bufferSize = 0;
136136
let buffer: string = '';
137-
let totalSize = 0;
138137
let networkFlushes = 0;
139138
const inOrderStreaming = opts.streaming?.inOrder ?? {
140139
strategy: 'auto',
@@ -158,7 +157,6 @@ function handleStreaming(opts: RenderToStreamOptions, timing: RenderToStreamResu
158157
function enqueue(chunk: string) {
159158
const len = chunk.length;
160159
bufferSize += len;
161-
totalSize += len;
162160
buffer += chunk;
163161
}
164162

@@ -219,7 +217,6 @@ function handleStreaming(opts: RenderToStreamOptions, timing: RenderToStreamResu
219217
stream,
220218
flush,
221219
networkFlushes,
222-
totalSize,
223220
};
224221
}
225222

0 commit comments

Comments
 (0)