import type { RenderAdapter, RenderProps } from "./render-seam.js"; /** Framework-specific values that let the shared conformance module exercise a render adapter. */ export interface RenderAdapterConformanceFixture { /** A page that renders the `page`, `data`, and `pending` markers from the supplied props. */ readonly page: unknown; /** The outer layout, which renders `markers.outer` before its child. */ readonly outerLayout: unknown; /** The inner layout, which renders `markers.inner` before its child. */ readonly innerLayout: unknown; /** Props passed to the page. Use values represented by the `data` and `pending` markers. */ readonly props: RenderProps; /** * Set when the fixture renders **deferred/streaming-only** content (e.g. Suspense that resolves during * the stream). Streaming and buffered (`renderToString`) output then legitimately differ byte-for-byte, * so the hydration-equivalence check is relaxed to "buffered output still contains every marker" instead * of exact equality. Leave unset for plain synchronous content (the stricter, preferred check). */ readonly deferred?: boolean; /** Unique text fragments observable in the rendered HTML. */ readonly markers: { readonly page: string; readonly data: string; readonly pending: string; readonly outer: string; readonly inner: string; }; } /** A failed invariant reported by {@link assertRenderAdapterConformance}. */ export declare class RenderAdapterConformanceError extends Error { readonly check: string; constructor(check: string, message: string, cause?: unknown); } /** * Execute the observable {@link RenderAdapter} interface against a framework-specific fixture. * * The promise resolves only when the adapter proves all shared invariants: page props reach a * page-only render, streams contain byte chunks, layout chains nest outermost-first, optional * buffered rendering is byte-for-byte hydration-equivalent to streaming for non-deferred content, * and hydration-head output is a stable string. It rejects with * {@link RenderAdapterConformanceError} naming the first failed check. * * Framework semantics outside the interface-Suspense scheduling, compiler plugins, DOM hydration, * error boundaries, and framework-specific primitives-remain the adapter package's local tests. */ export declare function assertRenderAdapterConformance(adapter: RenderAdapter, fixture: RenderAdapterConformanceFixture): Promise; //# sourceMappingURL=conformance.d.ts.map