( node: any, rCtx: RenderContext, ssrCtx: SSRContext, stream: StreamWriter, flags: number, beforeClose?: (stream: StreamWriter) => ValueOrPromise<void> )
| 877 | |
| 878 | /** Embed metadata while rendering the tree, to be used when resuming */ |
| 879 | const processData = ( |
| 880 | node: any, |
| 881 | rCtx: RenderContext, |
| 882 | ssrCtx: SSRContext, |
| 883 | stream: StreamWriter, |
| 884 | flags: number, |
| 885 | beforeClose?: (stream: StreamWriter) => ValueOrPromise<void> |
| 886 | ): ValueOrPromise<void> => { |
| 887 | if (node == null || typeof node === 'boolean') { |
| 888 | return; |
| 889 | } |
| 890 | if (isString(node) || typeof node === 'number') { |
| 891 | stream.write(escapeHtml(String(node))); |
| 892 | } else if (isJSXNode(node)) { |
| 893 | return renderNode(node, rCtx, ssrCtx, stream, flags, beforeClose); |
| 894 | } else if (isArray(node)) { |
| 895 | return walkChildren(node, rCtx, ssrCtx, stream, flags); |
| 896 | } else if (isSignal(node)) { |
| 897 | const insideText = flags & IS_TEXT; |
| 898 | const hostEl = rCtx.$cmpCtx$?.$element$ as QwikElement; |
| 899 | let value; |
| 900 | if (hostEl) { |
| 901 | if (!insideText) { |
| 902 | const id = getNextIndex(rCtx); |
| 903 | const subs = |
| 904 | flags & IS_IMMUTABLE |
| 905 | ? ([3, ('#' + id) as any, node, ('#' + id) as any] as const) |
| 906 | : ([4, hostEl, node, ('#' + id) as any] as const); |
| 907 | |
| 908 | value = trackSignal(node, subs); |
| 909 | if (isString(value)) { |
| 910 | const str = jsxToString(value); |
| 911 | ssrCtx.$static$.$textNodes$.set(str, id); |
| 912 | } |
| 913 | stream.write(`<!--t=${id}-->`); |
| 914 | processData(value, rCtx, ssrCtx, stream, flags, beforeClose); |
| 915 | stream.write(`<!---->`); |
| 916 | return; |
| 917 | } else { |
| 918 | value = invoke(ssrCtx.$invocationContext$, () => node.value); |
| 919 | } |
| 920 | } |
| 921 | stream.write(escapeHtml(jsxToString(value))); |
| 922 | return; |
| 923 | } else if (isPromise(node)) { |
| 924 | stream.write(FLUSH_COMMENT); |
| 925 | return node.then((node) => processData(node, rCtx, ssrCtx, stream, flags, beforeClose)); |
| 926 | } else { |
| 927 | logWarn('A unsupported value was passed to the JSX, skipping render. Value:', node); |
| 928 | return; |
| 929 | } |
| 930 | }; |
| 931 | |
| 932 | const walkChildren = ( |
| 933 | children: unknown, |
no test coverage detected
searching dependent graphs…