import { describe, it, expect } from 'vitest' import { renderToString } from '../ssr/render-string.ts' import { Frame } from '../../index.ts' import { bootstrapFrameMarkers } from '../runtime.ts' describe('Runtime bootstrap: consume markers and establish regions', () => { it('records statuses and inserts boundaries around fallback/resolved content', async () => { let html = await renderToString(
Loading} />
, { resolveFrame: (src) => { if (src === '/x') return X if (src === '/y') return Y return '' }, }, ) let container = document.createElement('div') container.innerHTML = html // Before bootstrap there are scripts but no explicit boundaries for pending fallback let pendingScript = container.querySelector('script[rmx-frame]') as HTMLScriptElement expect(pendingScript).toBeTruthy() bootstrapFrameMarkers(container) // After bootstrap, boundaries exist for both frames let startComments = findAllComments(container).filter((c) => /RMX:\d+(?:-[^:]+)*:start/.test(c.data), ) let endComments = findAllComments(container).filter((c) => /RMX:\d+(?:-[^:]+)*:end/.test(c.data), ) expect(startComments.length >= 2).toBe(true) expect(endComments.length >= 2).toBe(true) }) }) function findAllComments(container: HTMLElement): Comment[] { let out: Comment[] = [] let walker = document.createTreeWalker(container, NodeFilter.SHOW_COMMENT) let node: Comment | null // @ts-ignore nextNode may return null while ((node = walker.nextNode() as Comment | null)) { if (node) out.push(node) } return out }