import type { SSRResult } from '../../../../types/public/internal.js'; import type { AstroComponentInstance } from '../astro/instance.js'; import type { RenderInstruction } from '../instruction.js'; import type { ServerIslandComponent } from '../server-islands.js'; import type { NodePool } from './pool.js'; import type { HTMLStringCache } from '../../html-string-cache.js'; /** * Text node containing plain text content that will be HTML-escaped during rendering */ export interface TextNode { type: 'text'; content: string; } /** * HTML string node containing pre-rendered HTML markup that is already safe */ export interface HtmlStringNode { type: 'html-string'; html: string; } /** * Component node containing an Astro component instance to be rendered */ export interface ComponentNode { type: 'component'; instance: AstroComponentInstance | ServerIslandComponent; } /** * Instruction node containing rendering instructions (head content, hydration scripts, etc.) */ export interface InstructionNode { type: 'instruction'; instruction: RenderInstruction; } /** * Discriminated union of all queue node types. * TypeScript will narrow the type based on the 'type' field. */ export type QueueNode = TextNode | HtmlStringNode | ComponentNode | InstructionNode; /** * The render queue containing all nodes to be rendered */ export interface RenderQueue { /** * All nodes in rendering order (after reversing the built queue) */ nodes: QueueNode[]; /** * SSRResult context */ result: SSRResult; /** * Object pool instance used for node acquisition */ pool?: NodePool; /** * HTMLString cache instance for reducing memory allocations */ htmlStringCache?: HTMLStringCache; } /** * Stack item used during queue building (internal use only) */ export interface StackItem { /** * The value to process */ node: any; /** * Parent queue node (tracked but not used during rendering) */ parent: QueueNode | null; /** * Additional metadata passed through the stack (component props, slots, displayName) */ metadata?: { displayName?: string; props?: Record; slots?: any; }; }