@bgub/fig-server 0.1.0-alpha.0 → 0.1.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +99 -72
- package/dist/escaping-DAot8sFu.js +26 -0
- package/dist/escaping-DAot8sFu.js.map +1 -0
- package/dist/html-entry.d.ts +7 -0
- package/dist/html-entry.js +2 -0
- package/dist/index.d.ts +3 -7
- package/dist/index.js +671 -395
- package/dist/index.js.map +1 -1
- package/dist/payload.d.ts +13 -236
- package/dist/payload.js +235 -1363
- package/dist/payload.js.map +1 -1
- package/dist/{shared-CQn6Dje6.js → shared-Bna74_aZ.js} +22 -4
- package/dist/shared-Bna74_aZ.js.map +1 -0
- package/dist/{types-4X0JT0wt.d.ts → types-CimwEFsf.d.ts} +32 -10
- package/package.json +8 -3
- package/dist/shared-CQn6Dje6.js.map +0 -1
package/dist/payload.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"payload.js","names":["invalidChildError"],"sources":["../src/payload.ts"],"sourcesContent":["import type { DataResourceKeyInput } from \"@bgub/fig\";\nimport {\n clientReference,\n createElement,\n type ElementType,\n type FigAssetResource,\n type FigAssetResourceList,\n type FigClientReference,\n type FigContext,\n type FigDataHydrationEntry,\n type FigDataStoreHandle,\n type FigElement,\n type FigNode,\n type FontResource,\n Fragment,\n type Key,\n type ModulePreloadResource,\n type PreconnectResource,\n type PreloadResource,\n type Props,\n readPromise,\n type ScriptResource,\n type StylesheetResource,\n Suspense,\n ViewTransition,\n} from \"@bgub/fig\";\nimport {\n assetResourceDestination,\n assetResourceKey,\n clientReferenceAssets,\n createDataStore,\n type DataStore,\n type DataStoreEntrySnapshot,\n describeInvalidChild,\n isActivity,\n isAssets,\n isClientReference,\n isContext,\n isErrorBoundary,\n FigElementSymbol,\n isFigAssetResource,\n isPortal,\n isSuspense,\n isThenable,\n isValidElement,\n isViewTransition,\n normalizeDataResourceKey,\n type RenderDispatcher,\n readThenable,\n setCurrentDataStore,\n setCurrentDispatcher,\n type Thenable,\n trackThenable,\n} from \"@bgub/fig/internal\";\nimport {\n type ContextValues,\n cloneContextValues,\n createStaticDispatcher,\n type Deferred,\n deferred,\n withContextValue,\n} from \"./shared.ts\";\nimport type { ServerErrorInfo, ServerErrorPayload } from \"./types.ts\";\n\ndeclare const __FIG_DEV__: boolean | undefined;\n\nconst __DEV__ = typeof __FIG_DEV__ === \"boolean\" ? __FIG_DEV__ : false;\n\nexport interface PayloadRenderResult {\n abort(reason?: unknown): void;\n allReady: Promise<void>;\n contentType: string;\n stream: ReadableStream<Uint8Array>;\n}\n\nexport interface PayloadRenderOptions {\n clientReferenceAssets?: (metadata: { id: string }) => FigAssetResourceList;\n codec?: PayloadCodec;\n dataPartition?: DataResourceKeyInput;\n signal?: AbortSignal;\n /**\n * Decides what crosses the wire when a server render throws, mirroring the\n * HTML renderer's contract: the returned payload is authoritative. Without\n * a handler, development includes the error message and production sends\n * an empty payload.\n */\n onError?: (\n error: unknown,\n info: ServerErrorInfo,\n ) => ServerErrorPayload | undefined;\n refreshBoundary?: string;\n}\n\nexport interface PayloadRootLike {\n data?: FigDataStoreHandle;\n render(node: FigNode): void;\n}\n\n// Stream-safe asset resources only (no head-only title/meta). Optional fields\n// stay optional on the wire; omitted `undefined` values are part of the payload\n// contract, not a serializer implementation detail.\nexport type SerializedAssetResource =\n | {\n crossOrigin?: StylesheetResource[\"crossOrigin\"];\n href: string;\n kind: \"stylesheet\";\n media?: string;\n precedence?: string;\n }\n | {\n as: string;\n crossOrigin?: PreloadResource[\"crossOrigin\"];\n fetchPriority?: PreloadResource[\"fetchPriority\"];\n href: string;\n kind: \"preload\";\n type?: string;\n }\n | {\n crossOrigin?: ModulePreloadResource[\"crossOrigin\"];\n fetchPriority?: ModulePreloadResource[\"fetchPriority\"];\n href: string;\n kind: \"modulepreload\";\n }\n | {\n async?: boolean;\n crossOrigin?: ScriptResource[\"crossOrigin\"];\n defer?: boolean;\n kind: \"script\";\n module?: boolean;\n src: string;\n }\n | {\n crossOrigin?: FontResource[\"crossOrigin\"];\n fetchPriority?: FontResource[\"fetchPriority\"];\n href: string;\n kind: \"font\";\n type: string;\n }\n | {\n crossOrigin?: PreconnectResource[\"crossOrigin\"];\n href: string;\n kind: \"preconnect\";\n };\n\n/**\n * Semantic payload row before a PayloadCodec turns it into bytes. This row\n * model is the stable contract; a codec's byte layout is intentionally opaque.\n */\nexport type PayloadRow =\n | { tag: \"assets\"; value: SerializedAssetResource[] }\n | {\n id: number;\n tag: \"client\";\n value: {\n id: string;\n assets?: SerializedAssetResource[];\n exportName?: string;\n ssr?: true;\n };\n }\n | { tag: \"data\"; value: PayloadDataHydrationEntry[] }\n | { id: number; tag: \"error\"; value: ServerErrorPayload }\n | { id: number; tag: \"model\"; value: PayloadModel }\n | { boundary: string; tag: \"refresh-error\"; value: ServerErrorPayload }\n | { boundary: string; tag: \"refresh\"; value: PayloadModel };\n\n/**\n * Transport-safe model value used inside payload rows. The shape is public so\n * custom codecs and framework integrations can encode/decode rows, but callers\n * should not treat the exact tagged representation as an app data format.\n */\nexport type PayloadModel =\n | null\n | boolean\n | number\n | string\n | PayloadModel[]\n | { [key: string]: PayloadModel }\n | PayloadElementModel\n | PayloadSpecialModel;\n\ntype PayloadElementModel = {\n $fig: \"element\";\n id?: number;\n key: Key | null;\n props: PayloadModel;\n type: string | PayloadSpecialModel;\n};\n\ntype PayloadSpecialModel =\n | { $fig: \"array\"; id: number; value: PayloadModel[] }\n | { $fig: \"boundary\"; child: PayloadModel; id: string }\n | { $fig: \"bigint\"; value: string }\n | { $fig: \"client\"; id: number }\n | { $fig: \"date\"; value: string }\n | { $fig: \"fragment\" }\n | { $fig: \"lazy\"; id: number }\n | { $fig: \"map\"; entries: Array<[PayloadModel, PayloadModel]>; id: number }\n | { $fig: \"number\"; value: \"Infinity\" | \"-Infinity\" | \"-0\" | \"NaN\" }\n | { $fig: \"object\"; id?: number; value: Record<string, PayloadModel> }\n | { $fig: \"promise\"; id: number }\n | { $fig: \"ref\"; id: number }\n | { $fig: \"set\"; id: number; values: PayloadModel[] }\n | { $fig: \"symbol\"; key: string }\n | { $fig: \"suspense\" }\n | { $fig: \"undefined\" }\n | { $fig: \"view-transition\" };\n\ntype PayloadValueSpecialModel = Extract<\n PayloadSpecialModel,\n {\n $fig:\n | \"array\"\n | \"bigint\"\n | \"date\"\n | \"map\"\n | \"number\"\n | \"object\"\n | \"ref\"\n | \"set\"\n | \"symbol\"\n | \"undefined\";\n }\n>;\n\nexport type PayloadDataHydrationEntry = Omit<FigDataHydrationEntry, \"value\"> & {\n value: PayloadModel;\n};\n\nexport interface PayloadClientReferenceMetadata {\n // Opaque unique key for loading and dedupe. Fig's bundler tooling authors\n // ids as \"<module specifier>#<export>\", but only the server ever splits\n // that convention — it derives exportName once at serialization, so\n // loaders and the client treat id as a black box.\n id: string;\n exportName?: string;\n ssr?: boolean;\n}\n\nexport interface PayloadClientReferenceRecord extends PayloadClientReferenceMetadata {\n assets?: readonly FigAssetResource[];\n}\n\nexport interface PayloadResponseOptions {\n codec?: PayloadCodec;\n loadClientReference?: (\n metadata: PayloadClientReferenceMetadata,\n ) => Promise<unknown>;\n resolveClientReference?: (\n metadata: PayloadClientReferenceMetadata,\n ) => ElementType<any> | undefined;\n}\n\nexport interface PayloadResponse {\n bindRoot(root: PayloadRootLike): () => void;\n readonly codec: PayloadCodec;\n getAssetResources(): readonly FigAssetResource[];\n getClientReferences(): readonly PayloadClientReferenceRecord[];\n getRoot(): FigNode;\n preloadClientReferences(): Promise<void>;\n processBytesChunk(chunk: Uint8Array): void;\n processStream(\n stream: ReadableStream<Uint8Array>,\n signal?: AbortSignal | null,\n ): Promise<void>;\n processStringChunk(chunk: string): void;\n // Resolves when the root row (id 0) of the initial payload has been\n // decoded. Never rejects; race with a timeout or the processing promise\n // for streams that may end without a root.\n readonly rootReady: Promise<void>;\n subscribe(listener: () => void): () => void;\n}\n\nexport type PayloadFetch = (\n input: RequestInfo | URL,\n init?: RequestInit,\n) => Promise<Response>;\n\nexport interface PayloadFetchOptions extends RequestInit {\n fetch?: PayloadFetch;\n refreshBoundary?: string;\n}\n\nexport interface PayloadCodec {\n /**\n * Opaque implementation id, e.g. \"json\" or \"binary\". Fig checks this id at\n * transport boundaries; the encoded byte layout is not a public contract.\n */\n readonly id: string;\n readonly contentType: string;\n /**\n * Creates a streaming row decoder. The decoder calls `onRow` for each\n * complete semantic row. If `onRow` throws, the decoder must propagate that\n * error; when it can already see more complete sibling rows in the same\n * input chunk, it should process those siblings before rethrowing so\n * notifications already implied by earlier rows are not lost.\n */\n createDecoder(onRow: (row: PayloadRow) => void): PayloadDecoder;\n encodeRow(row: PayloadRow): Uint8Array;\n}\n\nexport interface PayloadDecoder {\n decode(chunk: Uint8Array): void;\n flush(): void;\n}\n\nexport const PAYLOAD_BOUNDARY_HEADER = \"x-fig-payload-boundary\";\n\nclass PayloadRequestCancelledError extends Error {\n constructor() {\n super(\"Payload request cancelled.\");\n this.name = \"PayloadRequestCancelledError\";\n }\n}\n\nexport class PayloadFetchError extends Error {\n readonly response: Response;\n readonly status: number;\n\n constructor(response: Response) {\n super(`Payload request failed with status ${response.status}.`);\n this.name = \"PayloadFetchError\";\n this.response = response;\n this.status = response.status;\n }\n}\n\ntype PayloadRequest = {\n abortListener: (() => void) | null;\n abortSignal: AbortSignal | null;\n allReady: Deferred<void>;\n boundaryIds: Set<string> | null;\n clientReferenceRows: Map<string, number>;\n clientReferenceAssets?: (metadata: { id: string }) => FigAssetResourceList;\n codec: PayloadCodec;\n controller: ReadableStreamDefaultController<Uint8Array> | null;\n dataStore: DataStore<object, null>;\n emittedAssetKeys: Set<string>;\n emittedDataKeys: Set<string>;\n graph: PayloadGraphEncodeContext;\n nextRowId: number;\n nextUseId: number;\n onError: PayloadRenderOptions[\"onError\"];\n pendingDataSnapshots: Map<string, DataStoreEntrySnapshot>;\n pendingTasks: number;\n pingedTasks: Task[];\n queuedRows: Uint8Array[];\n refreshBoundary: string | null;\n status: \"opening\" | \"open\" | \"closed\";\n stream: ReadableStream<Uint8Array>;\n workScheduled: boolean;\n};\n\ntype Task = {\n contextValues: ContextValues;\n id: number;\n kind: \"node\" | \"promise\";\n stack: StackFrame | null;\n value: unknown;\n};\n\ntype Component = (props: Props & { children?: FigNode }) => unknown;\n\ntype RenderFrame = {\n contextValues: ContextValues;\n // Built lazily on the first function component; reused for the whole task\n // (the dispatcher reads context through the frame, so it stays current).\n dispatcher: RenderDispatcher | null;\n request: PayloadRequest;\n stack: StackFrame | null;\n};\n\ninterface PayloadGraphEncodeContext {\n ids: WeakMap<object, number>;\n nextId: number;\n objects: Map<number, object>;\n}\n\ninterface PayloadGraphDecodeContext {\n refs: Map<number, unknown>;\n}\n\ninterface PayloadObjectRef {\n value: unknown;\n}\n\ninterface BoundaryModelEntry {\n id?: string;\n model: PayloadModel;\n revision: number;\n source?: \"initial\" | \"refresh\";\n}\n\ninterface StackFrame {\n name: string;\n parent: StackFrame | null;\n}\n\ntype DecodedChunk = {\n decoded: unknown;\n hasDecoded: boolean;\n model: PayloadModel | null;\n promise: Promise<unknown>;\n reject(reason: unknown): void;\n resolve(value: unknown): void;\n revision: number;\n status: \"pending\" | \"fulfilled\" | \"rejected\";\n value: unknown;\n};\n\nconst textEncoder = new TextEncoder();\nconst PayloadBoundarySymbol = Symbol.for(\"fig.payload-boundary\");\nconst errorStacks = new WeakMap<object, StackFrame>();\nconst childrenTreeProps = new Set([\"children\"]);\nconst emptyTreeProps = new Set<string>();\nconst suspenseTreeProps = new Set([\"children\", \"fallback\"]);\n\nfunction createPayloadGraphEncodeContext(): PayloadGraphEncodeContext {\n return { ids: new WeakMap(), nextId: 1, objects: new Map() };\n}\n\nfunction createPayloadGraphDecodeContext(): PayloadGraphDecodeContext {\n return { refs: new Map() };\n}\n\n/**\n * Readable development-oriented codec: one JSON payload row per newline.\n */\nexport const jsonPayloadCodec: PayloadCodec = {\n id: \"json\",\n contentType: \"text/x-fig-payload; codec=json; charset=utf-8\",\n createDecoder(onRow) {\n return createJsonPayloadDecoder(onRow);\n },\n encodeRow(row) {\n return textEncoder.encode(`${JSON.stringify(row)}\\n`);\n },\n};\n\nfunction createJsonPayloadDecoder(\n onRow: (row: PayloadRow) => void,\n): PayloadDecoder {\n const decoder = new TextDecoder();\n let buffer = \"\";\n let searchStart = 0;\n\n function processBufferedLines(): void {\n let lineStart = 0;\n let firstError: unknown;\n\n for (;;) {\n const newlineIndex = buffer.indexOf(\"\\n\", searchStart);\n if (newlineIndex === -1) {\n searchStart = buffer.length;\n break;\n }\n try {\n processPayloadLine(buffer.slice(lineStart, newlineIndex), onRow);\n } catch (error) {\n firstError ??= error;\n }\n lineStart = newlineIndex + 1;\n searchStart = lineStart;\n }\n\n if (firstError !== undefined) {\n buffer = \"\";\n searchStart = 0;\n throw firstError;\n }\n if (lineStart > 0) {\n buffer = buffer.slice(lineStart);\n searchStart -= lineStart;\n }\n }\n\n return {\n decode(chunk) {\n buffer += decoder.decode(chunk, { stream: true });\n processBufferedLines();\n },\n flush() {\n buffer += decoder.decode();\n if (buffer.length > 0) {\n const line = buffer;\n buffer = \"\";\n searchStart = 0;\n processPayloadLine(line, onRow);\n }\n },\n };\n}\n\nfunction processPayloadLine(\n line: string,\n onRow: (row: PayloadRow) => void,\n): void {\n if (line.length > 0) onRow(JSON.parse(line) as PayloadRow);\n}\n\nfunction payloadCodecIdFromContentType(\n contentTypeHeader: string,\n): string | null {\n const parts = contentTypeHeader.split(\";\").slice(1);\n for (const part of parts) {\n const [name, rawValue] = part.split(\"=\");\n if (name?.trim().toLowerCase() !== \"codec\") continue;\n const value = rawValue?.trim();\n if (value === undefined || value.length === 0) return null;\n return value.replace(/^\"|\"$/g, \"\");\n }\n return null;\n}\n\ntype PayloadBoundaryProps = { children?: FigNode; id: string };\n\nexport const PayloadBoundary: {\n (props: PayloadBoundaryProps): FigNode;\n readonly $$typeof: symbol;\n} = Object.assign((props: PayloadBoundaryProps) => props.children, {\n $$typeof: PayloadBoundarySymbol,\n});\n\nexport function renderToPayloadStream(\n node: FigNode,\n options: PayloadRenderOptions = {},\n): PayloadRenderResult {\n const request = createPayloadRequest(node, options);\n return {\n abort: (reason?: unknown) => abortPayloadRequest(request, reason),\n allReady: request.allReady.promise,\n contentType: request.codec.contentType,\n stream: request.stream,\n };\n}\n\nexport function createPayloadResponse(\n options: PayloadResponseOptions = {},\n): PayloadResponse {\n return new PayloadResponseImpl(options);\n}\n\nasync function processPayloadStream(\n response: PayloadResponse,\n stream: ReadableStream<Uint8Array>,\n signal?: AbortSignal | null,\n): Promise<void> {\n await response.processStream(stream, signal);\n}\n\nexport function isPayloadRequestCancelled(error: unknown): boolean {\n return (\n error instanceof PayloadRequestCancelledError ||\n (typeof DOMException !== \"undefined\" &&\n error instanceof DOMException &&\n error.name === \"AbortError\")\n );\n}\n\nexport async function fetchPayload(\n response: PayloadResponse,\n input: RequestInfo | URL,\n options: PayloadFetchOptions = {},\n): Promise<Response> {\n const {\n fetch: fetchImpl = globalThis.fetch,\n headers,\n refreshBoundary,\n signal,\n ...init\n } = options;\n if (fetchImpl === undefined) {\n throw new Error(\"fetchPayload requires a fetch implementation.\");\n }\n throwIfAborted(signal);\n\n const result = await fetchImpl(input, {\n ...init,\n headers: appendPayloadHeaders(response.codec, headers, refreshBoundary),\n signal,\n });\n throwIfAborted(signal);\n if (!result.ok) {\n await result.body?.cancel().catch(() => undefined);\n throw new PayloadFetchError(result);\n }\n if (result.body === null) {\n throw new Error(\"Payload response did not include a body.\");\n }\n assertPayloadCodecMatches(response.codec, result.headers.get(\"content-type\"));\n\n // A refresh reuses this response's chunks Map but its row ids restart at 1 on\n // the server; namespace them past existing chunks before decoding the stream.\n if (refreshBoundary !== undefined) {\n (response as PayloadResponseImpl).beginRefreshPayload();\n }\n\n await processPayloadStream(response, result.body, signal);\n return result;\n}\n\nfunction createPayloadRequest(\n node: FigNode,\n options: PayloadRenderOptions,\n): PayloadRequest {\n throwIfAborted(options.signal);\n\n const pendingDataSnapshots = new Map<string, DataStoreEntrySnapshot>();\n const request: PayloadRequest = {\n abortListener: null,\n abortSignal: null,\n allReady: deferred<void>(),\n boundaryIds: __DEV__ ? new Set() : null,\n clientReferenceRows: new Map(),\n clientReferenceAssets: options.clientReferenceAssets,\n codec: options.codec ?? jsonPayloadCodec,\n controller: null,\n dataStore: createDataStore<object, null>({\n getLane: () => null,\n onEntryChange: (entry: DataStoreEntrySnapshot) => {\n pendingDataSnapshots.set(entry.canonicalKey, entry);\n },\n partition: options.dataPartition,\n schedule: () => undefined,\n }),\n emittedAssetKeys: new Set(),\n emittedDataKeys: new Set(),\n graph: createPayloadGraphEncodeContext(),\n nextRowId: 1,\n nextUseId: 0,\n onError: options.onError,\n pendingDataSnapshots,\n pendingTasks: 0,\n pingedTasks: [],\n queuedRows: [],\n refreshBoundary: options.refreshBoundary ?? null,\n status: \"opening\",\n stream: null as never,\n workScheduled: false,\n };\n // allReady also rejects through the stream when a consumer cancels (the\n // normal client-disconnect path); the pre-attached no-op handler keeps it\n // from becoming an unhandled rejection for callers that do not await it\n // (await-ers still observe the rejection).\n void request.allReady.promise.catch(() => undefined);\n\n const stream = new ReadableStream<Uint8Array>({\n start(controller) {\n request.controller = controller;\n flushRows(request);\n },\n cancel(reason) {\n abortPayloadRequest(request, reason);\n },\n });\n request.stream = stream;\n\n if (options.signal !== undefined) {\n const abortListener = () =>\n abortPayloadRequest(request, options.signal?.reason);\n request.abortListener = abortListener;\n request.abortSignal = options.signal;\n options.signal.addEventListener(\"abort\", abortListener, { once: true });\n }\n\n request.pingedTasks.push(\n createTask(request, 0, \"node\", node, new Map(), null),\n );\n\n request.workScheduled = true;\n queueMicrotask(() => {\n request.workScheduled = false;\n performWork(request);\n });\n\n return request;\n}\n\ninterface PayloadClientReferenceEntry {\n component?: ElementType;\n load: Promise<unknown>;\n}\n\nclass PayloadResponseImpl implements PayloadResponse {\n private readonly assetResources = new Map<string, FigAssetResource>();\n private readonly boundaries = new Map<string, BoundaryModelEntry>();\n private readonly decodedBoundaries = new Map<string, FigNode>();\n private readonly initialBoundaries = new Map<string, BoundaryModelEntry>();\n private readonly clientReferences = new Map<\n string,\n PayloadClientReferenceRecord\n >();\n private readonly chunks = new Map<number, DecodedChunk>();\n // One entry per loader-backed reference id: stable component identity keeps\n // island state across re-decodes, and each load is registered with\n // trackThenable at creation, so a reference whose module settled before its\n // first render read resolves synchronously instead of suspending.\n private readonly clientReferenceEntries = new Map<\n string,\n PayloadClientReferenceEntry\n >();\n private readonly resolvedClientReferenceComponents = new Map<\n string,\n ElementType\n >();\n private listeners = new Set<() => void>();\n private resolveRootReady: () => void = () => undefined;\n readonly rootReady: Promise<void> = new Promise((resolve) => {\n this.resolveRootReady = resolve;\n });\n private maxRowId = 0;\n private maxObjectId = 0;\n private objectIdBase = 0;\n private readonly objectRefs = new Map<number, PayloadObjectRef>();\n private pendingData: FigDataHydrationEntry[] = [];\n private rootData: FigDataStoreHandle | null = null;\n private rowIdBase = 0;\n private currentDecodeRevision = 0;\n private stringDecoder: PayloadDecoder;\n private nextModelRevision = 1;\n private maxObjectIdScanDirty = false;\n readonly codec: PayloadCodec;\n\n constructor(private readonly options: PayloadResponseOptions) {\n this.codec = options.codec ?? jsonPayloadCodec;\n this.stringDecoder = this.createDecoder(this.rowIdBase, this.objectIdBase);\n }\n\n beginRefreshPayload(): void {\n // Refresh payloads restart their row ids at 1 on the server, but every\n // payload shares one chunks Map here. Offset an incoming refresh payload's\n // ids past every id seen so far so its outlined client/lazy/promise rows\n // cannot collide with — and clobber — still-mounted chunks from the initial\n // (or an earlier refresh) payload.\n this.ensureMaxObjectIdScanned();\n this.rowIdBase = this.maxRowId;\n this.objectIdBase = this.maxObjectId;\n this.stringDecoder = this.createDecoder(this.rowIdBase, this.objectIdBase);\n }\n\n private resetPayloadDecoder(): void {\n this.rowIdBase = 0;\n this.objectIdBase = 0;\n this.stringDecoder = this.createDecoder(this.rowIdBase, this.objectIdBase);\n }\n\n getAssetResources(): readonly FigAssetResource[] {\n return [...this.assetResources.values()];\n }\n\n getClientReferences(): readonly PayloadClientReferenceRecord[] {\n return [...this.clientReferences.values()];\n }\n\n recordAssetResources(\n assets: readonly SerializedAssetResource[] | undefined,\n ): void {\n if (assets === undefined) return;\n\n // Dedupe per payload by resource key: a shared asset referenced by several\n // client references is recorded once.\n for (const resource of assets) {\n if (\n !isFigAssetResource(resource) ||\n assetResourceDestination(resource) !== \"stream\"\n ) {\n continue;\n }\n const key = assetResourceKey(resource);\n if (!this.assetResources.has(key)) this.assetResources.set(key, resource);\n }\n }\n\n recordClientReference(\n value: Extract<PayloadRow, { tag: \"client\" }>[\"value\"],\n ): void {\n if (this.clientReferences.has(value.id)) return;\n const reference: PayloadClientReferenceRecord = { id: value.id };\n const assets = value.assets?.filter(isFigAssetResource);\n if (assets !== undefined) reference.assets = assets;\n if (value.exportName !== undefined) reference.exportName = value.exportName;\n if (value.ssr === true) reference.ssr = true;\n this.clientReferences.set(value.id, reference);\n\n // Start the module import as soon as the reference row arrives so it\n // overlaps the rest of the stream (and any asset gates) instead of\n // serializing behind them.\n const load = this.options.loadClientReference;\n if (load !== undefined) {\n const metadata = clientRowMetadata(value);\n if (this.options.resolveClientReference?.(metadata) === undefined) {\n this.clientReferenceEntry(metadata, load);\n }\n }\n }\n\n bindRoot(root: PayloadRootLike): () => void {\n this.rootData = root.data ?? null;\n this.hydratePendingData();\n const render = () => root.render(this.getRoot());\n const unsubscribe = this.subscribe(render);\n render();\n return unsubscribe;\n }\n\n getRoot(): FigNode {\n return createElement(PayloadResponseRoot, {\n response: this,\n });\n }\n\n private createDecoder(\n rowIdBase: number,\n objectIdBase: number,\n ): PayloadDecoder {\n return this.codec.createDecoder((row) =>\n this.processRow(row, rowIdBase, objectIdBase),\n );\n }\n\n private processRow(\n row: PayloadRow,\n rowIdBase: number,\n objectIdBase: number,\n ): void {\n if (rowIdBase > 0 || objectIdBase > 0) {\n shiftRowIds(row, rowIdBase, objectIdBase);\n }\n this.markMaxObjectIdScanDirty(row);\n\n if (row.tag === \"data\") {\n this.pendingData.push(...decodePayloadDataEntries(row.value));\n this.hydratePendingData();\n return;\n }\n\n if (row.tag === \"assets\") {\n this.recordAssetResources(row.value);\n this.notify();\n return;\n }\n\n if (row.tag === \"refresh\") {\n const revision = this.claimModelRevision();\n this.boundaries.set(row.boundary, { model: row.value, revision });\n this.invalidateDecodeCachesForBoundary(row.boundary);\n this.decodedBoundaries.set(\n row.boundary,\n this.decodeModelAtRevision(row.value, revision) as FigNode,\n );\n const activeBoundaries = this.refreshRetainedChunks();\n this.pruneObjectRefs(activeBoundaries);\n this.notify();\n return;\n }\n\n if (row.tag === \"refresh-error\") {\n this.notify();\n throw errorFromPayload(row.value);\n }\n\n const revision = row.tag === \"model\" ? this.claimModelRevision() : 0;\n resolveDecodedRow(this, row, revision);\n if (row.id === 0) {\n if (row.tag === \"model\") {\n const activeBoundaries = this.refreshRetainedChunks();\n this.pruneObjectRefs(activeBoundaries);\n }\n this.resolveRootReady();\n this.notify();\n }\n }\n\n async processStream(\n stream: ReadableStream<Uint8Array>,\n signal?: AbortSignal | null,\n ): Promise<void> {\n const decoder = this.createDecoder(this.rowIdBase, this.objectIdBase);\n try {\n await readByteStream(stream, (chunk) => decoder.decode(chunk), signal);\n decoder.flush();\n } finally {\n this.resetPayloadDecoder();\n }\n }\n\n processBytesChunk(chunk: Uint8Array): void {\n this.stringDecoder.decode(chunk);\n }\n\n processStringChunk(chunk: string): void {\n this.processBytesChunk(textEncoder.encode(chunk));\n }\n\n subscribe(listener: () => void): () => void {\n this.listeners.add(listener);\n return () => {\n this.listeners.delete(listener);\n };\n }\n\n private invalidateDecodeCachesForBoundary(id: string): void {\n for (const boundaryId of this.decodedBoundaries.keys()) {\n const entry = this.currentBoundaryEntry(boundaryId);\n if (\n boundaryId === id ||\n (entry !== undefined && this.modelCanReachBoundary(entry.model, id))\n ) {\n this.decodedBoundaries.delete(boundaryId);\n }\n }\n\n for (const chunk of this.chunks.values()) {\n if (chunk.model !== null && this.modelCanReachBoundary(chunk.model, id)) {\n chunk.decoded = undefined;\n chunk.hasDecoded = false;\n }\n }\n }\n\n defineObjectRef<T>(id: number, create: () => T, fill: (value: T) => void): T {\n const existing = this.objectRefs.get(id);\n if (existing !== undefined) return existing.value as T;\n\n const value = create();\n this.objectRefs.set(id, { value });\n if (id > this.maxObjectId) this.maxObjectId = id;\n try {\n fill(value);\n return value;\n } catch (error) {\n this.objectRefs.delete(id);\n throw error;\n }\n }\n\n readObjectRef(id: number): unknown {\n const ref = this.objectRefs.get(id);\n if (ref === undefined) {\n throw new Error(`Payload referenced unknown object id ${id}.`);\n }\n return ref.value;\n }\n\n noteObjectId(id: number): void {\n if (id > this.maxObjectId) this.maxObjectId = id;\n }\n\n prepareBoundaryInitial(id: string, initial: PayloadModel): void {\n const revision = this.currentDecodeRevision;\n const previous = this.initialBoundaries.get(id);\n this.initialBoundaries.set(id, { model: initial, revision });\n if (this.currentBoundaryEntry(id)?.model !== initial) return;\n if (\n previous?.model === initial &&\n previous.revision === revision &&\n this.decodedBoundaries.has(id)\n ) {\n return;\n }\n\n const decoded = this.decodeModelAtRevision(initial, revision) as FigNode;\n this.decodedBoundaries.set(id, decoded);\n }\n\n pruneObjectRefs(activeBoundaries = this.activeBoundaryEntries()): void {\n if (\n [...this.chunks.entries()].some(\n ([id, chunk]) => id !== 0 && chunk.status === \"pending\",\n )\n ) {\n return;\n }\n\n const retained = new Set<number>();\n // Chunks are the graph-object lifetime boundary: refreshRetainedChunks\n // removes dead chunks from this map, so scanning remaining models preserves\n // exactly the graph ids reachable from live payload content.\n for (const chunk of this.chunks.values()) {\n if (chunk.model !== null) collectObjectIds(chunk.model, retained);\n }\n for (const entry of activeBoundaries) {\n collectObjectIds(entry.model, retained);\n }\n for (const id of this.objectRefs.keys()) {\n if (!retained.has(id)) this.objectRefs.delete(id);\n }\n }\n\n readBoundary(id: string, initial: PayloadModel): FigNode {\n let decoded = this.decodedBoundaries.get(id);\n if (decoded === undefined) {\n const entry = this.currentBoundaryEntry(id);\n const model = entry?.model ?? initial;\n const revision = entry?.revision ?? this.currentDecodeRevision;\n decoded = this.decodeModelAtRevision(model, revision) as FigNode;\n this.decodedBoundaries.set(id, decoded);\n }\n return decoded;\n }\n\n readChunk(id: number): FigNode {\n const chunk = this.getChunk(id);\n if (chunk.status === \"rejected\") throw chunk.value;\n if (chunk.status === \"pending\") readPromise(chunk.promise);\n if (chunk.model === null) return chunk.value as FigNode;\n // Decoded trees are cached per chunk: models are immutable once resolved,\n // and stable element identities let the client reconciler bail out of\n // unchanged subtrees instead of re-rendering the whole payload on every\n // notify.\n if (!chunk.hasDecoded) {\n chunk.decoded = this.decodeModelAtRevision(chunk.model, chunk.revision);\n chunk.hasDecoded = true;\n }\n return chunk.decoded as FigNode;\n }\n\n decodeClientReference(metadata: PayloadClientReferenceMetadata): ElementType {\n const resolvedCached = this.resolvedClientReferenceComponents.get(\n metadata.id,\n );\n if (resolvedCached !== undefined) return resolvedCached;\n\n const cached = this.clientReferenceEntries.get(metadata.id)?.component;\n if (cached !== undefined) return cached;\n\n const resolved = this.options.resolveClientReference?.(metadata);\n if (resolved !== undefined) {\n const component = function PayloadResolvedClientComponent(props: Props) {\n return createElement(resolved, props);\n };\n this.resolvedClientReferenceComponents.set(metadata.id, component);\n return component;\n }\n\n const load = this.options.loadClientReference;\n if (load !== undefined) {\n const entry = this.clientReferenceEntry(metadata, load);\n let type: ElementType | null = null;\n\n entry.component = function PayloadClientComponent(props: Props) {\n if (type === null) {\n type = resolveClientReferenceExport(\n readPromise(entry.load),\n metadata,\n );\n }\n return createElement(type, props);\n };\n return entry.component;\n }\n\n if (this.options.resolveClientReference !== undefined) {\n return clientReference({\n id: metadata.id,\n load: () => Promise.resolve({}),\n });\n }\n\n return function PayloadUnresolvedClientComponent(): never {\n throw new Error(\n `Cannot render client reference \"${metadata.id}\" because createPayloadResponse was not configured with loadClientReference or a matching resolveClientReference.`,\n );\n };\n }\n\n // Loads start when reference rows are recorded; awaiting this before\n // revealing a navigated payload lets its islands render synchronously.\n // Load failures resolve anyway and surface when the component reads the\n // rejected promise.\n preloadClientReferences(): Promise<void> {\n const loads = [...this.clientReferenceEntries.values()].map(\n (entry) => entry.load,\n );\n return Promise.allSettled(loads).then(() => undefined);\n }\n\n private clientReferenceEntry(\n metadata: PayloadClientReferenceMetadata,\n load: (metadata: PayloadClientReferenceMetadata) => Promise<unknown>,\n ): PayloadClientReferenceEntry {\n let entry = this.clientReferenceEntries.get(metadata.id);\n if (entry === undefined) {\n entry = { load: load(metadata) };\n this.clientReferenceEntries.set(metadata.id, entry);\n // Track immediately: once the module settles, the first render read\n // resolves synchronously instead of suspending for a retry beat.\n trackThenable(entry.load);\n }\n return entry;\n }\n\n private refreshRetainedChunks(): BoundaryModelEntry[] {\n const rootModel = this.chunks.get(0)?.model;\n if (rootModel === undefined || rootModel === null) return [];\n\n const nextRetained = referencedChunkClosure(rootModel, this.chunks);\n const activeBoundaries = this.activeBoundaryEntries();\n for (const entry of activeBoundaries) {\n addChunkRefs(\n nextRetained,\n referencedChunkClosure(entry.model, this.chunks),\n );\n }\n\n const hasPendingChunks = [...this.chunks.entries()].some(\n ([id, chunk]) => id !== 0 && chunk.status === \"pending\",\n );\n if (!hasPendingChunks) {\n for (const id of this.chunks.keys()) {\n if (id !== 0 && !nextRetained.has(id)) this.chunks.delete(id);\n }\n }\n\n const activeSources = new Map(\n activeBoundaries.map((entry) => [entry.id, entry.source]),\n );\n for (const id of this.boundaries.keys()) {\n if (activeSources.get(id) !== \"refresh\") this.boundaries.delete(id);\n }\n for (const id of this.initialBoundaries.keys()) {\n if (activeSources.get(id) !== \"initial\") {\n this.initialBoundaries.delete(id);\n }\n }\n for (const id of this.decodedBoundaries.keys()) {\n if (!activeSources.has(id)) this.decodedBoundaries.delete(id);\n }\n return activeBoundaries;\n }\n\n private markMaxObjectIdScanDirty(row: PayloadRow): void {\n if (row.tag === \"model\" || row.tag === \"refresh\") {\n this.maxObjectIdScanDirty = true;\n }\n }\n\n private ensureMaxObjectIdScanned(): void {\n if (!this.maxObjectIdScanDirty) return;\n this.maxObjectIdScanDirty = false;\n\n for (const chunk of this.chunks.values()) {\n if (chunk.model !== null) noteMaxObjectIds(this, chunk.model);\n }\n for (const entry of this.boundaries.values()) {\n noteMaxObjectIds(this, entry.model);\n }\n for (const entry of this.initialBoundaries.values()) {\n noteMaxObjectIds(this, entry.model);\n }\n }\n\n private modelCanReachBoundary(model: PayloadModel, id: string): boolean {\n const models: PayloadModel[] = [model];\n const visitedBoundaries = new Set<string>();\n const visitedChunks = new Set<number>();\n\n for (let index = 0; index < models.length; index += 1) {\n const current = models[index];\n if (current === undefined) continue;\n\n const boundaryIds = new Set<string>();\n collectBoundaryIds(current, boundaryIds);\n if (boundaryIds.has(id)) return true;\n\n for (const boundaryId of boundaryIds) {\n if (visitedBoundaries.has(boundaryId)) continue;\n visitedBoundaries.add(boundaryId);\n const entry = this.currentBoundaryEntry(boundaryId);\n if (entry !== undefined) models.push(entry.model);\n }\n\n const chunkIds = new Set<number>();\n collectReferencedChunkIds(current, chunkIds);\n for (const chunkId of chunkIds) {\n if (visitedChunks.has(chunkId)) continue;\n visitedChunks.add(chunkId);\n const chunk = this.chunks.get(chunkId);\n if (chunk?.model !== null && chunk?.model !== undefined) {\n models.push(chunk.model);\n }\n }\n }\n\n return false;\n }\n\n private activeBoundaryEntries(): BoundaryModelEntry[] {\n const rootModel = this.chunks.get(0)?.model;\n if (rootModel === undefined || rootModel === null) return [];\n\n const active = new Set<string>();\n const visitedChunks = new Set<number>();\n const models: PayloadModel[] = [rootModel];\n const entries: BoundaryModelEntry[] = [];\n\n for (let index = 0; index < models.length; index += 1) {\n const chunkIds = new Set<number>();\n collectReferencedChunkIds(models[index] as PayloadModel, chunkIds);\n for (const id of chunkIds) {\n if (visitedChunks.has(id)) continue;\n visitedChunks.add(id);\n const chunk = this.chunks.get(id);\n if (chunk?.model !== null && chunk?.model !== undefined) {\n models.push(chunk.model);\n }\n }\n\n const ids = new Set<string>();\n collectBoundaryIds(models[index] as PayloadModel, ids);\n for (const id of ids) {\n if (active.has(id)) continue;\n active.add(id);\n const entry = this.currentBoundaryEntry(id);\n if (entry === undefined) continue;\n entries.push({ ...entry, id });\n models.push(entry.model);\n }\n }\n\n return entries;\n }\n\n private currentBoundaryEntry(id: string): BoundaryModelEntry | undefined {\n const refreshed = this.boundaries.get(id);\n const initial = this.initialBoundaries.get(id);\n if (refreshed === undefined) {\n return initial === undefined\n ? undefined\n : { ...initial, source: \"initial\" };\n }\n if (initial === undefined) return { ...refreshed, source: \"refresh\" };\n return initial.revision > refreshed.revision\n ? { ...initial, source: \"initial\" }\n : { ...refreshed, source: \"refresh\" };\n }\n\n private claimModelRevision(): number {\n const revision = this.nextModelRevision;\n this.nextModelRevision += 1;\n return revision;\n }\n\n decodeModelAtRevision(model: PayloadModel, revision: number): unknown {\n const previous = this.currentDecodeRevision;\n this.currentDecodeRevision = revision;\n try {\n return decodeModel(this, model);\n } finally {\n this.currentDecodeRevision = previous;\n }\n }\n\n getChunk(id: number): DecodedChunk {\n if (id > this.maxRowId) this.maxRowId = id;\n return getOrCreateChunk(this.chunks, id);\n }\n\n private notify(): void {\n for (const listener of this.listeners) listener();\n }\n\n private hydratePendingData(): void {\n if (this.rootData === null || this.pendingData.length === 0) return;\n\n const entries = this.pendingData;\n this.pendingData = [];\n this.rootData.hydrate(entries);\n }\n}\n\nfunction createTask(\n request: PayloadRequest,\n id: number,\n kind: Task[\"kind\"],\n value: unknown,\n contextValues: ContextValues,\n stack: StackFrame | null,\n): Task {\n request.pendingTasks += 1;\n return { contextValues, id, kind, stack, value };\n}\n\nfunction performWork(request: PayloadRequest): void {\n if (request.status === \"closed\") return;\n if (request.status === \"opening\") request.status = \"open\";\n\n const tasks = request.pingedTasks;\n request.pingedTasks = [];\n\n for (const task of tasks) retryTask(request, task);\n\n flushRows(request);\n}\n\nfunction retryTask(request: PayloadRequest, task: Task): void {\n const frame = createRenderFrame(\n request,\n cloneContextValues(task.contextValues),\n task.stack,\n );\n\n try {\n const value =\n task.kind === \"node\"\n ? serializeNode(task.value as FigNode, frame)\n : serializeValue(readThenable(task.value as Thenable), frame);\n emitDataRows(request);\n if (request.refreshBoundary !== null && task.id === 0) {\n emitRow(request, {\n boundary: request.refreshBoundary,\n tag: \"refresh\",\n value,\n });\n } else {\n emitRow(request, { id: task.id, tag: \"model\", value });\n }\n finishTask(request);\n } catch (error) {\n if (isThenable(error)) {\n error.then(\n () => pingTask(request, task),\n () => pingTask(request, task),\n );\n return;\n }\n\n if (request.refreshBoundary !== null && task.id === 0) {\n emitRow(request, {\n boundary: request.refreshBoundary,\n tag: \"refresh-error\",\n value: errorRowPayload(request, error, task.stack),\n });\n } else {\n emitRow(request, {\n id: task.id,\n tag: \"error\",\n value: errorRowPayload(request, error, task.stack),\n });\n }\n finishTask(request);\n }\n}\n\nfunction finishTask(request: PayloadRequest): void {\n request.pendingTasks -= 1;\n if (request.pendingTasks === 0) request.allReady.resolve(undefined);\n}\n\nfunction emitDataRows(request: PayloadRequest): void {\n const entries: FigDataHydrationEntry[] = [];\n\n for (const snapshot of request.pendingDataSnapshots.values()) {\n // Stream only settled values. A \"refreshing\" entry exposes a transient stale\n // value while its background refresh is in flight; emitting it would mark the\n // key emitted forever and permanently suppress the fresh value. Skipping it\n // lets the entry stream once its refresh settles.\n if (!snapshot.hasValue || snapshot.status === \"refreshing\") continue;\n\n const key = normalizeDataResourceKey(snapshot.key);\n if (request.emittedDataKeys.has(key)) {\n request.pendingDataSnapshots.delete(snapshot.canonicalKey);\n continue;\n }\n\n request.emittedDataKeys.add(key);\n request.pendingDataSnapshots.delete(snapshot.canonicalKey);\n entries.push({ key: snapshot.key, value: snapshot.value });\n }\n\n if (entries.length > 0) {\n emitRow(request, { tag: \"data\", value: encodePayloadDataEntries(entries) });\n }\n}\n\nfunction createRenderFrame(\n request: PayloadRequest,\n contextValues: ContextValues,\n stack: StackFrame | null,\n): RenderFrame {\n return { contextValues, dispatcher: null, request, stack };\n}\n\nfunction createPayloadDispatcher(frame: RenderFrame): RenderDispatcher {\n return createStaticDispatcher({\n contextValues: frame.contextValues,\n externalStoreError:\n \"useSyncExternalStore requires getServerSnapshot during payload render.\",\n readPromise: readThenable,\n readData(resource, args) {\n return frame.request.dataStore.readData(resource, args, frame);\n },\n preloadData(resource, args) {\n frame.request.dataStore.preloadData(resource, ...args);\n },\n useId() {\n const id = `fig-pl-${frame.request.nextUseId.toString(32)}`;\n frame.request.nextUseId += 1;\n return id;\n },\n updateError: \"State updates are not allowed during payload render.\",\n });\n}\n\nfunction serializeNode(node: FigNode, frame: RenderFrame): PayloadModel {\n if (Array.isArray(node)) {\n return flattenChildArrays(node).map((child) =>\n serializeNodeOrLazy(child, frame),\n );\n }\n\n if (node === null || node === undefined || typeof node === \"boolean\") {\n return node === undefined ? { $fig: \"undefined\" } : node;\n }\n\n if (typeof node === \"string\" || typeof node === \"number\") {\n return node;\n }\n\n if (isPortal(node)) return null;\n if (!isValidElement(node)) throw invalidChildError(node);\n\n return serializeElement(node, frame, false);\n}\n\nfunction serializeNodeOrLazy(\n node: FigNode,\n frame: RenderFrame,\n preserveElementIdentity = false,\n): PayloadModel {\n const graphCheckpoint = checkpointGraph(frame.request.graph);\n try {\n if (!isValidElement(node)) return serializeNode(node, frame);\n return serializeElement(node, frame, preserveElementIdentity);\n } catch (error) {\n rollbackGraph(frame.request.graph, graphCheckpoint);\n if (isThenable(error)) {\n return outlineTask(frame, \"node\", node, \"lazy\", error);\n }\n return outlineError(frame, error, \"lazy\");\n }\n}\n\nfunction serializeElement(\n element: FigElement,\n frame: RenderFrame,\n preserveIdentity: boolean,\n): PayloadModel {\n const type = element.type;\n\n if (typeof type === \"string\") {\n return serializeElementModel(\n element,\n type,\n frame,\n preserveIdentity,\n childrenTreeProps,\n );\n }\n\n if (type === Fragment) {\n return serializeElementModel(\n element,\n { $fig: \"fragment\" },\n frame,\n preserveIdentity,\n childrenTreeProps,\n );\n }\n\n if (isClientReference(type)) {\n const clientId = emitClientReference(frame.request, type);\n return serializeElementModel(\n element,\n { $fig: \"client\", id: clientId },\n frame,\n preserveIdentity,\n );\n }\n\n if (isPayloadBoundary(type)) {\n const id = element.props.id;\n if (typeof id !== \"string\" || id.length === 0) {\n throw new Error(\"Payload boundaries require a non-empty string id.\");\n }\n if (frame.request.refreshBoundary === id) {\n throw new Error(\n `Refresh payload for boundary \"${id}\" must render that boundary's replacement content, not a nested PayloadBoundary with the same id.`,\n );\n }\n if (frame.request.boundaryIds !== null) {\n if (frame.request.boundaryIds.has(id)) {\n throw new Error(`Duplicate payload boundary id \"${id}\".`);\n }\n frame.request.boundaryIds.add(id);\n }\n\n return {\n $fig: \"boundary\",\n child: serializeTreeProp(element.props.children, frame),\n id,\n };\n }\n\n if (isContext(type)) {\n return serializeContextProvider(type, element.props, frame);\n }\n\n if (isAssets(type)) {\n return serializeAssets(element.props, frame);\n }\n\n if (isSuspense(type)) {\n return serializeElementModel(\n element,\n { $fig: \"suspense\" },\n frame,\n preserveIdentity,\n suspenseTreeProps,\n );\n }\n\n if (isErrorBoundary(type)) {\n return serializeNode(element.props.children, frame);\n }\n\n if (isActivity(type)) {\n return serializeNode(element.props.children, frame);\n }\n\n if (isViewTransition(type)) {\n return serializeElementModel(\n element,\n { $fig: \"view-transition\" },\n frame,\n preserveIdentity,\n childrenTreeProps,\n );\n }\n\n if (typeof type === \"function\") {\n return serializeFunctionComponent(type as Component, element.props, frame);\n }\n\n throw new Error(\"Unsupported Fig element type during payload render.\");\n}\n\nfunction serializeElementModel(\n element: FigElement,\n type: PayloadElementModel[\"type\"],\n frame: RenderFrame,\n preserveIdentity: boolean,\n treeProps: ReadonlySet<string> = emptyTreeProps,\n): PayloadModel {\n const id = preserveIdentity\n ? defineGraphElement(frame.request.graph, element)\n : undefined;\n if (typeof id === \"object\") return id;\n return {\n $fig: \"element\",\n ...(id === undefined ? null : { id }),\n key: element.key,\n props: serializeProps(element.props, frame, treeProps),\n type,\n };\n}\n\nfunction serializeFunctionComponent(\n type: Component,\n props: Props,\n frame: RenderFrame,\n): PayloadModel {\n frame.dispatcher ??= createPayloadDispatcher(frame);\n const previousDispatcher = setCurrentDispatcher(frame.dispatcher);\n const previousDataStore = setCurrentDataStore(frame.request.dataStore);\n const previousStack = frame.stack;\n frame.stack = { name: type.name || \"Anonymous\", parent: previousStack };\n\n try {\n const result = type(props);\n const node = isThenable(result) ? readThenable(result) : result;\n return serializeNode(node as FigNode, frame);\n } catch (error) {\n recordErrorStack(error, frame.stack);\n throw error;\n } finally {\n frame.stack = previousStack;\n setCurrentDataStore(previousDataStore);\n setCurrentDispatcher(previousDispatcher);\n }\n}\n\nfunction serializeContextProvider(\n context: FigContext<unknown>,\n props: Props,\n frame: RenderFrame,\n): PayloadModel {\n return withContextValue(frame.contextValues, context, props.value, () =>\n serializeNode(props.children, frame),\n );\n}\n\nfunction serializeAssets(props: Props, frame: RenderFrame): PayloadModel {\n const serialized = serializeAssetResources(frame.request, props.assets);\n if (serialized.length > 0) {\n emitRow(frame.request, { tag: \"assets\", value: serialized });\n }\n return serializeNode(props.children, frame);\n}\n\nfunction serializeProps(\n props: Props,\n frame: RenderFrame,\n treeProps: ReadonlySet<string>,\n): PayloadModel {\n const value: Record<string, PayloadModel> = {};\n for (const [name, child] of Object.entries(props)) {\n value[name] = treeProps.has(name)\n ? serializeTreeProp(child as FigNode, frame)\n : serializeValue(child, frame);\n }\n return {\n $fig: \"object\",\n value,\n };\n}\n\nfunction serializeTreeProp(value: FigNode, frame: RenderFrame): PayloadModel {\n if (Array.isArray(value)) {\n return flattenChildArrays(value).map((child) =>\n serializeNodeOrLazy(child, frame),\n );\n }\n return serializeNodeOrLazy(value, frame);\n}\n\nfunction serializeValue(value: unknown, frame: RenderFrame): PayloadModel {\n if (isPlainPayloadValue(value)) return encodePayloadValue(value);\n\n if (typeof value === \"function\") {\n if (isClientReference(value)) {\n return { $fig: \"client\", id: emitClientReference(frame.request, value) };\n }\n\n throw new Error(\"Functions cannot be passed to client references.\");\n }\n\n if (isThenable(value)) {\n return outlineTask(frame, \"promise\", value, \"promise\", value);\n }\n if (isValidElement(value)) return serializeNodeOrLazy(value, frame, true);\n if (isPortal(value)) return null;\n\n if (typeof value === \"object\" && value !== null) {\n if (value instanceof Date) {\n return encodePayloadValueInternal(value, frame.request.graph);\n }\n if (value instanceof Map) {\n return serializeMap(value, frame.request.graph, ([key, item]) => [\n serializeValue(key, frame),\n serializeValue(item, frame),\n ]);\n }\n if (value instanceof Set) {\n return serializeSet(value, frame.request.graph, (item) =>\n serializeValue(item, frame),\n );\n }\n\n if (Array.isArray(value)) {\n return serializeArray(\n value,\n frame.request.graph,\n () => value,\n (item) => serializeValue(item, frame),\n );\n }\n\n return serializePlainObject(value, frame.request.graph, (child) =>\n serializeValue(child, frame),\n );\n }\n\n throw new Error(`Cannot serialize ${typeof value} into the payload.`);\n}\n\nfunction isPlainPayloadValue(value: unknown): boolean {\n return (\n value === null ||\n value === undefined ||\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\" ||\n typeof value === \"bigint\" ||\n typeof value === \"symbol\"\n );\n}\n\n/**\n * Encode ordinary data values into PayloadModel. Server component references\n * such as Fig elements, promises, and client references are handled by the\n * payload renderer before ordinary values reach this helper.\n */\nexport function encodePayloadValue(value: unknown): PayloadModel {\n return encodePayloadValueInternal(value, createPayloadGraphEncodeContext());\n}\n\nfunction encodePayloadValueInternal(\n value: unknown,\n graph: PayloadGraphEncodeContext,\n): PayloadModel {\n if (value === null) return null;\n if (value === undefined) return { $fig: \"undefined\" };\n\n if (typeof value === \"string\" || typeof value === \"boolean\") return value;\n if (typeof value === \"number\") return encodePayloadNumber(value);\n if (typeof value === \"bigint\") {\n return { $fig: \"bigint\", value: value.toString() };\n }\n if (typeof value === \"symbol\") {\n const key = Symbol.keyFor(value);\n if (key === undefined) {\n throw new Error(\"Only global Symbol.for symbols can be serialized.\");\n }\n return { $fig: \"symbol\", key };\n }\n if (typeof value === \"function\") {\n throw new Error(\"Functions cannot be serialized into the payload.\");\n }\n\n if (Array.isArray(value)) {\n return serializeArray(\n value,\n graph,\n () => value,\n (item) => encodePayloadValueInternal(item, graph),\n );\n }\n if (value instanceof Date) {\n const json = value.toJSON();\n if (json === null) {\n throw new Error(\"Invalid Date values cannot be serialized.\");\n }\n return { $fig: \"date\", value: json };\n }\n if (value instanceof Map) {\n return serializeMap(value, graph, ([key, item]) => [\n encodePayloadValueInternal(key, graph),\n encodePayloadValueInternal(item, graph),\n ]);\n }\n if (value instanceof Set) {\n return serializeSet(value, graph, (item) =>\n encodePayloadValueInternal(item, graph),\n );\n }\n\n if (typeof value === \"object\" && value !== null) {\n return serializePlainObject(value, graph, (child) =>\n encodePayloadValueInternal(child, graph),\n );\n }\n\n throw new Error(`Cannot serialize ${typeof value} into the payload.`);\n}\n\nfunction serializeMap(\n value: Map<unknown, unknown>,\n graph: PayloadGraphEncodeContext,\n encodeEntry: (entry: [unknown, unknown]) => [PayloadModel, PayloadModel],\n): PayloadModel {\n const existing = graphReference(graph, value);\n if (existing !== null) return existing;\n const id = defineGraphObject(graph, value);\n return {\n $fig: \"map\",\n id,\n entries: [...value.entries()].map(encodeEntry),\n };\n}\n\nfunction serializeSet(\n value: Set<unknown>,\n graph: PayloadGraphEncodeContext,\n encodeItem: (value: unknown) => PayloadModel,\n): PayloadModel {\n const existing = graphReference(graph, value);\n if (existing !== null) return existing;\n const id = defineGraphObject(graph, value);\n return {\n $fig: \"set\",\n id,\n values: [...value.values()].map(encodeItem),\n };\n}\n\nfunction graphReference(\n graph: PayloadGraphEncodeContext,\n value: object,\n): PayloadSpecialModel | null {\n const id = graph.ids.get(value);\n return id === undefined ? null : { $fig: \"ref\", id };\n}\n\nfunction defineGraphObject(\n graph: PayloadGraphEncodeContext,\n value: object,\n): number {\n const id = graph.nextId;\n graph.nextId += 1;\n graph.ids.set(value, id);\n graph.objects.set(id, value);\n return id;\n}\n\nfunction checkpointGraph(graph: PayloadGraphEncodeContext): number {\n return graph.nextId;\n}\n\nfunction rollbackGraph(\n graph: PayloadGraphEncodeContext,\n checkpoint: number,\n): void {\n for (let id = graph.nextId - 1; id >= checkpoint; id -= 1) {\n const value = graph.objects.get(id);\n if (value !== undefined) graph.ids.delete(value);\n graph.objects.delete(id);\n }\n graph.nextId = checkpoint;\n}\n\nfunction defineGraphElement(\n graph: PayloadGraphEncodeContext,\n value: FigElement,\n): number | PayloadSpecialModel {\n const existing = graphReference(graph, value);\n if (existing !== null) return existing;\n return defineGraphObject(graph, value);\n}\n\nfunction serializeArray<T>(\n value: object,\n graph: PayloadGraphEncodeContext,\n entries: () => readonly T[],\n encodeChild: (value: T) => PayloadModel,\n): PayloadModel {\n const existing = graphReference(graph, value);\n if (existing !== null) return existing;\n const id = defineGraphObject(graph, value);\n return { $fig: \"array\", id, value: entries().map(encodeChild) };\n}\n\nfunction serializePlainObject(\n value: object,\n graph: PayloadGraphEncodeContext,\n encodeChild: (value: unknown) => PayloadModel,\n): PayloadModel {\n const existing = graphReference(graph, value);\n if (existing !== null) return existing;\n const id = defineGraphObject(graph, value);\n return {\n $fig: \"object\",\n id,\n value: encodePayloadRecord(plainPayloadObject(value), encodeChild),\n };\n}\n\nfunction plainPayloadObject(value: object): Record<string, unknown> {\n const prototype = Object.getPrototypeOf(value);\n if (prototype !== Object.prototype && prototype !== null) {\n throw new Error(\n `Cannot serialize ${prototype?.constructor?.name ?? \"object\"} into the payload.`,\n );\n }\n return value as Record<string, unknown>;\n}\n\nfunction encodePayloadRecord(\n record: Record<string, unknown>,\n encodeChild: (value: unknown) => PayloadModel,\n): Record<string, PayloadModel> {\n const encoded: Record<string, PayloadModel> = {};\n for (const [name, child] of Object.entries(record)) {\n encoded[name] = encodeChild(child);\n }\n return encoded;\n}\n\nfunction encodePayloadNumber(value: number): number | PayloadSpecialModel {\n if (Number.isNaN(value)) return { $fig: \"number\", value: \"NaN\" };\n if (value === Infinity) return { $fig: \"number\", value: \"Infinity\" };\n if (value === -Infinity) return { $fig: \"number\", value: \"-Infinity\" };\n if (Object.is(value, -0)) return { $fig: \"number\", value: \"-0\" };\n return value;\n}\n\n/** Decode values produced by encodePayloadValue. */\nexport function decodePayloadValue(model: PayloadModel): unknown {\n return decodeModelValue(model, createPayloadGraphDecodeContext());\n}\n\nfunction decodeModelValue(\n model: PayloadModel,\n graph: PayloadGraphDecodeContext,\n): unknown {\n if (model === null) return null;\n if (Array.isArray(model))\n return model.map((item) => decodeModelValue(item, graph));\n if (typeof model !== \"object\") return model;\n\n if (isPayloadValueSpecialModel(model)) {\n return decodePayloadSpecialValue(model, graph);\n }\n\n return decodePayloadRecord(model as Record<string, PayloadModel>, (child) =>\n decodeModelValue(child, graph),\n );\n}\n\nfunction isPayloadValueSpecialModel(\n model: object,\n): model is PayloadValueSpecialModel {\n if (!(\"$fig\" in model)) return false;\n const tag = model.$fig;\n return (\n tag === \"bigint\" ||\n tag === \"array\" ||\n tag === \"date\" ||\n tag === \"map\" ||\n tag === \"number\" ||\n tag === \"object\" ||\n tag === \"ref\" ||\n tag === \"set\" ||\n tag === \"symbol\" ||\n tag === \"undefined\"\n );\n}\n\nfunction decodePayloadSpecialValue(\n model: PayloadValueSpecialModel,\n graph: PayloadGraphDecodeContext,\n): unknown {\n switch (model.$fig) {\n case \"array\": {\n const value: unknown[] = [];\n graph.refs.set(model.id, value);\n value.push(...model.value.map((item) => decodeModelValue(item, graph)));\n return value;\n }\n case \"bigint\":\n return BigInt(model.value);\n case \"date\":\n return new Date(model.value);\n case \"map\": {\n const value = new Map();\n graph.refs.set(model.id, value);\n for (const [key, item] of model.entries) {\n value.set(decodeModelValue(key, graph), decodeModelValue(item, graph));\n }\n return value;\n }\n case \"number\":\n return decodePayloadNumber(model.value);\n case \"object\":\n return decodePayloadPlainObject(model, graph);\n case \"ref\":\n return readGraphRef(graph, model.id);\n case \"set\": {\n const value = new Set();\n graph.refs.set(model.id, value);\n for (const item of model.values) {\n value.add(decodeModelValue(item, graph));\n }\n return value;\n }\n case \"symbol\":\n return Symbol.for(model.key);\n case \"undefined\":\n return undefined;\n }\n}\n\nfunction decodePayloadPlainObject(\n model: Extract<PayloadValueSpecialModel, { $fig: \"object\" }>,\n graph: PayloadGraphDecodeContext,\n): Record<string, unknown> {\n const decoded: Record<string, unknown> = {};\n if (model.id !== undefined) graph.refs.set(model.id, decoded);\n for (const [name, value] of Object.entries(model.value)) {\n definePayloadProperty(decoded, name, decodeModelValue(value, graph));\n }\n return decoded;\n}\n\nfunction decodePayloadRecord(\n value: Record<string, PayloadModel>,\n decodeChild: (model: PayloadModel) => unknown,\n): Record<string, unknown> {\n const decoded: Record<string, unknown> = {};\n for (const [name, child] of Object.entries(value)) {\n definePayloadProperty(decoded, name, decodeChild(child));\n }\n return decoded;\n}\n\nfunction definePayloadProperty(\n target: Record<string, unknown>,\n name: string,\n value: unknown,\n): void {\n Object.defineProperty(target, name, {\n configurable: true,\n enumerable: true,\n value,\n writable: true,\n });\n}\n\nfunction readGraphRef(graph: PayloadGraphDecodeContext, id: number): unknown {\n if (!graph.refs.has(id)) {\n throw new Error(`Payload referenced unknown object id ${id}.`);\n }\n return graph.refs.get(id);\n}\n\nfunction decodePayloadNumber(\n value: \"Infinity\" | \"-Infinity\" | \"-0\" | \"NaN\",\n): number {\n switch (value) {\n case \"Infinity\":\n return Infinity;\n case \"-Infinity\":\n return -Infinity;\n case \"-0\":\n return -0;\n case \"NaN\":\n return NaN;\n }\n}\n\nexport function encodePayloadDataEntries(\n entries: readonly FigDataHydrationEntry[],\n): PayloadDataHydrationEntry[] {\n const graph = createPayloadGraphEncodeContext();\n return entries.map((entry) => encodePayloadDataEntryWithGraph(entry, graph));\n}\n\nexport function decodePayloadDataEntries(\n entries: readonly PayloadDataHydrationEntry[],\n): FigDataHydrationEntry[] {\n const graph = createPayloadGraphDecodeContext();\n return entries.map((entry) => decodePayloadDataEntryWithGraph(entry, graph));\n}\n\nfunction encodePayloadDataEntryWithGraph(\n entry: FigDataHydrationEntry,\n graph: PayloadGraphEncodeContext,\n): PayloadDataHydrationEntry {\n return {\n ...entry,\n value: encodePayloadValueInternal(entry.value, graph),\n };\n}\n\nfunction decodePayloadDataEntryWithGraph(\n entry: PayloadDataHydrationEntry,\n graph: PayloadGraphDecodeContext,\n): FigDataHydrationEntry {\n return {\n ...entry,\n value: decodeModelValue(entry.value, graph),\n };\n}\n\nfunction outlineTask(\n frame: RenderFrame,\n kind: Task[\"kind\"],\n value: unknown,\n referenceKind: \"lazy\" | \"promise\",\n wakeable: Thenable,\n): PayloadSpecialModel {\n const request = frame.request;\n const id = request.nextRowId++;\n const task = createTask(\n request,\n id,\n kind,\n value,\n cloneContextValues(frame.contextValues),\n stackForError(wakeable, frame.stack),\n );\n\n wakeable.then(\n () => pingTask(request, task),\n () => pingTask(request, task),\n );\n\n return { $fig: referenceKind, id };\n}\n\nfunction outlineError(\n frame: RenderFrame,\n error: unknown,\n referenceKind: \"lazy\" | \"promise\",\n): PayloadSpecialModel {\n const request = frame.request;\n const id = request.nextRowId++;\n emitRow(request, {\n id,\n tag: \"error\",\n value: errorRowPayload(request, error, frame.stack),\n });\n return { $fig: referenceKind, id };\n}\n\n// The onError return value is authoritative, like the HTML renderer's\n// reportBoundaryError: message crosses the wire only when the handler says\n// so. Without a handler, development keeps the real message for debugging\n// (payload errors never re-execute on the client, so the wire is the only\n// surface) and production sends an empty payload.\nfunction errorRowPayload(\n request: PayloadRequest,\n error: unknown,\n stack: StackFrame | null,\n): ServerErrorPayload {\n const info = {\n componentStack: componentStack(stackForError(error, stack)),\n };\n if (request.onError === undefined) {\n return __DEV__ ? { message: errorMessage(error) } : {};\n }\n\n try {\n return request.onError(error, info) ?? {};\n } catch {\n return {};\n }\n}\n\nfunction recordErrorStack(error: unknown, stack: StackFrame | null): void {\n if (stack === null) return;\n if (typeof error !== \"object\" || error === null) return;\n if (!errorStacks.has(error)) errorStacks.set(error, stack);\n}\n\nfunction stackForError(\n error: unknown,\n fallback: StackFrame | null,\n): StackFrame | null {\n if (typeof error !== \"object\" || error === null) return fallback;\n return errorStacks.get(error) ?? fallback;\n}\n\nfunction componentStack(stack: StackFrame | null): string {\n const frames: string[] = [];\n for (let frame = stack; frame !== null; frame = frame.parent) {\n frames.push(` at ${frame.name}`);\n }\n return frames.length === 0 ? \"\" : `\\n${frames.join(\"\\n\")}`;\n}\n\n// The metadata shape hooks receive: the wire row minus assets (those are\n// recorded separately and never concern loaders/resolvers).\nfunction clientRowMetadata(\n value: Extract<PayloadRow, { tag: \"client\" }>[\"value\"],\n): PayloadClientReferenceMetadata {\n const metadata: PayloadClientReferenceMetadata = { id: value.id };\n if (value.exportName !== undefined) metadata.exportName = value.exportName;\n if (value.ssr === true) metadata.ssr = true;\n return metadata;\n}\n\nfunction clientReferenceExportName(id: string): string | undefined {\n const hashIndex = id.lastIndexOf(\"#\");\n if (hashIndex === -1) return undefined;\n const exportName = id.slice(hashIndex + 1);\n return exportName === \"\" ? undefined : exportName;\n}\n\nfunction emitClientReference(\n request: PayloadRequest,\n reference: FigClientReference,\n): number {\n const existing = request.clientReferenceRows.get(reference.id);\n if (existing !== undefined) return existing;\n\n // Resolve assets BEFORE reserving the row id and recording the mapping. A lazy\n // resource thunk (bundler-manifest resolution) may throw; reserving first would\n // leave a row id mapped but never emitted, so a later retry returns the cached\n // id and the client suspends on a chunk that never arrives. Resolving first\n // lets the throw propagate as an ordinary serialization error with no poisoned\n // mapping, so the reference can be retried cleanly.\n const assets = serializeClientReferenceAssets(request, reference);\n const value: Extract<PayloadRow, { tag: \"client\" }>[\"value\"] = {\n id: reference.id,\n };\n if (assets.length > 0) value.assets = assets;\n // The \"<module>#<export>\" authoring convention is split here, once, so the\n // wire is self-describing and the client never string-parses ids.\n const exportName = clientReferenceExportName(reference.id);\n if (exportName !== undefined) value.exportName = exportName;\n if (reference.ssr !== undefined) value.ssr = true;\n const id = request.nextRowId++;\n request.clientReferenceRows.set(reference.id, id);\n emitRow(request, {\n id,\n tag: \"client\",\n value,\n });\n return id;\n}\n\nfunction serializeClientReferenceAssets(\n request: PayloadRequest,\n reference: FigClientReference,\n): SerializedAssetResource[] {\n return serializeAssetResources(\n request,\n collectClientReferenceAssets(request, reference),\n );\n}\n\nfunction serializeAssetResources(\n request: PayloadRequest,\n value: unknown,\n): SerializedAssetResource[] {\n const input = isFigAssetResource(value)\n ? [value]\n : Array.isArray(value)\n ? value\n : [];\n const resources: SerializedAssetResource[] = [];\n\n for (const resource of input) {\n if (!isFigAssetResource(resource)) continue;\n // Only stream-safe assets travel on the wire; head-only title/meta are\n // document state, not client-component assets (see the asset-resources plan).\n if (assetResourceDestination(resource) !== \"stream\") continue;\n\n const key = assetResourceKey(resource);\n if (request.emittedAssetKeys.has(key)) continue;\n request.emittedAssetKeys.add(key);\n resources.push(serializeAssetResource(resource));\n }\n\n return resources;\n}\n\nfunction collectClientReferenceAssets(\n request: PayloadRequest,\n reference: FigClientReference,\n): readonly FigAssetResource[] {\n const resources = [...clientReferenceAssets(reference)];\n const resolved = request.clientReferenceAssets?.({ id: reference.id });\n if (resolved === undefined) return resources;\n if (isFigAssetResource(resolved)) return [...resources, resolved];\n return Array.isArray(resolved) ? [...resources, ...resolved] : resources;\n}\n\nfunction serializeAssetResource(\n resource: FigAssetResource,\n): SerializedAssetResource {\n // The payload asset wire format is descriptor-only and intentionally does not\n // carry author-supplied `key`; streamed assets dedupe by their concrete URL.\n // SSR/head resources still round-trip keys through data-fig-resource-key.\n switch (resource.kind) {\n case \"stylesheet\":\n return {\n ...(resource.crossOrigin === undefined\n ? {}\n : { crossOrigin: resource.crossOrigin }),\n href: resource.href,\n kind: resource.kind,\n ...(resource.media === undefined ? {} : { media: resource.media }),\n ...(resource.precedence === undefined\n ? {}\n : { precedence: resource.precedence }),\n };\n case \"preload\":\n return {\n as: resource.as,\n ...(resource.crossOrigin === undefined\n ? {}\n : { crossOrigin: resource.crossOrigin }),\n ...(resource.fetchPriority === undefined\n ? {}\n : { fetchPriority: resource.fetchPriority }),\n href: resource.href,\n kind: resource.kind,\n ...(resource.type === undefined ? {} : { type: resource.type }),\n };\n case \"modulepreload\":\n return {\n ...(resource.crossOrigin === undefined\n ? {}\n : { crossOrigin: resource.crossOrigin }),\n ...(resource.fetchPriority === undefined\n ? {}\n : { fetchPriority: resource.fetchPriority }),\n href: resource.href,\n kind: resource.kind,\n };\n case \"script\":\n return {\n ...(resource.async === undefined ? {} : { async: resource.async }),\n ...(resource.crossOrigin === undefined\n ? {}\n : { crossOrigin: resource.crossOrigin }),\n ...(resource.defer === undefined ? {} : { defer: resource.defer }),\n kind: resource.kind,\n ...(resource.module === undefined ? {} : { module: resource.module }),\n src: resource.src,\n };\n case \"font\":\n return {\n ...(resource.crossOrigin === undefined\n ? {}\n : { crossOrigin: resource.crossOrigin }),\n ...(resource.fetchPriority === undefined\n ? {}\n : { fetchPriority: resource.fetchPriority }),\n href: resource.href,\n kind: resource.kind,\n type: resource.type,\n };\n case \"preconnect\":\n return {\n ...(resource.crossOrigin === undefined\n ? {}\n : { crossOrigin: resource.crossOrigin }),\n href: resource.href,\n kind: resource.kind,\n };\n case \"title\":\n case \"meta\":\n throw new Error(\n \"Head-only resources cannot be serialized into the payload.\",\n );\n }\n\n return unsupportedSerializedAssetResource(resource);\n}\n\nfunction unsupportedSerializedAssetResource(resource: FigAssetResource): never {\n throw new Error(`Unsupported asset resource kind: ${resource.kind}`);\n}\n\nfunction emitRow(request: PayloadRequest, row: PayloadRow): void {\n request.queuedRows.push(request.codec.encodeRow(row));\n flushRows(request);\n}\n\nfunction pingTask(request: PayloadRequest, task: Task): void {\n if (request.status === \"closed\") return;\n request.pingedTasks.push(task);\n // Many thenables settling in one tick ping many tasks; one performWork\n // pass drains them all, so schedule at most one.\n if (request.workScheduled) return;\n request.workScheduled = true;\n queueMicrotask(() => {\n request.workScheduled = false;\n performWork(request);\n });\n}\n\nfunction flushRows(request: PayloadRequest): void {\n if (request.controller === null || request.status === \"closed\") return;\n if (request.status === \"opening\") return;\n\n if (request.queuedRows.length > 0) {\n for (const row of request.queuedRows) request.controller.enqueue(row);\n request.queuedRows = [];\n }\n\n if (request.pendingTasks === 0) {\n request.status = \"closed\";\n cleanupPayloadAbortListener(request);\n request.dataStore.dispose();\n request.controller.close();\n }\n}\n\nfunction closeWithError(request: PayloadRequest, error: unknown): void {\n if (request.status === \"closed\") return;\n cleanupPayloadAbortListener(request);\n request.status = \"closed\";\n request.dataStore.dispose();\n request.allReady.reject(error);\n request.controller?.error(error);\n}\n\nfunction abortPayloadRequest(request: PayloadRequest, reason?: unknown): void {\n closeWithError(request, reason ?? new PayloadRequestCancelledError());\n}\n\nfunction cleanupPayloadAbortListener(request: PayloadRequest): void {\n if (request.abortListener === null) return;\n request.abortSignal?.removeEventListener(\"abort\", request.abortListener);\n request.abortListener = null;\n request.abortSignal = null;\n}\n\n// Wire-format flattening only: unlike the shared collectChildren, this keeps\n// empty children and does NOT merge adjacent text — the client decodes rows\n// and re-collects children itself, so merging here would double-apply.\nfunction flattenChildArrays(children: FigNode[]): FigNode[] {\n const collected: FigNode[] = [];\n\n for (const child of children) {\n if (Array.isArray(child)) collected.push(...flattenChildArrays(child));\n else collected.push(child);\n }\n\n return collected;\n}\n\nfunction invalidChildError(value: unknown): Error {\n return new Error(\n `Invalid Fig child in payload render: ${describeInvalidChild(value)}.`,\n );\n}\n\nfunction errorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\nasync function readByteStream(\n stream: ReadableStream<Uint8Array>,\n onChunk: (chunk: Uint8Array) => void,\n signal?: AbortSignal | null,\n): Promise<void> {\n const reader = stream.getReader();\n const abort = () => {\n void reader.cancel(signal?.reason).catch(() => undefined);\n };\n\n try {\n signal?.addEventListener(\"abort\", abort, { once: true });\n\n while (true) {\n throwIfAborted(signal);\n\n const { done, value } = await reader.read();\n throwIfAborted(signal);\n\n if (done) return;\n\n onChunk(value);\n }\n } catch (error) {\n if (!signal?.aborted) {\n await reader.cancel(error).catch(() => undefined);\n }\n throw error;\n } finally {\n signal?.removeEventListener(\"abort\", abort);\n reader.releaseLock();\n throwIfAborted(signal);\n }\n}\n\nfunction throwIfAborted(signal?: AbortSignal | null): void {\n if (signal?.aborted) throw new PayloadRequestCancelledError();\n}\n\nfunction resolveDecodedRow(\n response: PayloadResponseImpl,\n row: Extract<PayloadRow, { id: number }>,\n revision: number,\n): void {\n const chunk = response.getChunk(row.id);\n\n if (row.tag === \"error\") {\n const error = errorFromPayload(row.value);\n chunk.model = null;\n chunk.status = \"rejected\";\n chunk.value = error;\n chunk.reject(error);\n void chunk.promise.catch(() => undefined);\n return;\n }\n\n let value: unknown;\n if (row.tag === \"client\") {\n response.recordClientReference(row.value);\n response.recordAssetResources(row.value.assets);\n value = response.decodeClientReference(clientRowMetadata(row.value));\n } else {\n value = response.decodeModelAtRevision(row.value, revision);\n }\n\n chunk.model = row.tag === \"model\" ? row.value : null;\n chunk.revision = revision;\n if (row.tag === \"model\") {\n chunk.decoded = value;\n chunk.hasDecoded = true;\n }\n chunk.status = \"fulfilled\";\n chunk.value = value;\n chunk.resolve(value);\n}\n\nfunction errorFromPayload(value: ServerErrorPayload): Error & {\n digest?: string;\n} {\n const error = new Error(\n value.message ?? \"The server render failed.\",\n ) as Error & { digest?: string };\n if (value.digest !== undefined) error.digest = value.digest;\n return error;\n}\n\nfunction shiftRowIds(\n row: PayloadRow,\n rowOffset: number,\n objectOffset: number,\n): void {\n if (row.tag === \"client\" || row.tag === \"error\" || row.tag === \"model\") {\n // The row's own chunk id. A client row's value.id is a string module id and\n // must not be shifted.\n row.id += rowOffset;\n }\n if (row.tag === \"model\" || row.tag === \"refresh\") {\n shiftModelIds(row.value, rowOffset, objectOffset);\n }\n if (row.tag === \"data\") {\n for (const entry of row.value) {\n shiftModelIds(entry.value, rowOffset, objectOffset);\n }\n }\n}\n\nfunction shiftModelIds(\n model: PayloadModel,\n rowOffset: number,\n objectOffset: number,\n): void {\n if (model === null || typeof model !== \"object\") return;\n\n if (Array.isArray(model)) {\n for (const item of model) shiftModelIds(item, rowOffset, objectOffset);\n return;\n }\n\n if (isPayloadSpecialModel(model)) {\n const special = model;\n switch (special.$fig) {\n case \"array\":\n special.id += objectOffset;\n for (const value of special.value) {\n shiftModelIds(value, rowOffset, objectOffset);\n }\n return;\n case \"client\":\n case \"lazy\":\n case \"promise\":\n special.id += rowOffset;\n return;\n case \"element\":\n if (special.id !== undefined) special.id += objectOffset;\n shiftModelIds(special.type, rowOffset, objectOffset);\n shiftModelIds(special.props, rowOffset, objectOffset);\n return;\n case \"object\":\n if (special.id !== undefined) special.id += objectOffset;\n for (const value of Object.values(special.value)) {\n shiftModelIds(value, rowOffset, objectOffset);\n }\n return;\n case \"boundary\":\n // boundary.id is a string boundary name, not a numeric chunk id.\n shiftModelIds(special.child, rowOffset, objectOffset);\n return;\n case \"map\":\n special.id += objectOffset;\n for (const [key, value] of special.entries) {\n shiftModelIds(key, rowOffset, objectOffset);\n shiftModelIds(value, rowOffset, objectOffset);\n }\n return;\n case \"ref\":\n special.id += objectOffset;\n return;\n case \"set\":\n special.id += objectOffset;\n for (const value of special.values) {\n shiftModelIds(value, rowOffset, objectOffset);\n }\n return;\n default:\n return;\n }\n }\n\n for (const value of Object.values(model)) {\n shiftModelIds(value, rowOffset, objectOffset);\n }\n}\n\nfunction noteMaxObjectIds(\n response: PayloadResponseImpl,\n model: PayloadModel,\n): void {\n if (model === null || typeof model !== \"object\") return;\n\n if (Array.isArray(model)) {\n for (const item of model) noteMaxObjectIds(response, item);\n return;\n }\n\n if (isPayloadSpecialModel(model)) {\n switch (model.$fig) {\n case \"array\":\n response.noteObjectId(model.id);\n for (const value of model.value) noteMaxObjectIds(response, value);\n return;\n case \"element\":\n if (model.id !== undefined) response.noteObjectId(model.id);\n noteMaxObjectIds(response, model.type);\n noteMaxObjectIds(response, model.props);\n return;\n case \"map\":\n response.noteObjectId(model.id);\n for (const [key, value] of model.entries) {\n noteMaxObjectIds(response, key);\n noteMaxObjectIds(response, value);\n }\n return;\n case \"object\":\n if (model.id !== undefined) response.noteObjectId(model.id);\n for (const value of Object.values(model.value)) {\n noteMaxObjectIds(response, value);\n }\n return;\n case \"ref\":\n case \"set\":\n response.noteObjectId(model.id);\n if (model.$fig === \"set\") {\n for (const value of model.values) noteMaxObjectIds(response, value);\n }\n return;\n case \"boundary\":\n noteMaxObjectIds(response, model.child);\n return;\n default:\n return;\n }\n }\n\n for (const value of Object.values(model)) noteMaxObjectIds(response, value);\n}\n\nfunction collectObjectIds(model: PayloadModel, ids: Set<number>): void {\n if (model === null || typeof model !== \"object\") return;\n\n if (Array.isArray(model)) {\n for (const item of model) collectObjectIds(item, ids);\n return;\n }\n\n if (isPayloadSpecialModel(model)) {\n switch (model.$fig) {\n case \"array\":\n ids.add(model.id);\n for (const value of model.value) collectObjectIds(value, ids);\n return;\n case \"element\":\n if (model.id !== undefined) ids.add(model.id);\n collectObjectIds(model.type, ids);\n collectObjectIds(model.props, ids);\n return;\n case \"map\":\n ids.add(model.id);\n for (const [key, value] of model.entries) {\n collectObjectIds(key, ids);\n collectObjectIds(value, ids);\n }\n return;\n case \"object\":\n if (model.id !== undefined) ids.add(model.id);\n for (const value of Object.values(model.value)) {\n collectObjectIds(value, ids);\n }\n return;\n case \"ref\":\n ids.add(model.id);\n return;\n case \"set\":\n ids.add(model.id);\n for (const value of model.values) collectObjectIds(value, ids);\n return;\n case \"boundary\":\n return;\n default:\n return;\n }\n }\n\n for (const value of Object.values(model)) collectObjectIds(value, ids);\n}\n\nfunction collectBoundaryIds(model: PayloadModel, ids: Set<string>): void {\n if (model === null || typeof model !== \"object\") return;\n\n if (Array.isArray(model)) {\n for (const item of model) collectBoundaryIds(item, ids);\n return;\n }\n\n if (isPayloadSpecialModel(model)) {\n switch (model.$fig) {\n case \"array\":\n for (const value of model.value) collectBoundaryIds(value, ids);\n return;\n case \"element\":\n collectBoundaryIds(model.type, ids);\n collectBoundaryIds(model.props, ids);\n return;\n case \"object\":\n for (const value of Object.values(model.value)) {\n collectBoundaryIds(value, ids);\n }\n return;\n case \"boundary\":\n ids.add(model.id);\n return;\n case \"map\":\n for (const [key, value] of model.entries) {\n collectBoundaryIds(key, ids);\n collectBoundaryIds(value, ids);\n }\n return;\n case \"set\":\n for (const value of model.values) collectBoundaryIds(value, ids);\n return;\n default:\n return;\n }\n }\n\n for (const value of Object.values(model)) collectBoundaryIds(value, ids);\n}\n\nfunction referencedChunkClosure(\n model: PayloadModel,\n chunks: ReadonlyMap<number, DecodedChunk>,\n): Set<number> {\n const ids = new Set<number>();\n const pending = [model];\n for (let index = 0; index < pending.length; index += 1) {\n const next = new Set<number>();\n collectReferencedChunkIds(pending[index] as PayloadModel, next);\n for (const id of next) {\n if (ids.has(id)) continue;\n ids.add(id);\n const chunk = chunks.get(id);\n if (chunk?.model !== null && chunk?.model !== undefined) {\n pending.push(chunk.model);\n }\n }\n }\n return ids;\n}\n\nfunction collectReferencedChunkIds(\n model: PayloadModel,\n ids: Set<number>,\n): void {\n if (model === null || typeof model !== \"object\") return;\n\n if (Array.isArray(model)) {\n for (const item of model) collectReferencedChunkIds(item, ids);\n return;\n }\n\n if (isPayloadSpecialModel(model)) {\n switch (model.$fig) {\n case \"array\":\n for (const value of model.value) collectReferencedChunkIds(value, ids);\n return;\n case \"client\":\n case \"lazy\":\n case \"promise\":\n ids.add(model.id);\n return;\n case \"element\":\n collectReferencedChunkIds(model.type, ids);\n collectReferencedChunkIds(model.props, ids);\n return;\n case \"object\":\n for (const value of Object.values(model.value)) {\n collectReferencedChunkIds(value, ids);\n }\n return;\n case \"ref\":\n return;\n case \"boundary\":\n return;\n case \"map\":\n for (const [key, value] of model.entries) {\n collectReferencedChunkIds(key, ids);\n collectReferencedChunkIds(value, ids);\n }\n return;\n case \"set\":\n for (const value of model.values) collectReferencedChunkIds(value, ids);\n return;\n default:\n return;\n }\n }\n\n for (const value of Object.values(model)) {\n collectReferencedChunkIds(value, ids);\n }\n}\n\nfunction addChunkRefs(target: Set<number>, ids: Set<number>): void {\n for (const id of ids) target.add(id);\n}\n\nfunction isPayloadSpecialModel(\n model: object,\n): model is PayloadElementModel | PayloadSpecialModel {\n if (!(\"$fig\" in model)) return false;\n\n switch ((model as { $fig: unknown }).$fig) {\n case \"array\":\n case \"bigint\":\n case \"boundary\":\n case \"client\":\n case \"date\":\n case \"element\":\n case \"fragment\":\n case \"lazy\":\n case \"map\":\n case \"number\":\n case \"object\":\n case \"promise\":\n case \"ref\":\n case \"set\":\n case \"suspense\":\n case \"symbol\":\n case \"undefined\":\n case \"view-transition\":\n return true;\n default:\n return false;\n }\n}\n\nfunction decodeModel(\n response: PayloadResponseImpl,\n model: PayloadModel,\n): unknown {\n if (model === null) return null;\n if (Array.isArray(model))\n return model.map((item) => decodeModel(response, item));\n\n if (typeof model !== \"object\") return model;\n\n if (isPayloadSpecialModel(model)) {\n return decodeSpecialModel(response, model);\n }\n\n const decoded: Record<string, unknown> = {};\n for (const [name, value] of Object.entries(model)) {\n definePayloadProperty(decoded, name, decodeModel(response, value));\n }\n return decoded;\n}\n\nfunction decodeSpecialModel(\n response: PayloadResponseImpl,\n model: PayloadElementModel | PayloadSpecialModel,\n): unknown {\n switch (model.$fig) {\n case \"array\": {\n return response.defineObjectRef(\n model.id,\n () => [] as unknown[],\n (value) => {\n value.push(...model.value.map((item) => decodeModel(response, item)));\n },\n );\n }\n case \"bigint\":\n return BigInt(model.value);\n case \"date\":\n return new Date(model.value);\n case \"map\": {\n return response.defineObjectRef(\n model.id,\n () => new Map(),\n (value) => {\n for (const [key, item] of model.entries) {\n value.set(decodeModel(response, key), decodeModel(response, item));\n }\n },\n );\n }\n case \"number\":\n return decodePayloadNumber(model.value);\n case \"object\": {\n if (model.id === undefined) {\n const value: Record<string, unknown> = {};\n for (const [name, child] of Object.entries(model.value)) {\n definePayloadProperty(value, name, decodeModel(response, child));\n }\n return value;\n }\n return response.defineObjectRef(\n model.id,\n () => ({}) as Record<string, unknown>,\n (value) => {\n for (const [name, child] of Object.entries(model.value)) {\n definePayloadProperty(value, name, decodeModel(response, child));\n }\n },\n );\n }\n case \"ref\":\n return response.readObjectRef(model.id);\n case \"set\": {\n return response.defineObjectRef(\n model.id,\n () => new Set(),\n (value) => {\n for (const item of model.values) {\n value.add(decodeModel(response, item));\n }\n },\n );\n }\n case \"symbol\":\n return Symbol.for(model.key);\n case \"undefined\":\n return undefined;\n case \"boundary\":\n response.prepareBoundaryInitial(model.id, model.child);\n return createElement(PayloadBoundarySlot, {\n id: model.id,\n initial: model.child,\n response,\n });\n case \"element\": {\n if (model.id !== undefined) {\n return response.defineObjectRef(\n model.id,\n () =>\n ({\n $$typeof: FigElementSymbol,\n key: model.key,\n props: {},\n type: Fragment,\n }) as FigElement,\n (element) => {\n (element as { type: ElementType<any> }).type = decodeElementType(\n response,\n model.type,\n );\n (element as { props: Props }).props = decodeModel(\n response,\n model.props,\n ) as Props;\n },\n );\n }\n const type = decodeElementType(response, model.type);\n const props = decodeModel(response, model.props) as Props & {\n key?: Key | null;\n };\n if (model.key !== null) props.key = model.key;\n return createElement(type, props);\n }\n case \"client\":\n return response.readChunk(model.id);\n case \"fragment\":\n return Fragment;\n case \"lazy\":\n return createElement(PayloadLazyNode, { id: model.id, response });\n case \"promise\":\n return response.getChunk(model.id).promise;\n case \"suspense\":\n return Suspense;\n case \"view-transition\":\n return ViewTransition;\n }\n}\n\nfunction decodeElementType(\n response: PayloadResponseImpl,\n type: string | PayloadSpecialModel,\n): ElementType<any> {\n if (typeof type === \"string\") return type;\n return decodeSpecialModel(response, type) as ElementType<any>;\n}\n\nfunction PayloadResponseRoot(props: {\n response: PayloadResponseImpl;\n}): FigNode {\n return props.response.readChunk(0);\n}\n\nfunction PayloadBoundarySlot(props: {\n id: string;\n initial: PayloadModel;\n response: PayloadResponseImpl;\n}): FigNode {\n return props.response.readBoundary(props.id, props.initial);\n}\n\nfunction PayloadLazyNode(props: {\n id: number;\n response: PayloadResponseImpl;\n}): FigNode {\n return props.response.readChunk(props.id);\n}\n\nfunction resolveClientReferenceExport(\n moduleValue: unknown,\n metadata: PayloadClientReferenceMetadata,\n): ElementType<any> {\n if (typeof moduleValue === \"function\") return moduleValue as ElementType<any>;\n\n if (\n typeof moduleValue === \"object\" &&\n moduleValue !== null &&\n metadata.exportName !== undefined\n ) {\n const candidate = (moduleValue as Record<string, unknown>)[\n metadata.exportName\n ];\n if (typeof candidate === \"function\") return candidate as ElementType<any>;\n }\n\n throw new Error(\n `Client reference \"${metadata.id}\" did not load a component.`,\n );\n}\n\nfunction appendPayloadHeaders(\n codec: PayloadCodec,\n headers: HeadersInit | undefined,\n boundary?: string,\n): Headers {\n const next = new Headers(headers);\n if (!next.has(\"accept\")) next.set(\"accept\", codec.contentType);\n if (boundary !== undefined) next.set(PAYLOAD_BOUNDARY_HEADER, boundary);\n return next;\n}\n\nfunction assertPayloadCodecMatches(\n codec: PayloadCodec,\n contentTypeHeader: string | null,\n): void {\n if (contentTypeHeader === null) return;\n const received = payloadCodecIdFromContentType(contentTypeHeader);\n if (received === null || received === codec.id) return;\n throw new Error(\n `Payload codec mismatch: response used \"${received}\" but this client expects \"${codec.id}\".`,\n );\n}\n\nfunction getOrCreateChunk(\n chunks: Map<number, DecodedChunk>,\n id: number,\n): DecodedChunk {\n const existing = chunks.get(id);\n if (existing !== undefined) return existing;\n\n const settled = deferred<unknown>();\n const chunk: DecodedChunk = {\n decoded: undefined,\n hasDecoded: false,\n model: null,\n promise: settled.promise,\n reject: settled.reject,\n resolve: settled.resolve,\n revision: 0,\n status: \"pending\",\n value: undefined,\n };\n chunks.set(id, chunk);\n return chunk;\n}\n\nfunction isPayloadBoundary(value: unknown): value is typeof PayloadBoundary {\n return (\n typeof value === \"function\" &&\n (value as typeof PayloadBoundary).$$typeof === PayloadBoundarySymbol\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"payload.js","names":["invalidChildError"],"sources":["../src/payload.ts"],"sourcesContent":["import type { DataResourceKeyInput } from \"@bgub/fig\";\nimport {\n type AwaitedFigNode,\n type FigAssetResource,\n type FigAssetResourceList,\n type FigClientReference,\n type FigContext,\n type FigDataHydrationEntry,\n type FigElement,\n type FigNode,\n Fragment,\n isValidElement,\n type Props,\n} from \"@bgub/fig\";\nimport {\n assetResourceDestination,\n assetResourceKey,\n checkpointPayloadGraph,\n clientOnlyHostBehavior,\n clientReferenceAssets,\n createRendererDataStore,\n createPayloadGraphEncodeContext,\n type DataStore,\n type DataStoreEntrySnapshot,\n definePayloadGraphElement,\n describeInvalidChild,\n encodePayloadDataEntries,\n encodePayloadValueWithGraph,\n isActivity,\n isAssets,\n isClientReference,\n isContext,\n isErrorBoundary,\n isFigAssetResource,\n isPlainPayloadValue,\n isPortal,\n isSuspense,\n isThenable,\n isViewTransition,\n jsonPayloadCodec,\n type PayloadElementModel,\n type PayloadGraphEncodeContext,\n type PayloadModel,\n type PayloadRow,\n type PayloadSpecialModel,\n type RenderDispatcher,\n readThenable,\n rollbackPayloadGraph,\n serializePayloadArray,\n serializePayloadMap,\n serializePayloadPlainObject,\n serializePayloadSet,\n type SerializedAssetResource,\n setCurrentDataStore,\n setCurrentDispatcher,\n type Thenable,\n} from \"@bgub/fig/internal\";\nimport {\n type ContextValues,\n type StackFrame,\n cloneContextValues,\n componentStack,\n createStaticDispatcher,\n type Deferred,\n deferred,\n errorMessage,\n streamFlowBlocked,\n streamHighWaterMark,\n withContextValue,\n} from \"./shared.ts\";\nimport type { ServerErrorInfo, ServerErrorPayload } from \"./types.ts\";\n\ndeclare const __FIG_DEV__: boolean | undefined;\n\nconst __DEV__ = typeof __FIG_DEV__ === \"boolean\" ? __FIG_DEV__ : false;\n\nexport interface PayloadRenderResult {\n allReady: Promise<void>;\n contentType: string;\n stream: ReadableStream<Uint8Array>;\n}\n\nexport type PayloadComponent = (\n props: Props & { children?: FigNode },\n) => FigNode;\n\nexport interface PayloadRenderOptions {\n clientReferenceAssets?: (metadata: { id: string }) => FigAssetResourceList;\n componentAssets?: (\n type: PayloadComponent,\n ) => FigAssetResourceList | undefined;\n dataPartition?: DataResourceKeyInput;\n /**\n * Encoded bytes the result stream buffers before row flushing pauses until\n * the consumer reads (rendering itself never pauses; encoded rows wait\n * queued). Defaults to 65536; values below 1 are clamped to 1.\n */\n highWaterMark?: number;\n signal?: AbortSignal;\n /**\n * Decides what crosses the wire when a server render throws, mirroring the\n * HTML renderer's contract: the returned payload is authoritative. Without\n * a handler, development includes the error message and production sends\n * an empty payload.\n */\n onError?: (\n error: unknown,\n info: ServerErrorInfo,\n ) => ServerErrorPayload | undefined;\n}\n\nclass PayloadRequestCancelledError extends Error {\n constructor() {\n super(\"Payload request cancelled.\");\n this.name = \"PayloadRequestCancelledError\";\n }\n}\n\ntype PayloadRequest = {\n allReady: Deferred<void>;\n cleanupAbortListener(): void;\n clientReferenceRows: Map<string, number>;\n clientReferenceAssets?: (metadata: { id: string }) => FigAssetResourceList;\n componentAssets: PayloadRenderOptions[\"componentAssets\"];\n controller: ReadableStreamDefaultController<Uint8Array> | null;\n dataStore: DataStore<object, null>;\n emittedAssetKeys: Set<string>;\n emittedDataKeys: Set<string>;\n graph: PayloadGraphEncodeContext;\n nextRowId: number;\n nextUseId: number;\n onError: PayloadRenderOptions[\"onError\"];\n pendingDataSnapshots: Map<string, DataStoreEntrySnapshot>;\n pendingTasks: number;\n pingedTasks: Task[];\n queuedRows: Uint8Array[];\n // Reentrancy guard: enqueueing inside flushRows can synchronously invoke\n // the stream's pull handler, which must not restart the drain — queuedRows\n // is spliced only after the loop, so a reentrant pass would re-enqueue the\n // same rows.\n flushingRows: boolean;\n status: \"open\" | \"closed\";\n workScheduled: boolean;\n};\n\ntype Task = {\n contextValues: ContextValues;\n id: number;\n stack: StackFrame | null;\n} & TaskValue;\n\ntype TaskValue =\n | { kind: \"node\"; value: FigNode }\n | { kind: \"node-promise\"; value: Thenable<AwaitedFigNode> }\n | { kind: \"promise\"; value: Thenable };\n\ntype Component = PayloadComponent;\n\ntype RenderFrame = {\n contextValues: ContextValues;\n // Built lazily on the first function component; reused for the whole task\n // (the dispatcher reads context through the frame, so it stays current).\n dispatcher: RenderDispatcher | null;\n // Assets discovered during this attempt whose owning row is not yet known.\n // Assets rows carry `for` — the row id whose reveal depends on them — and\n // the owner is only decided at scope exit: a subtree that completes keeps\n // its assets with the enclosing row, while one that suspends or fails takes\n // the assets discovered inside it to its outlined row. Scope exits happen\n // within the same synchronous attempt, so buffering costs no wire latency.\n pendingAssets: SerializedAssetResource[];\n request: PayloadRequest;\n stack: StackFrame | null;\n};\n\nconst errorStacks = new WeakMap<object, StackFrame>();\nconst childrenTreeProps = new Set([\"children\"]);\nconst emptyTreeProps = new Set<string>();\nconst suspenseTreeProps = new Set([\"children\", \"fallback\"]);\n\nexport function renderToPayloadStream(\n node: FigNode,\n options: PayloadRenderOptions = {},\n): PayloadRenderResult {\n const { request, stream } = createPayloadRequest(node, options);\n return {\n allReady: request.allReady.promise,\n contentType: jsonPayloadCodec.contentType,\n stream,\n };\n}\n\nfunction createPayloadRequest(\n node: FigNode,\n options: PayloadRenderOptions,\n): { request: PayloadRequest; stream: ReadableStream<Uint8Array> } {\n throwIfAborted(options.signal);\n\n const pendingDataSnapshots = new Map<string, DataStoreEntrySnapshot>();\n const request: PayloadRequest = {\n allReady: deferred<void>(),\n cleanupAbortListener: () => undefined,\n clientReferenceRows: new Map(),\n clientReferenceAssets: options.clientReferenceAssets,\n componentAssets: options.componentAssets,\n controller: null,\n dataStore: createRendererDataStore<object, null>({\n getLane: () => null,\n onEntryChange: (entry: DataStoreEntrySnapshot) => {\n pendingDataSnapshots.set(entry.canonicalKey, entry);\n },\n partition: options.dataPartition,\n schedule: () => undefined,\n }),\n emittedAssetKeys: new Set(),\n emittedDataKeys: new Set(),\n graph: createPayloadGraphEncodeContext(),\n nextRowId: 1,\n nextUseId: 0,\n onError: options.onError,\n pendingDataSnapshots,\n pendingTasks: 0,\n pingedTasks: [],\n queuedRows: [],\n flushingRows: false,\n status: \"open\",\n workScheduled: false,\n };\n // allReady also rejects through the stream when a consumer cancels (the\n // normal client-disconnect path); the pre-attached no-op handler keeps it\n // from becoming an unhandled rejection for callers that do not await it\n // (await-ers still observe the rejection).\n void request.allReady.promise.catch(() => undefined);\n\n request.pingedTasks.push(\n createTask(request, 0, { kind: \"node\", value: node }, new Map(), null),\n );\n\n const stream = new ReadableStream<Uint8Array>(\n {\n start(controller) {\n request.controller = controller;\n flushRows(request);\n },\n pull() {\n // The consumer drained below the high-water mark: resume flushing\n // rows that queued while the flow was blocked.\n flushRows(request);\n },\n cancel(reason) {\n abortPayloadRequest(request, reason);\n },\n },\n new ByteLengthQueuingStrategy({\n highWaterMark: streamHighWaterMark(options.highWaterMark),\n }),\n );\n\n const signal = options.signal;\n if (signal !== undefined) {\n const abortListener = () => abortPayloadRequest(request, signal.reason);\n signal.addEventListener(\"abort\", abortListener, { once: true });\n request.cleanupAbortListener = () => {\n signal.removeEventListener(\"abort\", abortListener);\n request.cleanupAbortListener = () => undefined;\n };\n }\n\n scheduleWork(request);\n\n return { request, stream };\n}\n\nfunction createTask(\n request: PayloadRequest,\n id: number,\n value: TaskValue,\n contextValues: ContextValues,\n stack: StackFrame | null,\n): Task {\n request.pendingTasks += 1;\n return { contextValues, id, stack, ...value };\n}\n\nfunction performWork(request: PayloadRequest): void {\n if (request.status === \"closed\") return;\n\n const tasks = request.pingedTasks;\n request.pingedTasks = [];\n\n for (const task of tasks) retryTask(request, task);\n\n flushRows(request);\n}\n\nfunction retryTask(request: PayloadRequest, task: Task): void {\n const frame: RenderFrame = {\n contextValues: cloneContextValues(task.contextValues),\n dispatcher: null,\n pendingAssets: [],\n request,\n stack: task.stack,\n };\n\n try {\n let value: PayloadModel;\n switch (task.kind) {\n case \"node\":\n value = serializeNode(task.value, frame);\n break;\n case \"node-promise\":\n value = serializeNode(readThenable(task.value), frame);\n break;\n case \"promise\":\n value = serializeValue(readThenable(task.value), frame);\n break;\n }\n flushFrameAssets(frame, task.id);\n emitDataRows(request);\n emitRow(request, { id: task.id, tag: \"model\", value });\n finishTask(request);\n } catch (error) {\n if (isThenable(error)) {\n // The retry re-discovers nothing already in emittedAssetKeys, so this\n // attempt's assets must ship now; the task still settles into task.id.\n flushFrameAssets(frame, task.id);\n error.then(\n () => pingTask(request, task),\n () => pingTask(request, task),\n );\n return;\n }\n\n flushFrameAssets(frame, task.id);\n emitRow(request, {\n id: task.id,\n tag: \"error\",\n value: errorRowPayload(request, error, task.stack),\n });\n finishTask(request);\n }\n}\n\nfunction finishTask(request: PayloadRequest): void {\n request.pendingTasks -= 1;\n if (request.pendingTasks === 0) request.allReady.resolve(undefined);\n}\n\nfunction emitDataRows(request: PayloadRequest): void {\n const entries: FigDataHydrationEntry[] = [];\n\n for (const snapshot of request.pendingDataSnapshots.values()) {\n // Stream only settled values. A \"refreshing\" entry exposes a transient stale\n // value while its background refresh is in flight; emitting it would mark the\n // key emitted forever and permanently suppress the fresh value. Skipping it\n // lets the entry stream once its refresh settles.\n if (!snapshot.hasValue || snapshot.status === \"refreshing\") continue;\n\n const key = snapshot.canonicalKey;\n if (request.emittedDataKeys.has(key)) {\n request.pendingDataSnapshots.delete(snapshot.canonicalKey);\n continue;\n }\n\n request.emittedDataKeys.add(key);\n request.pendingDataSnapshots.delete(snapshot.canonicalKey);\n entries.push({ key: snapshot.key, value: snapshot.value });\n }\n\n if (entries.length > 0) {\n emitRow(request, { tag: \"data\", value: encodePayloadDataEntries(entries) });\n }\n}\n\nfunction flushFrameAssets(frame: RenderFrame, rowId: number): void {\n if (frame.pendingAssets.length === 0) return;\n const value = frame.pendingAssets.splice(0);\n emitRow(frame.request, { for: rowId, tag: \"assets\", value });\n}\n\nfunction createPayloadDispatcher(frame: RenderFrame): RenderDispatcher {\n const dispatcher = createStaticDispatcher({\n contextValues: frame.contextValues,\n externalStoreError:\n \"useSyncExternalStore requires getServerSnapshot during payload render.\",\n readPromise: readThenable,\n readData(resource, args) {\n return frame.request.dataStore.readData(resource, args, frame);\n },\n preloadData(resource, args) {\n frame.request.dataStore.preloadData(resource, ...args);\n },\n useId() {\n const id = `fig-pl-${frame.request.nextUseId.toString(32)}`;\n frame.request.nextUseId += 1;\n return id;\n },\n updateError: \"State updates are not allowed during payload render.\",\n });\n\n // Serialized components are render-only: they never re-run on the client,\n // so state, effects, and interactivity are meaningless there — dev throws\n // at first use instead of silently freezing initial state into the wire.\n // Reads stay server-safe: readContext/readData/readPromise/preloadData,\n // useMemo, useId, and useSyncExternalStore's getServerSnapshot path (a\n // read, not a subscription — the static dispatcher already requires it).\n if (__DEV__) {\n const throwClientApi = (hook: string) => (): never => {\n throw new Error(\n `${hook} cannot be used during payload render: serialized components are render-only. Move state, effects, and interactivity into a client reference.`,\n );\n };\n dispatcher.useState = throwClientApi(\"useState\");\n dispatcher.useActionState = throwClientApi(\"useActionState\");\n dispatcher.useTransition = throwClientApi(\"useTransition\");\n dispatcher.useStableEvent = throwClientApi(\"useStableEvent\");\n dispatcher.useReactive = throwClientApi(\"useReactive\");\n dispatcher.useBeforePaint = throwClientApi(\"useBeforePaint\");\n dispatcher.useBeforeLayout = throwClientApi(\"useBeforeLayout\");\n }\n\n return dispatcher;\n}\n\nfunction serializeNode(node: FigNode, frame: RenderFrame): PayloadModel {\n if (Array.isArray(node)) {\n return flattenChildArrays(node).map((child) =>\n serializeNodeOrLazy(child, frame),\n );\n }\n\n if (node === null || node === undefined || typeof node === \"boolean\") {\n return node === undefined ? { $fig: \"undefined\" } : node;\n }\n\n if (typeof node === \"string\" || typeof node === \"number\") {\n return node;\n }\n\n if (isPortal(node)) return null;\n if (isValidElement(node)) return serializeElement(node, frame, false);\n if (isThenable(node)) {\n return outlineTask(\n frame,\n { kind: \"node-promise\", value: node },\n \"promise\",\n node,\n );\n }\n\n throw invalidChildError(node);\n}\n\nfunction serializeNodeOrLazy(\n node: FigNode,\n frame: RenderFrame,\n preserveElementIdentity = false,\n): PayloadModel {\n const graphCheckpoint = checkpointPayloadGraph(frame.request.graph);\n const assetCheckpoint = frame.pendingAssets.length;\n try {\n if (!isValidElement(node)) return serializeNode(node, frame);\n return serializeElement(node, frame, preserveElementIdentity);\n } catch (error) {\n rollbackPayloadGraph(frame.request.graph, graphCheckpoint);\n // Assets discovered inside this subtree belong to the outlined row, not\n // the enclosing one: gating the enclosing row would hold the whole tree's\n // reveal on stylesheets only the hole's content needs.\n const scopedAssets = frame.pendingAssets.splice(assetCheckpoint);\n if (isThenable(error)) {\n return outlineTask(\n frame,\n { kind: \"node\", value: node },\n \"lazy\",\n error,\n scopedAssets,\n );\n }\n return outlineError(frame, error, \"lazy\", scopedAssets);\n }\n}\n\nfunction serializeElement(\n element: FigElement,\n frame: RenderFrame,\n preserveIdentity: boolean,\n): PayloadModel {\n const type = element.type;\n\n if (typeof type === \"string\") {\n return serializeElementModel(\n element,\n type,\n frame,\n preserveIdentity,\n childrenTreeProps,\n );\n }\n\n if (type === Fragment) {\n return serializeElementModel(\n element,\n { $fig: \"fragment\" },\n frame,\n preserveIdentity,\n childrenTreeProps,\n );\n }\n\n if (isClientReference(type)) {\n const clientId = emitClientReference(frame.request, type);\n return serializeElementModel(\n element,\n { $fig: \"client\", id: clientId },\n frame,\n preserveIdentity,\n );\n }\n\n if (isContext(type)) {\n return serializeContextProvider(type, element.props, frame);\n }\n\n if (isAssets(type)) {\n return serializeAssets(element.props, frame);\n }\n\n if (isSuspense(type)) {\n return serializeElementModel(\n element,\n { $fig: \"suspense\" },\n frame,\n preserveIdentity,\n suspenseTreeProps,\n );\n }\n\n if (isErrorBoundary(type)) {\n return serializeNode(element.props.children, frame);\n }\n\n if (isActivity(type)) {\n return serializeNode(element.props.children, frame);\n }\n\n if (isViewTransition(type)) {\n return serializeElementModel(\n element,\n { $fig: \"view-transition\" },\n frame,\n preserveIdentity,\n childrenTreeProps,\n );\n }\n\n if (typeof type === \"function\") {\n return serializeFunctionComponent(type, element.props, frame);\n }\n\n throw new Error(\"Unsupported Fig element type during payload render.\");\n}\n\nfunction serializeElementModel(\n element: FigElement,\n type: PayloadElementModel[\"type\"],\n frame: RenderFrame,\n preserveIdentity: boolean,\n treeProps: ReadonlySet<string> = emptyTreeProps,\n): PayloadModel {\n const id = preserveIdentity\n ? definePayloadGraphElement(frame.request.graph, element)\n : undefined;\n if (typeof id === \"object\") return id;\n const model: PayloadElementModel = {\n $fig: \"element\",\n key: element.key,\n props: serializeProps(\n element.props,\n frame,\n treeProps,\n typeof type === \"string\",\n ),\n type,\n };\n if (id !== undefined) model.id = id;\n return model;\n}\n\nfunction serializeFunctionComponent(\n type: Component,\n props: Props,\n frame: RenderFrame,\n): PayloadModel {\n const assetCheckpoint = frame.pendingAssets.length;\n frame.pendingAssets.push(\n ...serializeAssetResources(\n frame.request,\n frame.request.componentAssets?.(type),\n ),\n );\n frame.dispatcher ??= createPayloadDispatcher(frame);\n const previousDispatcher = setCurrentDispatcher(frame.dispatcher);\n const previousDataStore = setCurrentDataStore(frame.request.dataStore);\n const previousStack = frame.stack;\n frame.stack = { name: type.name || \"Anonymous\", parent: previousStack };\n\n try {\n if (\n __DEV__ &&\n \"$$typeof\" in type &&\n type.$$typeof === Symbol.for(\"fig.data-resource\")\n ) {\n throw new Error(\n \"Payload components cannot be rendered inside Payload. Render the underlying server component directly, or mount separate Payload components from the client tree.\",\n );\n }\n const result = type(props);\n if (isThenable(result)) {\n const scopedAssets = frame.pendingAssets.splice(assetCheckpoint);\n return outlineTask(\n frame,\n { kind: \"node-promise\", value: result },\n \"promise\",\n result,\n scopedAssets,\n );\n }\n return serializeNode(result, frame);\n } catch (error) {\n recordErrorStack(error, frame.stack);\n throw error;\n } finally {\n frame.stack = previousStack;\n setCurrentDataStore(previousDataStore);\n setCurrentDispatcher(previousDispatcher);\n }\n}\n\nfunction serializeContextProvider(\n context: FigContext<unknown>,\n props: Props,\n frame: RenderFrame,\n): PayloadModel {\n return withContextValue(frame.contextValues, context, props.value, () =>\n serializeNode(props.children, frame),\n );\n}\n\nfunction serializeAssets(props: Props, frame: RenderFrame): PayloadModel {\n // Buffered, not emitted: the owning row id is decided at scope exit (see\n // RenderFrame.pendingAssets). Dedupe happens here, so a retried subtree\n // does not re-buffer assets an earlier attempt already shipped.\n frame.pendingAssets.push(\n ...serializeAssetResources(frame.request, props.assets),\n );\n return serializeNode(props.children, frame);\n}\n\nfunction serializeProps(\n props: Props,\n frame: RenderFrame,\n treeProps: ReadonlySet<string>,\n hostElement = false,\n): PayloadModel {\n const clientOnlyBehavior = hostElement\n ? clientOnlyHostBehavior(props)\n : undefined;\n if (clientOnlyBehavior !== undefined) {\n throw new Error(\n `Client-only host behavior from ${clientOnlyBehavior} cannot be ` +\n \"serialized in a payload; move it into a client reference.\",\n );\n }\n\n const value: Record<string, PayloadModel> = {};\n for (const name of Object.keys(props)) {\n // A host `mix` already resolved into these props at element creation;\n // the marker itself holds descriptors (functions) and stays server-side.\n // Component `mix` props still serialize (and fail loudly on functions).\n if (hostElement && name === \"mix\") continue;\n const child = props[name];\n value[name] = treeProps.has(name)\n ? serializeTreeProp(child, frame)\n : serializeValue(child, frame);\n }\n return {\n $fig: \"object\",\n value,\n };\n}\n\nfunction serializeTreeProp(value: FigNode, frame: RenderFrame): PayloadModel {\n if (Array.isArray(value)) {\n return flattenChildArrays(value).map((child) =>\n serializeNodeOrLazy(child, frame),\n );\n }\n return serializeNodeOrLazy(value, frame);\n}\n\nfunction serializeValue(value: unknown, frame: RenderFrame): PayloadModel {\n // Scalar values return from the shared encoder before any graph access, so\n // reusing the request graph here is free (no per-value context allocation).\n if (isPlainPayloadValue(value)) {\n return encodePayloadValueWithGraph(value, frame.request.graph);\n }\n\n if (isClientReference(value)) {\n return { $fig: \"client\", id: emitClientReference(frame.request, value) };\n }\n\n if (isValidElement(value)) return serializeNodeOrLazy(value, frame, true);\n if (isPortal(value)) return null;\n if (isThenable(value)) {\n return outlineTask(frame, { kind: \"promise\", value }, \"promise\", value);\n }\n if (typeof value === \"function\") {\n throw new Error(\"Functions cannot be passed to client references.\");\n }\n\n if (typeof value === \"object\" && value !== null) {\n if (value instanceof Date) {\n return encodePayloadValueWithGraph(value, frame.request.graph);\n }\n if (value instanceof Map) {\n return serializePayloadMap(value, frame.request.graph, ([key, item]) => [\n serializeValue(key, frame),\n serializeValue(item, frame),\n ]);\n }\n if (value instanceof Set) {\n return serializePayloadSet(value, frame.request.graph, (item) =>\n serializeValue(item, frame),\n );\n }\n\n if (Array.isArray(value)) {\n return serializePayloadArray(\n value,\n frame.request.graph,\n () => value,\n (item) => serializeValue(item, frame),\n );\n }\n\n return serializePayloadPlainObject(value, frame.request.graph, (child) =>\n serializeValue(child, frame),\n );\n }\n\n throw new Error(`Cannot serialize ${typeof value} into the payload.`);\n}\nfunction outlineTask(\n frame: RenderFrame,\n value: TaskValue,\n referenceKind: \"lazy\" | \"promise\",\n wakeable: Thenable,\n scopedAssets: SerializedAssetResource[] = [],\n): PayloadSpecialModel {\n const request = frame.request;\n const id = request.nextRowId++;\n if (scopedAssets.length > 0) {\n emitRow(request, { for: id, tag: \"assets\", value: scopedAssets });\n }\n const task = createTask(\n request,\n id,\n value,\n cloneContextValues(frame.contextValues),\n stackForError(wakeable, frame.stack),\n );\n\n wakeable.then(\n () => pingTask(request, task),\n () => pingTask(request, task),\n );\n\n return { $fig: referenceKind, id };\n}\n\nfunction outlineError(\n frame: RenderFrame,\n error: unknown,\n referenceKind: \"lazy\" | \"promise\",\n scopedAssets: SerializedAssetResource[],\n): PayloadSpecialModel {\n const request = frame.request;\n const id = request.nextRowId++;\n // Assets first so a decoder that drops gates on error rows sees the row\n // order it expects; the assets still preload even though the row failed.\n if (scopedAssets.length > 0) {\n emitRow(request, { for: id, tag: \"assets\", value: scopedAssets });\n }\n emitRow(request, {\n id,\n tag: \"error\",\n value: errorRowPayload(request, error, frame.stack),\n });\n return { $fig: referenceKind, id };\n}\n\n// The onError return value is authoritative, like the HTML renderer's\n// reportBoundaryError: message crosses the wire only when the handler says\n// so. Without a handler, development keeps the real message for debugging\n// (payload errors never re-execute on the client, so the wire is the only\n// surface) and production sends an empty payload.\nfunction errorRowPayload(\n request: PayloadRequest,\n error: unknown,\n stack: StackFrame | null,\n): ServerErrorPayload {\n const info = {\n componentStack: componentStack(stackForError(error, stack)),\n };\n if (request.onError === undefined) {\n return __DEV__ ? { message: errorMessage(error) } : {};\n }\n\n try {\n return request.onError(error, info) ?? {};\n } catch {\n return {};\n }\n}\n\nfunction recordErrorStack(error: unknown, stack: StackFrame | null): void {\n if (stack === null) return;\n if (typeof error !== \"object\" || error === null) return;\n if (!errorStacks.has(error)) errorStacks.set(error, stack);\n}\n\nfunction stackForError(\n error: unknown,\n fallback: StackFrame | null,\n): StackFrame | null {\n if (typeof error !== \"object\" || error === null) return fallback;\n return errorStacks.get(error) ?? fallback;\n}\n\nfunction clientReferenceExportName(id: string): string | undefined {\n const hashIndex = id.lastIndexOf(\"#\");\n if (hashIndex === -1) return undefined;\n return id.slice(hashIndex + 1) || undefined;\n}\n\nfunction emitClientReference(\n request: PayloadRequest,\n reference: FigClientReference,\n): number {\n const existing = request.clientReferenceRows.get(reference.id);\n if (existing !== undefined) return existing;\n\n // Resolve assets BEFORE reserving the row id and recording the mapping. A lazy\n // resource thunk (bundler-manifest resolution) may throw; reserving first would\n // leave a row id mapped but never emitted, so a later retry returns the cached\n // id and the client suspends on a chunk that never arrives. Resolving first\n // lets the throw propagate as an ordinary serialization error with no poisoned\n // mapping, so the reference can be retried cleanly.\n const assets = serializeAssetResources(\n request,\n collectClientReferenceAssets(request, reference),\n );\n const value: Extract<PayloadRow, { tag: \"client\" }>[\"value\"] = {\n id: reference.id,\n };\n if (assets.length > 0) value.assets = assets;\n // The \"<module>#<export>\" authoring convention is split here, once, so the\n // wire is self-describing and the client never string-parses ids.\n const exportName = clientReferenceExportName(reference.id);\n if (exportName !== undefined) value.exportName = exportName;\n if (reference.ssr !== undefined) value.ssr = true;\n const id = request.nextRowId++;\n request.clientReferenceRows.set(reference.id, id);\n emitRow(request, {\n id,\n tag: \"client\",\n value,\n });\n return id;\n}\n\nfunction serializeAssetResources(\n request: PayloadRequest,\n value: unknown,\n): SerializedAssetResource[] {\n const input = isFigAssetResource(value)\n ? [value]\n : Array.isArray(value)\n ? value\n : [];\n const resources: SerializedAssetResource[] = [];\n\n for (const resource of input) {\n if (!isFigAssetResource(resource)) continue;\n // Delivery assets are request-global and persistent, so the first\n // definition wins. Metadata is owner-scoped and may legitimately repeat\n // with a different value in another row; the decoder retains those\n // declarations until their owning tree commits.\n if (assetResourceDestination(resource) === \"stream\") {\n const key = assetResourceKey(resource);\n if (request.emittedAssetKeys.has(key)) continue;\n request.emittedAssetKeys.add(key);\n }\n resources.push(serializeAssetResource(resource));\n }\n\n return resources;\n}\n\nfunction collectClientReferenceAssets(\n request: PayloadRequest,\n reference: FigClientReference,\n): readonly FigAssetResource[] {\n const resources = [...clientReferenceAssets(reference)];\n const resolved = request.clientReferenceAssets?.({ id: reference.id });\n if (resolved === undefined) return resources;\n if (isFigAssetResource(resolved)) return [...resources, resolved];\n return Array.isArray(resolved) ? [...resources, ...resolved] : resources;\n}\n\nfunction serializeAssetResource(\n resource: FigAssetResource,\n): SerializedAssetResource {\n // Delivery assets intentionally omit author-supplied `key` and dedupe by\n // their concrete URL. Metadata keeps its owner-local identity when needed.\n // Omitted `undefined` optionals are part of the wire contract, hence the\n // assign-if-defined shape.\n switch (resource.kind) {\n case \"stylesheet\": {\n const model: SerializedAssetResource = {\n href: resource.href,\n kind: resource.kind,\n };\n if (resource.crossorigin !== undefined) {\n model.crossorigin = resource.crossorigin;\n }\n if (resource.media !== undefined) model.media = resource.media;\n if (resource.precedence !== undefined) {\n model.precedence = resource.precedence;\n }\n return model;\n }\n case \"preload\": {\n const model: SerializedAssetResource = {\n as: resource.as,\n href: resource.href,\n kind: resource.kind,\n };\n if (resource.crossorigin !== undefined) {\n model.crossorigin = resource.crossorigin;\n }\n if (resource.fetchpriority !== undefined) {\n model.fetchpriority = resource.fetchpriority;\n }\n if (resource.type !== undefined) model.type = resource.type;\n return model;\n }\n case \"modulepreload\": {\n const model: SerializedAssetResource = {\n href: resource.href,\n kind: resource.kind,\n };\n if (resource.crossorigin !== undefined) {\n model.crossorigin = resource.crossorigin;\n }\n if (resource.fetchpriority !== undefined) {\n model.fetchpriority = resource.fetchpriority;\n }\n return model;\n }\n case \"script\": {\n const model: SerializedAssetResource = {\n kind: resource.kind,\n src: resource.src,\n };\n if (resource.async !== undefined) model.async = resource.async;\n if (resource.crossorigin !== undefined) {\n model.crossorigin = resource.crossorigin;\n }\n if (resource.defer !== undefined) model.defer = resource.defer;\n if (resource.module !== undefined) model.module = resource.module;\n return model;\n }\n case \"font\": {\n const model: SerializedAssetResource = {\n href: resource.href,\n kind: resource.kind,\n type: resource.type,\n };\n if (resource.crossorigin !== undefined) {\n model.crossorigin = resource.crossorigin;\n }\n if (resource.fetchpriority !== undefined) {\n model.fetchpriority = resource.fetchpriority;\n }\n return model;\n }\n case \"preconnect\": {\n const model: SerializedAssetResource = {\n href: resource.href,\n kind: resource.kind,\n };\n if (resource.crossorigin !== undefined) {\n model.crossorigin = resource.crossorigin;\n }\n return model;\n }\n case \"title\":\n return { kind: resource.kind, value: resource.value };\n case \"meta\": {\n const model: SerializedAssetResource = { kind: resource.kind };\n if (resource.charset !== undefined) model.charset = resource.charset;\n if (resource.content !== undefined) model.content = resource.content;\n if (resource[\"http-equiv\"] !== undefined) {\n model[\"http-equiv\"] = resource[\"http-equiv\"];\n }\n if (resource.key !== undefined) model.key = resource.key;\n if (resource.name !== undefined) model.name = resource.name;\n if (resource.property !== undefined) model.property = resource.property;\n return model;\n }\n }\n}\n\nfunction emitRow(request: PayloadRequest, row: PayloadRow): void {\n request.queuedRows.push(jsonPayloadCodec.encodeRow(row));\n flushRows(request);\n}\n\nfunction pingTask(request: PayloadRequest, task: Task): void {\n if (request.status === \"closed\") return;\n request.pingedTasks.push(task);\n scheduleWork(request);\n}\n\nfunction scheduleWork(request: PayloadRequest): void {\n // Many thenables settling in one tick ping many tasks; one performWork\n // pass drains them all, so schedule at most one.\n if (request.workScheduled) return;\n request.workScheduled = true;\n queueMicrotask(() => {\n request.workScheduled = false;\n performWork(request);\n });\n}\n\nfunction flushRows(request: PayloadRequest): void {\n if (request.controller === null || request.status === \"closed\") return;\n if (request.flushingRows) return;\n\n request.flushingRows = true;\n try {\n // Row-granular gating: rows already encode one complete wire row each,\n // so stopping between rows keeps every chunk parse-safe for consumers\n // that interleave per chunk.\n let flushed = 0;\n while (\n flushed < request.queuedRows.length &&\n !streamFlowBlocked(request.controller)\n ) {\n request.controller.enqueue(request.queuedRows[flushed]);\n flushed += 1;\n }\n if (flushed === request.queuedRows.length) request.queuedRows.length = 0;\n else if (flushed > 0) {\n request.queuedRows = request.queuedRows.slice(flushed);\n }\n } finally {\n request.flushingRows = false;\n }\n\n // Deliberately not conditioned on flow: close() only marks the end of the\n // queue, so a full queue with no rows left to write still closes here.\n if (request.pendingTasks === 0 && request.queuedRows.length === 0) {\n request.status = \"closed\";\n request.cleanupAbortListener();\n request.dataStore.dispose();\n request.controller.close();\n }\n}\n\nfunction closeWithError(request: PayloadRequest, error: unknown): void {\n if (request.status === \"closed\") return;\n request.cleanupAbortListener();\n request.status = \"closed\";\n request.dataStore.dispose();\n request.allReady.reject(error);\n request.controller?.error(error);\n}\n\nfunction abortPayloadRequest(request: PayloadRequest, reason?: unknown): void {\n closeWithError(request, reason ?? new PayloadRequestCancelledError());\n}\n\n// Wire-format flattening only: unlike the shared collectChildren, this keeps\n// empty children and does NOT merge adjacent text — the client decodes rows\n// and re-collects children itself, so merging here would double-apply. Flat\n// input (the common case) is returned untouched.\nfunction flattenChildArrays(children: FigNode[]): FigNode[] {\n if (!children.some(Array.isArray)) return children;\n\n const collected: FigNode[] = [];\n for (const child of children) {\n if (Array.isArray(child)) {\n for (const nested of flattenChildArrays(child)) collected.push(nested);\n } else {\n collected.push(child);\n }\n }\n return collected;\n}\n\nfunction invalidChildError(value: unknown): Error {\n return new Error(\n `Invalid Fig child in payload render: ${describeInvalidChild(value)}.`,\n );\n}\n\nfunction throwIfAborted(signal?: AbortSignal | null): void {\n if (signal?.aborted) throw new PayloadRequestCancelledError();\n}\n"],"mappings":";;;;AA+GA,IAAM,+BAAN,cAA2C,MAAM;CAC/C,cAAc;EACZ,MAAM,4BAA4B;EAClC,KAAK,OAAO;CACd;AACF;AA0DA,MAAM,8BAAc,IAAI,QAA4B;AACpD,MAAM,oCAAoB,IAAI,IAAI,CAAC,UAAU,CAAC;AAC9C,MAAM,iCAAiB,IAAI,IAAY;AACvC,MAAM,oCAAoB,IAAI,IAAI,CAAC,YAAY,UAAU,CAAC;AAE1D,SAAgB,sBACd,MACA,UAAgC,CAAC,GACZ;CACrB,MAAM,EAAE,SAAS,WAAW,qBAAqB,MAAM,OAAO;CAC9D,OAAO;EACL,UAAU,QAAQ,SAAS;EAC3B,aAAa,iBAAiB;EAC9B;CACF;AACF;AAEA,SAAS,qBACP,MACA,SACiE;CACjE,eAAe,QAAQ,MAAM;CAE7B,MAAM,uCAAuB,IAAI,IAAoC;CACrE,MAAM,UAA0B;EAC9B,UAAU,SAAe;EACzB,4BAA4B,KAAA;EAC5B,qCAAqB,IAAI,IAAI;EAC7B,uBAAuB,QAAQ;EAC/B,iBAAiB,QAAQ;EACzB,YAAY;EACZ,WAAW,wBAAsC;GAC/C,eAAe;GACf,gBAAgB,UAAkC;IAChD,qBAAqB,IAAI,MAAM,cAAc,KAAK;GACpD;GACA,WAAW,QAAQ;GACnB,gBAAgB,KAAA;EAClB,CAAC;EACD,kCAAkB,IAAI,IAAI;EAC1B,iCAAiB,IAAI,IAAI;EACzB,OAAO,gCAAgC;EACvC,WAAW;EACX,WAAW;EACX,SAAS,QAAQ;EACjB;EACA,cAAc;EACd,aAAa,CAAC;EACd,YAAY,CAAC;EACb,cAAc;EACd,QAAQ;EACR,eAAe;CACjB;CAKA,QAAa,SAAS,QAAQ,YAAY,KAAA,CAAS;CAEnD,QAAQ,YAAY,KAClB,WAAW,SAAS,GAAG;EAAE,MAAM;EAAQ,OAAO;CAAK,mBAAG,IAAI,IAAI,GAAG,IAAI,CACvE;CAEA,MAAM,SAAS,IAAI,eACjB;EACE,MAAM,YAAY;GAChB,QAAQ,aAAa;GACrB,UAAU,OAAO;EACnB;EACA,OAAO;GAGL,UAAU,OAAO;EACnB;EACA,OAAO,QAAQ;GACb,oBAAoB,SAAS,MAAM;EACrC;CACF,GACA,IAAI,0BAA0B,EAC5B,eAAe,oBAAoB,QAAQ,aAAa,EAC1D,CAAC,CACH;CAEA,MAAM,SAAS,QAAQ;CACvB,IAAI,WAAW,KAAA,GAAW;EACxB,MAAM,sBAAsB,oBAAoB,SAAS,OAAO,MAAM;EACtE,OAAO,iBAAiB,SAAS,eAAe,EAAE,MAAM,KAAK,CAAC;EAC9D,QAAQ,6BAA6B;GACnC,OAAO,oBAAoB,SAAS,aAAa;GACjD,QAAQ,6BAA6B,KAAA;EACvC;CACF;CAEA,aAAa,OAAO;CAEpB,OAAO;EAAE;EAAS;CAAO;AAC3B;AAEA,SAAS,WACP,SACA,IACA,OACA,eACA,OACM;CACN,QAAQ,gBAAgB;CACxB,OAAO;EAAE;EAAe;EAAI;EAAO,GAAG;CAAM;AAC9C;AAEA,SAAS,YAAY,SAA+B;CAClD,IAAI,QAAQ,WAAW,UAAU;CAEjC,MAAM,QAAQ,QAAQ;CACtB,QAAQ,cAAc,CAAC;CAEvB,KAAK,MAAM,QAAQ,OAAO,UAAU,SAAS,IAAI;CAEjD,UAAU,OAAO;AACnB;AAEA,SAAS,UAAU,SAAyB,MAAkB;CAC5D,MAAM,QAAqB;EACzB,eAAe,mBAAmB,KAAK,aAAa;EACpD,YAAY;EACZ,eAAe,CAAC;EAChB;EACA,OAAO,KAAK;CACd;CAEA,IAAI;EACF,IAAI;EACJ,QAAQ,KAAK,MAAb;GACE,KAAK;IACH,QAAQ,cAAc,KAAK,OAAO,KAAK;IACvC;GACF,KAAK;IACH,QAAQ,cAAc,aAAa,KAAK,KAAK,GAAG,KAAK;IACrD;GACF,KAAK;IACH,QAAQ,eAAe,aAAa,KAAK,KAAK,GAAG,KAAK;IACtD;EACJ;EACA,iBAAiB,OAAO,KAAK,EAAE;EAC/B,aAAa,OAAO;EACpB,QAAQ,SAAS;GAAE,IAAI,KAAK;GAAI,KAAK;GAAS;EAAM,CAAC;EACrD,WAAW,OAAO;CACpB,SAAS,OAAO;EACd,IAAI,WAAW,KAAK,GAAG;GAGrB,iBAAiB,OAAO,KAAK,EAAE;GAC/B,MAAM,WACE,SAAS,SAAS,IAAI,SACtB,SAAS,SAAS,IAAI,CAC9B;GACA;EACF;EAEA,iBAAiB,OAAO,KAAK,EAAE;EAC/B,QAAQ,SAAS;GACf,IAAI,KAAK;GACT,KAAK;GACL,OAAO,gBAAgB,SAAS,OAAO,KAAK,KAAK;EACnD,CAAC;EACD,WAAW,OAAO;CACpB;AACF;AAEA,SAAS,WAAW,SAA+B;CACjD,QAAQ,gBAAgB;CACxB,IAAI,QAAQ,iBAAiB,GAAG,QAAQ,SAAS,QAAQ,KAAA,CAAS;AACpE;AAEA,SAAS,aAAa,SAA+B;CACnD,MAAM,UAAmC,CAAC;CAE1C,KAAK,MAAM,YAAY,QAAQ,qBAAqB,OAAO,GAAG;EAK5D,IAAI,CAAC,SAAS,YAAY,SAAS,WAAW,cAAc;EAE5D,MAAM,MAAM,SAAS;EACrB,IAAI,QAAQ,gBAAgB,IAAI,GAAG,GAAG;GACpC,QAAQ,qBAAqB,OAAO,SAAS,YAAY;GACzD;EACF;EAEA,QAAQ,gBAAgB,IAAI,GAAG;EAC/B,QAAQ,qBAAqB,OAAO,SAAS,YAAY;EACzD,QAAQ,KAAK;GAAE,KAAK,SAAS;GAAK,OAAO,SAAS;EAAM,CAAC;CAC3D;CAEA,IAAI,QAAQ,SAAS,GACnB,QAAQ,SAAS;EAAE,KAAK;EAAQ,OAAO,yBAAyB,OAAO;CAAE,CAAC;AAE9E;AAEA,SAAS,iBAAiB,OAAoB,OAAqB;CACjE,IAAI,MAAM,cAAc,WAAW,GAAG;CACtC,MAAM,QAAQ,MAAM,cAAc,OAAO,CAAC;CAC1C,QAAQ,MAAM,SAAS;EAAE,KAAK;EAAO,KAAK;EAAU;CAAM,CAAC;AAC7D;AAEA,SAAS,wBAAwB,OAAsC;CAyCrE,OAxCmB,uBAAuB;EACxC,eAAe,MAAM;EACrB,oBACE;EACF,aAAa;EACb,SAAS,UAAU,MAAM;GACvB,OAAO,MAAM,QAAQ,UAAU,SAAS,UAAU,MAAM,KAAK;EAC/D;EACA,YAAY,UAAU,MAAM;GAC1B,MAAM,QAAQ,UAAU,YAAY,UAAU,GAAG,IAAI;EACvD;EACA,QAAQ;GACN,MAAM,KAAK,UAAU,MAAM,QAAQ,UAAU,SAAS,EAAE;GACxD,MAAM,QAAQ,aAAa;GAC3B,OAAO;EACT;EACA,aAAa;CACf,CAuBgB;AAClB;AAEA,SAAS,cAAc,MAAe,OAAkC;CACtE,IAAI,MAAM,QAAQ,IAAI,GACpB,OAAO,mBAAmB,IAAI,CAAC,CAAC,KAAK,UACnC,oBAAoB,OAAO,KAAK,CAClC;CAGF,IAAI,SAAS,QAAQ,SAAS,KAAA,KAAa,OAAO,SAAS,WACzD,OAAO,SAAS,KAAA,IAAY,EAAE,MAAM,YAAY,IAAI;CAGtD,IAAI,OAAO,SAAS,YAAY,OAAO,SAAS,UAC9C,OAAO;CAGT,IAAI,SAAS,IAAI,GAAG,OAAO;CAC3B,IAAI,eAAe,IAAI,GAAG,OAAO,iBAAiB,MAAM,OAAO,KAAK;CACpE,IAAI,WAAW,IAAI,GACjB,OAAO,YACL,OACA;EAAE,MAAM;EAAgB,OAAO;CAAK,GACpC,WACA,IACF;CAGF,MAAMA,oBAAkB,IAAI;AAC9B;AAEA,SAAS,oBACP,MACA,OACA,0BAA0B,OACZ;CACd,MAAM,kBAAkB,uBAAuB,MAAM,QAAQ,KAAK;CAClE,MAAM,kBAAkB,MAAM,cAAc;CAC5C,IAAI;EACF,IAAI,CAAC,eAAe,IAAI,GAAG,OAAO,cAAc,MAAM,KAAK;EAC3D,OAAO,iBAAiB,MAAM,OAAO,uBAAuB;CAC9D,SAAS,OAAO;EACd,qBAAqB,MAAM,QAAQ,OAAO,eAAe;EAIzD,MAAM,eAAe,MAAM,cAAc,OAAO,eAAe;EAC/D,IAAI,WAAW,KAAK,GAClB,OAAO,YACL,OACA;GAAE,MAAM;GAAQ,OAAO;EAAK,GAC5B,QACA,OACA,YACF;EAEF,OAAO,aAAa,OAAO,OAAO,QAAQ,YAAY;CACxD;AACF;AAEA,SAAS,iBACP,SACA,OACA,kBACc;CACd,MAAM,OAAO,QAAQ;CAErB,IAAI,OAAO,SAAS,UAClB,OAAO,sBACL,SACA,MACA,OACA,kBACA,iBACF;CAGF,IAAI,SAAS,UACX,OAAO,sBACL,SACA,EAAE,MAAM,WAAW,GACnB,OACA,kBACA,iBACF;CAGF,IAAI,kBAAkB,IAAI,GAExB,OAAO,sBACL,SACA;EAAE,MAAM;EAAU,IAHH,oBAAoB,MAAM,SAAS,IAGrB;CAAE,GAC/B,OACA,gBACF;CAGF,IAAI,UAAU,IAAI,GAChB,OAAO,yBAAyB,MAAM,QAAQ,OAAO,KAAK;CAG5D,IAAI,SAAS,IAAI,GACf,OAAO,gBAAgB,QAAQ,OAAO,KAAK;CAG7C,IAAI,WAAW,IAAI,GACjB,OAAO,sBACL,SACA,EAAE,MAAM,WAAW,GACnB,OACA,kBACA,iBACF;CAGF,IAAI,gBAAgB,IAAI,GACtB,OAAO,cAAc,QAAQ,MAAM,UAAU,KAAK;CAGpD,IAAI,WAAW,IAAI,GACjB,OAAO,cAAc,QAAQ,MAAM,UAAU,KAAK;CAGpD,IAAI,iBAAiB,IAAI,GACvB,OAAO,sBACL,SACA,EAAE,MAAM,kBAAkB,GAC1B,OACA,kBACA,iBACF;CAGF,IAAI,OAAO,SAAS,YAClB,OAAO,2BAA2B,MAAM,QAAQ,OAAO,KAAK;CAG9D,MAAM,IAAI,MAAM,qDAAqD;AACvE;AAEA,SAAS,sBACP,SACA,MACA,OACA,kBACA,YAAiC,gBACnB;CACd,MAAM,KAAK,mBACP,0BAA0B,MAAM,QAAQ,OAAO,OAAO,IACtD,KAAA;CACJ,IAAI,OAAO,OAAO,UAAU,OAAO;CACnC,MAAM,QAA6B;EACjC,MAAM;EACN,KAAK,QAAQ;EACb,OAAO,eACL,QAAQ,OACR,OACA,WACA,OAAO,SAAS,QAClB;EACA;CACF;CACA,IAAI,OAAO,KAAA,GAAW,MAAM,KAAK;CACjC,OAAO;AACT;AAEA,SAAS,2BACP,MACA,OACA,OACc;CACd,MAAM,kBAAkB,MAAM,cAAc;CAC5C,MAAM,cAAc,KAClB,GAAG,wBACD,MAAM,SACN,MAAM,QAAQ,kBAAkB,IAAI,CACtC,CACF;CACA,MAAM,eAAe,wBAAwB,KAAK;CAClD,MAAM,qBAAqB,qBAAqB,MAAM,UAAU;CAChE,MAAM,oBAAoB,oBAAoB,MAAM,QAAQ,SAAS;CACrE,MAAM,gBAAgB,MAAM;CAC5B,MAAM,QAAQ;EAAE,MAAM,KAAK,QAAQ;EAAa,QAAQ;CAAc;CAEtE,IAAI;EAUF,MAAM,SAAS,KAAK,KAAK;EACzB,IAAI,WAAW,MAAM,GAAG;GACtB,MAAM,eAAe,MAAM,cAAc,OAAO,eAAe;GAC/D,OAAO,YACL,OACA;IAAE,MAAM;IAAgB,OAAO;GAAO,GACtC,WACA,QACA,YACF;EACF;EACA,OAAO,cAAc,QAAQ,KAAK;CACpC,SAAS,OAAO;EACd,iBAAiB,OAAO,MAAM,KAAK;EACnC,MAAM;CACR,UAAU;EACR,MAAM,QAAQ;EACd,oBAAoB,iBAAiB;EACrC,qBAAqB,kBAAkB;CACzC;AACF;AAEA,SAAS,yBACP,SACA,OACA,OACc;CACd,OAAO,iBAAiB,MAAM,eAAe,SAAS,MAAM,aAC1D,cAAc,MAAM,UAAU,KAAK,CACrC;AACF;AAEA,SAAS,gBAAgB,OAAc,OAAkC;CAIvE,MAAM,cAAc,KAClB,GAAG,wBAAwB,MAAM,SAAS,MAAM,MAAM,CACxD;CACA,OAAO,cAAc,MAAM,UAAU,KAAK;AAC5C;AAEA,SAAS,eACP,OACA,OACA,WACA,cAAc,OACA;CACd,MAAM,qBAAqB,cACvB,uBAAuB,KAAK,IAC5B,KAAA;CACJ,IAAI,uBAAuB,KAAA,GACzB,MAAM,IAAI,MACR,kCAAkC,mBAAmB,qEAEvD;CAGF,MAAM,QAAsC,CAAC;CAC7C,KAAK,MAAM,QAAQ,OAAO,KAAK,KAAK,GAAG;EAIrC,IAAI,eAAe,SAAS,OAAO;EACnC,MAAM,QAAQ,MAAM;EACpB,MAAM,QAAQ,UAAU,IAAI,IAAI,IAC5B,kBAAkB,OAAO,KAAK,IAC9B,eAAe,OAAO,KAAK;CACjC;CACA,OAAO;EACL,MAAM;EACN;CACF;AACF;AAEA,SAAS,kBAAkB,OAAgB,OAAkC;CAC3E,IAAI,MAAM,QAAQ,KAAK,GACrB,OAAO,mBAAmB,KAAK,CAAC,CAAC,KAAK,UACpC,oBAAoB,OAAO,KAAK,CAClC;CAEF,OAAO,oBAAoB,OAAO,KAAK;AACzC;AAEA,SAAS,eAAe,OAAgB,OAAkC;CAGxE,IAAI,oBAAoB,KAAK,GAC3B,OAAO,4BAA4B,OAAO,MAAM,QAAQ,KAAK;CAG/D,IAAI,kBAAkB,KAAK,GACzB,OAAO;EAAE,MAAM;EAAU,IAAI,oBAAoB,MAAM,SAAS,KAAK;CAAE;CAGzE,IAAI,eAAe,KAAK,GAAG,OAAO,oBAAoB,OAAO,OAAO,IAAI;CACxE,IAAI,SAAS,KAAK,GAAG,OAAO;CAC5B,IAAI,WAAW,KAAK,GAClB,OAAO,YAAY,OAAO;EAAE,MAAM;EAAW;CAAM,GAAG,WAAW,KAAK;CAExE,IAAI,OAAO,UAAU,YACnB,MAAM,IAAI,MAAM,kDAAkD;CAGpE,IAAI,OAAO,UAAU,YAAY,UAAU,MAAM;EAC/C,IAAI,iBAAiB,MACnB,OAAO,4BAA4B,OAAO,MAAM,QAAQ,KAAK;EAE/D,IAAI,iBAAiB,KACnB,OAAO,oBAAoB,OAAO,MAAM,QAAQ,QAAQ,CAAC,KAAK,UAAU,CACtE,eAAe,KAAK,KAAK,GACzB,eAAe,MAAM,KAAK,CAC5B,CAAC;EAEH,IAAI,iBAAiB,KACnB,OAAO,oBAAoB,OAAO,MAAM,QAAQ,QAAQ,SACtD,eAAe,MAAM,KAAK,CAC5B;EAGF,IAAI,MAAM,QAAQ,KAAK,GACrB,OAAO,sBACL,OACA,MAAM,QAAQ,aACR,QACL,SAAS,eAAe,MAAM,KAAK,CACtC;EAGF,OAAO,4BAA4B,OAAO,MAAM,QAAQ,QAAQ,UAC9D,eAAe,OAAO,KAAK,CAC7B;CACF;CAEA,MAAM,IAAI,MAAM,oBAAoB,OAAO,MAAM,mBAAmB;AACtE;AACA,SAAS,YACP,OACA,OACA,eACA,UACA,eAA0C,CAAC,GACtB;CACrB,MAAM,UAAU,MAAM;CACtB,MAAM,KAAK,QAAQ;CACnB,IAAI,aAAa,SAAS,GACxB,QAAQ,SAAS;EAAE,KAAK;EAAI,KAAK;EAAU,OAAO;CAAa,CAAC;CAElE,MAAM,OAAO,WACX,SACA,IACA,OACA,mBAAmB,MAAM,aAAa,GACtC,cAAc,UAAU,MAAM,KAAK,CACrC;CAEA,SAAS,WACD,SAAS,SAAS,IAAI,SACtB,SAAS,SAAS,IAAI,CAC9B;CAEA,OAAO;EAAE,MAAM;EAAe;CAAG;AACnC;AAEA,SAAS,aACP,OACA,OACA,eACA,cACqB;CACrB,MAAM,UAAU,MAAM;CACtB,MAAM,KAAK,QAAQ;CAGnB,IAAI,aAAa,SAAS,GACxB,QAAQ,SAAS;EAAE,KAAK;EAAI,KAAK;EAAU,OAAO;CAAa,CAAC;CAElE,QAAQ,SAAS;EACf;EACA,KAAK;EACL,OAAO,gBAAgB,SAAS,OAAO,MAAM,KAAK;CACpD,CAAC;CACD,OAAO;EAAE,MAAM;EAAe;CAAG;AACnC;AAOA,SAAS,gBACP,SACA,OACA,OACoB;CACpB,MAAM,OAAO,EACX,gBAAgB,eAAe,cAAc,OAAO,KAAK,CAAC,EAC5D;CACA,IAAI,QAAQ,YAAY,KAAA,GACtB,OAAoD,CAAC;CAGvD,IAAI;EACF,OAAO,QAAQ,QAAQ,OAAO,IAAI,KAAK,CAAC;CAC1C,QAAQ;EACN,OAAO,CAAC;CACV;AACF;AAEA,SAAS,iBAAiB,OAAgB,OAAgC;CACxE,IAAI,UAAU,MAAM;CACpB,IAAI,OAAO,UAAU,YAAY,UAAU,MAAM;CACjD,IAAI,CAAC,YAAY,IAAI,KAAK,GAAG,YAAY,IAAI,OAAO,KAAK;AAC3D;AAEA,SAAS,cACP,OACA,UACmB;CACnB,IAAI,OAAO,UAAU,YAAY,UAAU,MAAM,OAAO;CACxD,OAAO,YAAY,IAAI,KAAK,KAAK;AACnC;AAEA,SAAS,0BAA0B,IAAgC;CACjE,MAAM,YAAY,GAAG,YAAY,GAAG;CACpC,IAAI,cAAc,IAAI,OAAO,KAAA;CAC7B,OAAO,GAAG,MAAM,YAAY,CAAC,KAAK,KAAA;AACpC;AAEA,SAAS,oBACP,SACA,WACQ;CACR,MAAM,WAAW,QAAQ,oBAAoB,IAAI,UAAU,EAAE;CAC7D,IAAI,aAAa,KAAA,GAAW,OAAO;CAQnC,MAAM,SAAS,wBACb,SACA,6BAA6B,SAAS,SAAS,CACjD;CACA,MAAM,QAAyD,EAC7D,IAAI,UAAU,GAChB;CACA,IAAI,OAAO,SAAS,GAAG,MAAM,SAAS;CAGtC,MAAM,aAAa,0BAA0B,UAAU,EAAE;CACzD,IAAI,eAAe,KAAA,GAAW,MAAM,aAAa;CACjD,IAAI,UAAU,QAAQ,KAAA,GAAW,MAAM,MAAM;CAC7C,MAAM,KAAK,QAAQ;CACnB,QAAQ,oBAAoB,IAAI,UAAU,IAAI,EAAE;CAChD,QAAQ,SAAS;EACf;EACA,KAAK;EACL;CACF,CAAC;CACD,OAAO;AACT;AAEA,SAAS,wBACP,SACA,OAC2B;CAC3B,MAAM,QAAQ,mBAAmB,KAAK,IAClC,CAAC,KAAK,IACN,MAAM,QAAQ,KAAK,IACjB,QACA,CAAC;CACP,MAAM,YAAuC,CAAC;CAE9C,KAAK,MAAM,YAAY,OAAO;EAC5B,IAAI,CAAC,mBAAmB,QAAQ,GAAG;EAKnC,IAAI,yBAAyB,QAAQ,MAAM,UAAU;GACnD,MAAM,MAAM,iBAAiB,QAAQ;GACrC,IAAI,QAAQ,iBAAiB,IAAI,GAAG,GAAG;GACvC,QAAQ,iBAAiB,IAAI,GAAG;EAClC;EACA,UAAU,KAAK,uBAAuB,QAAQ,CAAC;CACjD;CAEA,OAAO;AACT;AAEA,SAAS,6BACP,SACA,WAC6B;CAC7B,MAAM,YAAY,CAAC,GAAG,sBAAsB,SAAS,CAAC;CACtD,MAAM,WAAW,QAAQ,wBAAwB,EAAE,IAAI,UAAU,GAAG,CAAC;CACrE,IAAI,aAAa,KAAA,GAAW,OAAO;CACnC,IAAI,mBAAmB,QAAQ,GAAG,OAAO,CAAC,GAAG,WAAW,QAAQ;CAChE,OAAO,MAAM,QAAQ,QAAQ,IAAI,CAAC,GAAG,WAAW,GAAG,QAAQ,IAAI;AACjE;AAEA,SAAS,uBACP,UACyB;CAKzB,QAAQ,SAAS,MAAjB;EACE,KAAK,cAAc;GACjB,MAAM,QAAiC;IACrC,MAAM,SAAS;IACf,MAAM,SAAS;GACjB;GACA,IAAI,SAAS,gBAAgB,KAAA,GAC3B,MAAM,cAAc,SAAS;GAE/B,IAAI,SAAS,UAAU,KAAA,GAAW,MAAM,QAAQ,SAAS;GACzD,IAAI,SAAS,eAAe,KAAA,GAC1B,MAAM,aAAa,SAAS;GAE9B,OAAO;EACT;EACA,KAAK,WAAW;GACd,MAAM,QAAiC;IACrC,IAAI,SAAS;IACb,MAAM,SAAS;IACf,MAAM,SAAS;GACjB;GACA,IAAI,SAAS,gBAAgB,KAAA,GAC3B,MAAM,cAAc,SAAS;GAE/B,IAAI,SAAS,kBAAkB,KAAA,GAC7B,MAAM,gBAAgB,SAAS;GAEjC,IAAI,SAAS,SAAS,KAAA,GAAW,MAAM,OAAO,SAAS;GACvD,OAAO;EACT;EACA,KAAK,iBAAiB;GACpB,MAAM,QAAiC;IACrC,MAAM,SAAS;IACf,MAAM,SAAS;GACjB;GACA,IAAI,SAAS,gBAAgB,KAAA,GAC3B,MAAM,cAAc,SAAS;GAE/B,IAAI,SAAS,kBAAkB,KAAA,GAC7B,MAAM,gBAAgB,SAAS;GAEjC,OAAO;EACT;EACA,KAAK,UAAU;GACb,MAAM,QAAiC;IACrC,MAAM,SAAS;IACf,KAAK,SAAS;GAChB;GACA,IAAI,SAAS,UAAU,KAAA,GAAW,MAAM,QAAQ,SAAS;GACzD,IAAI,SAAS,gBAAgB,KAAA,GAC3B,MAAM,cAAc,SAAS;GAE/B,IAAI,SAAS,UAAU,KAAA,GAAW,MAAM,QAAQ,SAAS;GACzD,IAAI,SAAS,WAAW,KAAA,GAAW,MAAM,SAAS,SAAS;GAC3D,OAAO;EACT;EACA,KAAK,QAAQ;GACX,MAAM,QAAiC;IACrC,MAAM,SAAS;IACf,MAAM,SAAS;IACf,MAAM,SAAS;GACjB;GACA,IAAI,SAAS,gBAAgB,KAAA,GAC3B,MAAM,cAAc,SAAS;GAE/B,IAAI,SAAS,kBAAkB,KAAA,GAC7B,MAAM,gBAAgB,SAAS;GAEjC,OAAO;EACT;EACA,KAAK,cAAc;GACjB,MAAM,QAAiC;IACrC,MAAM,SAAS;IACf,MAAM,SAAS;GACjB;GACA,IAAI,SAAS,gBAAgB,KAAA,GAC3B,MAAM,cAAc,SAAS;GAE/B,OAAO;EACT;EACA,KAAK,SACH,OAAO;GAAE,MAAM,SAAS;GAAM,OAAO,SAAS;EAAM;EACtD,KAAK,QAAQ;GACX,MAAM,QAAiC,EAAE,MAAM,SAAS,KAAK;GAC7D,IAAI,SAAS,YAAY,KAAA,GAAW,MAAM,UAAU,SAAS;GAC7D,IAAI,SAAS,YAAY,KAAA,GAAW,MAAM,UAAU,SAAS;GAC7D,IAAI,SAAS,kBAAkB,KAAA,GAC7B,MAAM,gBAAgB,SAAS;GAEjC,IAAI,SAAS,QAAQ,KAAA,GAAW,MAAM,MAAM,SAAS;GACrD,IAAI,SAAS,SAAS,KAAA,GAAW,MAAM,OAAO,SAAS;GACvD,IAAI,SAAS,aAAa,KAAA,GAAW,MAAM,WAAW,SAAS;GAC/D,OAAO;EACT;CACF;AACF;AAEA,SAAS,QAAQ,SAAyB,KAAuB;CAC/D,QAAQ,WAAW,KAAK,iBAAiB,UAAU,GAAG,CAAC;CACvD,UAAU,OAAO;AACnB;AAEA,SAAS,SAAS,SAAyB,MAAkB;CAC3D,IAAI,QAAQ,WAAW,UAAU;CACjC,QAAQ,YAAY,KAAK,IAAI;CAC7B,aAAa,OAAO;AACtB;AAEA,SAAS,aAAa,SAA+B;CAGnD,IAAI,QAAQ,eAAe;CAC3B,QAAQ,gBAAgB;CACxB,qBAAqB;EACnB,QAAQ,gBAAgB;EACxB,YAAY,OAAO;CACrB,CAAC;AACH;AAEA,SAAS,UAAU,SAA+B;CAChD,IAAI,QAAQ,eAAe,QAAQ,QAAQ,WAAW,UAAU;CAChE,IAAI,QAAQ,cAAc;CAE1B,QAAQ,eAAe;CACvB,IAAI;EAIF,IAAI,UAAU;EACd,OACE,UAAU,QAAQ,WAAW,UAC7B,CAAC,kBAAkB,QAAQ,UAAU,GACrC;GACA,QAAQ,WAAW,QAAQ,QAAQ,WAAW,QAAQ;GACtD,WAAW;EACb;EACA,IAAI,YAAY,QAAQ,WAAW,QAAQ,QAAQ,WAAW,SAAS;OAClE,IAAI,UAAU,GACjB,QAAQ,aAAa,QAAQ,WAAW,MAAM,OAAO;CAEzD,UAAU;EACR,QAAQ,eAAe;CACzB;CAIA,IAAI,QAAQ,iBAAiB,KAAK,QAAQ,WAAW,WAAW,GAAG;EACjE,QAAQ,SAAS;EACjB,QAAQ,qBAAqB;EAC7B,QAAQ,UAAU,QAAQ;EAC1B,QAAQ,WAAW,MAAM;CAC3B;AACF;AAEA,SAAS,eAAe,SAAyB,OAAsB;CACrE,IAAI,QAAQ,WAAW,UAAU;CACjC,QAAQ,qBAAqB;CAC7B,QAAQ,SAAS;CACjB,QAAQ,UAAU,QAAQ;CAC1B,QAAQ,SAAS,OAAO,KAAK;CAC7B,QAAQ,YAAY,MAAM,KAAK;AACjC;AAEA,SAAS,oBAAoB,SAAyB,QAAwB;CAC5E,eAAe,SAAS,UAAU,IAAI,6BAA6B,CAAC;AACtE;AAMA,SAAS,mBAAmB,UAAgC;CAC1D,IAAI,CAAC,SAAS,KAAK,MAAM,OAAO,GAAG,OAAO;CAE1C,MAAM,YAAuB,CAAC;CAC9B,KAAK,MAAM,SAAS,UAClB,IAAI,MAAM,QAAQ,KAAK,GACrB,KAAK,MAAM,UAAU,mBAAmB,KAAK,GAAG,UAAU,KAAK,MAAM;MAErE,UAAU,KAAK,KAAK;CAGxB,OAAO;AACT;AAEA,SAASA,oBAAkB,OAAuB;CAChD,uBAAO,IAAI,MACT,wCAAwC,qBAAqB,KAAK,EAAE,EACtE;AACF;AAEA,SAAS,eAAe,QAAmC;CACzD,IAAI,QAAQ,SAAS,MAAM,IAAI,6BAA6B;AAC9D"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import { t as escapeAttribute } from "./escaping-DAot8sFu.js";
|
|
1
2
|
//#region src/shared.ts
|
|
3
|
+
const STREAMED_METADATA_ATTRIBUTE = "data-fig-streamed-metadata";
|
|
2
4
|
function contextStack(values, context) {
|
|
3
5
|
let stack = values.get(context);
|
|
4
6
|
if (stack === void 0) {
|
|
@@ -38,6 +40,14 @@ function cloneContextValues(values) {
|
|
|
38
40
|
for (const [context, stack] of values) clone.set(context, [...stack]);
|
|
39
41
|
return clone;
|
|
40
42
|
}
|
|
43
|
+
const DEFAULT_STREAM_HIGH_WATER_MARK = 65536;
|
|
44
|
+
function streamHighWaterMark(option) {
|
|
45
|
+
return Math.max(1, option ?? DEFAULT_STREAM_HIGH_WATER_MARK);
|
|
46
|
+
}
|
|
47
|
+
function streamFlowBlocked(controller) {
|
|
48
|
+
const desiredSize = controller?.desiredSize;
|
|
49
|
+
return typeof desiredSize === "number" && desiredSize <= 0;
|
|
50
|
+
}
|
|
41
51
|
function resolveInitialState(initialState) {
|
|
42
52
|
return typeof initialState === "function" ? initialState() : initialState;
|
|
43
53
|
}
|
|
@@ -81,9 +91,9 @@ function createStaticDispatcher(options) {
|
|
|
81
91
|
return getServerSnapshot();
|
|
82
92
|
},
|
|
83
93
|
useStableEvent(_handler) {
|
|
84
|
-
return (
|
|
94
|
+
return (..._args) => {
|
|
85
95
|
throw new Error("Stable events cannot be called during server render.");
|
|
86
|
-
}
|
|
96
|
+
};
|
|
87
97
|
},
|
|
88
98
|
readContext(context) {
|
|
89
99
|
return readContextValue(options.contextValues, context);
|
|
@@ -99,7 +109,15 @@ function createStaticDispatcher(options) {
|
|
|
99
109
|
}
|
|
100
110
|
};
|
|
101
111
|
}
|
|
112
|
+
function componentStack(stack) {
|
|
113
|
+
const frames = [];
|
|
114
|
+
for (let frame = stack; frame !== null; frame = frame.parent) frames.push(` at ${frame.name}`);
|
|
115
|
+
return frames.length === 0 ? "" : `\n${frames.join("\n")}`;
|
|
116
|
+
}
|
|
117
|
+
function nonceAttribute(nonce) {
|
|
118
|
+
return nonce === void 0 ? "" : ` nonce="${escapeAttribute(nonce)}"`;
|
|
119
|
+
}
|
|
102
120
|
//#endregion
|
|
103
|
-
export {
|
|
121
|
+
export { deferred as a, streamHighWaterMark as c, createStaticDispatcher as i, withContextValue as l, cloneContextValues as n, nonceAttribute as o, componentStack as r, streamFlowBlocked as s, STREAMED_METADATA_ATTRIBUTE as t };
|
|
104
122
|
|
|
105
|
-
//# sourceMappingURL=shared-
|
|
123
|
+
//# sourceMappingURL=shared-Bna74_aZ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared-Bna74_aZ.js","names":[],"sources":["../src/shared.ts"],"sourcesContent":["import type {\n ActionStateAction,\n ActionStateRunner,\n DependencyList,\n EffectCallback,\n ExternalStoreSubscribe,\n FigContext,\n StateSetter,\n StartTransition,\n} from \"@bgub/fig\";\nimport type {\n DataResource,\n RenderDispatcher,\n StableEventCallerArgs,\n} from \"@bgub/fig/internal\";\nimport { escapeAttribute } from \"./escaping.ts\";\n\nexport type ContextValues = Map<FigContext<unknown>, unknown[]>;\n\nexport const STREAMED_METADATA_ATTRIBUTE = \"data-fig-streamed-metadata\";\n\nexport interface StackFrame {\n name: string;\n parent: StackFrame | null;\n}\n\ninterface StaticDispatcherOptions {\n contextValues: ContextValues;\n externalStoreError: string;\n preloadData<TArgs extends unknown[], TValue>(\n resource: DataResource<TArgs, TValue>,\n args: TArgs,\n ): void;\n readData<TArgs extends unknown[], TValue>(\n resource: DataResource<TArgs, TValue>,\n args: TArgs,\n ): TValue;\n readPromise<T>(promise: PromiseLike<T>): T;\n updateError: string;\n useId(): string;\n}\n\nfunction contextStack(\n values: ContextValues,\n context: FigContext<unknown>,\n): unknown[] {\n let stack = values.get(context);\n\n if (stack === undefined) {\n stack = [];\n values.set(context, stack);\n }\n\n return stack;\n}\n\nexport function withContextValue<T>(\n values: ContextValues,\n context: FigContext<unknown>,\n value: unknown,\n callback: () => T,\n): T {\n const stack = contextStack(values, context);\n stack.push(value);\n\n try {\n return callback();\n } finally {\n stack.pop();\n }\n}\n\nfunction readContextValue<T>(values: ContextValues, context: FigContext<T>): T {\n const stack = values.get(context as FigContext<unknown>);\n if (stack !== undefined && stack.length > 0) {\n return stack[stack.length - 1] as T;\n }\n\n return context.defaultValue;\n}\n\nexport interface Deferred<T> {\n promise: Promise<T>;\n reject: (reason: unknown) => void;\n resolve: (value: T) => void;\n}\n\nexport function deferred<T>(): Deferred<T> {\n let resolve: Deferred<T>[\"resolve\"] = () => undefined;\n let reject: Deferred<T>[\"reject\"] = () => undefined;\n const promise = new Promise<T>((innerResolve, innerReject) => {\n resolve = innerResolve;\n reject = innerReject;\n });\n return { promise, reject, resolve };\n}\n\nexport function cloneContextValues(values: ContextValues): ContextValues {\n const clone: ContextValues = new Map();\n for (const [context, stack] of values) clone.set(context, [...stack]);\n return clone;\n}\n\n// Encoded bytes a render result stream's internal queue holds before flushing\n// pauses (resumed by consumer pulls). Shared by the HTML and payload\n// renderers. Large enough that a healthy consumer never blocks a flush; small\n// enough to bound per-connection buffering when the consumer stalls.\n// Rendering itself never pauses — only writing to the stream does.\nconst DEFAULT_STREAM_HIGH_WATER_MARK = 65536;\n\n// 0 would deadlock: desiredSize never goes positive, and read requests alone\n// do not make it so. 1 byte is the honest pure-pull minimum.\nexport function streamHighWaterMark(option: number | undefined): number {\n return Math.max(1, option ?? DEFAULT_STREAM_HIGH_WATER_MARK);\n}\n\n// Blocked means the stream's internal queue is at or past its high-water\n// mark; completed work then waits un-enqueued until the consumer pulls.\n// desiredSize is null on an errored stream — never blocked, because fatal\n// paths close the request before any further writes.\nexport function streamFlowBlocked(\n controller: ReadableStreamDefaultController<Uint8Array> | null,\n): boolean {\n const desiredSize = controller?.desiredSize;\n return typeof desiredSize === \"number\" && desiredSize <= 0;\n}\n\nfunction resolveInitialState<S>(initialState: S | (() => S)): S {\n return typeof initialState === \"function\"\n ? (initialState as () => S)()\n : initialState;\n}\n\nexport function createStaticDispatcher(\n options: StaticDispatcherOptions,\n): RenderDispatcher {\n return {\n useState<S>(initialState: S | (() => S)): [S, StateSetter<S>] {\n const value = resolveInitialState(initialState);\n const setState: StateSetter<typeof value> = () => {\n throw new Error(options.updateError);\n };\n return [value, setState];\n },\n useActionState<S, Args extends unknown[]>(\n _action: ActionStateAction<S, Args>,\n initialState: S,\n ): [S, ActionStateRunner<Args>, boolean] {\n const runner: ActionStateRunner<Args> = () => {\n throw new Error(options.updateError);\n };\n return [initialState, runner, false];\n },\n useId(): string {\n return options.useId();\n },\n useDeferredValue<T>(\n value: T,\n _initialValue: T | undefined,\n _hasInitialValue: boolean,\n ): T {\n return value;\n },\n useMemo<T>(calculate: () => T, _deps: DependencyList): T {\n return calculate();\n },\n useTransition(): [boolean, StartTransition] {\n // Server transitions run synchronously to completion; the signal never\n // aborts (there is no supersede/unmount lifecycle during a request).\n const startTransition: StartTransition = (\n callback: (signal: AbortSignal) => void | PromiseLike<void>,\n ) => void callback(new AbortController().signal);\n return [false, startTransition];\n },\n useReactive(_effect: EffectCallback, _deps?: DependencyList): void {},\n useBeforePaint(_effect: EffectCallback, _deps?: DependencyList): void {},\n useBeforeLayout(_effect: EffectCallback, _deps?: DependencyList): void {},\n useSyncExternalStore<T>(\n _subscribe: ExternalStoreSubscribe,\n _getSnapshot: () => T,\n getServerSnapshot?: () => T,\n ): T {\n if (getServerSnapshot === undefined) {\n throw new Error(options.externalStoreError);\n }\n\n return getServerSnapshot();\n },\n useStableEvent<Args extends unknown[], Result>(\n _handler: (...args: Args) => Result,\n ): (...args: StableEventCallerArgs<Args>) => Result {\n return (..._args: StableEventCallerArgs<Args>): Result => {\n throw new Error(\"Stable events cannot be called during server render.\");\n };\n },\n readContext<T>(context: FigContext<T>): T {\n return readContextValue(options.contextValues, context);\n },\n readData<TArgs extends unknown[], TValue>(\n resource: DataResource<TArgs, TValue>,\n args: TArgs,\n ): TValue {\n return options.readData(resource, args);\n },\n preloadData<TArgs extends unknown[], TValue>(\n resource: DataResource<TArgs, TValue>,\n args: TArgs,\n ): void {\n options.preloadData(resource, args);\n },\n readPromise<T>(promise: PromiseLike<T>): T {\n return options.readPromise(promise);\n },\n };\n}\n\nexport function errorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\nexport function componentStack(stack: StackFrame | null): string {\n const frames: string[] = [];\n for (let frame = stack; frame !== null; frame = frame.parent) {\n frames.push(` at ${frame.name}`);\n }\n return frames.length === 0 ? \"\" : `\\n${frames.join(\"\\n\")}`;\n}\n\nexport function nonceAttribute(nonce: string | undefined): string {\n return nonce === undefined ? \"\" : ` nonce=\"${escapeAttribute(nonce)}\"`;\n}\n"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DataResourceKeyInput, ElementType, FigAssetResource, FigAssetResourceList, FigClientReference, FigDataHydrationEntry, FigNode, Props } from "@bgub/fig";
|
|
1
|
+
import { DataResourceKeyInput, ElementType, FigAssetResource, FigAssetResourceList, FigClientReference, FigDataHydrationEntry, FigDataStoreController, FigDataStoreHandle, FigNode, Props } from "@bgub/fig";
|
|
2
2
|
//#region src/render-tree.d.ts
|
|
3
3
|
type RenderTreeKind = "activity" | "assets" | "client-reference" | "context-provider" | "error-boundary" | "fragment" | "function" | "host" | "root" | "suspense" | "text" | "view-transition";
|
|
4
4
|
interface RenderTreeNode {
|
|
@@ -20,12 +20,24 @@ interface ServerRenderOptions {
|
|
|
20
20
|
* Defaults to an empty string.
|
|
21
21
|
*/
|
|
22
22
|
identifierPrefix?: string;
|
|
23
|
+
/**
|
|
24
|
+
* Encoded bytes the result stream buffers before flushing pauses until the
|
|
25
|
+
* consumer reads (rendering itself never pauses; completed work waits in
|
|
26
|
+
* segment form). Defaults to 65536; values below 1 are clamped to 1.
|
|
27
|
+
*/
|
|
28
|
+
highWaterMark?: number;
|
|
23
29
|
nonce?: string;
|
|
24
30
|
onError?: (error: unknown, info: ServerErrorInfo) => ServerErrorPayload | undefined;
|
|
25
|
-
onAssetError?: (error: unknown, info: ServerAssetErrorInfo) => void;
|
|
26
31
|
clientReferenceFallback?: (reference: FigClientReference, props: Props) => FigNode;
|
|
27
32
|
resolveAssetKey?: (type: ElementType) => string | undefined;
|
|
28
33
|
dataPartition?: DataResourceKeyInput;
|
|
34
|
+
/** Adopt a store populated by request loaders before rendering. */
|
|
35
|
+
dataStore?: FigDataStoreController;
|
|
36
|
+
/**
|
|
37
|
+
* Values loaded before rendering, such as route-loader data. They hydrate
|
|
38
|
+
* the request store before the first component reads it.
|
|
39
|
+
*/
|
|
40
|
+
initialData?: readonly FigDataHydrationEntry[];
|
|
29
41
|
assets?: Record<string, FigAssetResourceList>;
|
|
30
42
|
/**
|
|
31
43
|
* Caller-owned collector the renderer fills with the component structure
|
|
@@ -50,21 +62,31 @@ interface ServerErrorPayload {
|
|
|
50
62
|
digest?: string;
|
|
51
63
|
message?: string;
|
|
52
64
|
}
|
|
53
|
-
interface ServerAssetErrorInfo {
|
|
54
|
-
componentStack: string;
|
|
55
|
-
destination: ServerAssetDestination;
|
|
56
|
-
key: string;
|
|
57
|
-
resource: FigAssetResource;
|
|
58
|
-
}
|
|
59
|
-
type ServerAssetDestination = "head" | "stream";
|
|
60
65
|
interface ServerStreamRenderResult {
|
|
61
66
|
abort(reason?: unknown): void;
|
|
62
67
|
allReady: Promise<void>;
|
|
63
68
|
contentType: "text/html; charset=utf-8";
|
|
69
|
+
/** The request-scoped store used by this render. */
|
|
70
|
+
data: FigDataStoreHandle;
|
|
64
71
|
getData(): FigDataHydrationEntry[];
|
|
72
|
+
/**
|
|
73
|
+
* Returns the shell's deduplicated HTTP `Link` value for preload-capable
|
|
74
|
+
* asset resources. Returns undefined before `shellReady`; assets discovered
|
|
75
|
+
* later remain in the HTML stream and are not added retroactively.
|
|
76
|
+
*/
|
|
77
|
+
getPreloadHeader(options?: ServerPreloadHeaderOptions): string | undefined;
|
|
65
78
|
shellReady: Promise<void>;
|
|
66
79
|
stream: ReadableStream<Uint8Array>;
|
|
67
80
|
}
|
|
81
|
+
interface ServerPreloadHeaderOptions {
|
|
82
|
+
/** Include only resources that are safe for this response's cache policy. */
|
|
83
|
+
filter?: (resource: ServerPreloadHeaderResource) => boolean;
|
|
84
|
+
/** Maximum UTF-16 code units in the returned value. Defaults to 2,000. */
|
|
85
|
+
maxLength?: number;
|
|
86
|
+
}
|
|
87
|
+
type ServerPreloadHeaderResource = Readonly<Exclude<FigAssetResource, {
|
|
88
|
+
kind: "meta" | "script" | "title";
|
|
89
|
+
}>>;
|
|
68
90
|
type ServerDocumentRenderResult = ServerStreamRenderResult;
|
|
69
91
|
interface ServerFragmentRenderResult extends ServerStreamRenderResult {
|
|
70
92
|
getHead(): string;
|
|
@@ -80,4 +102,4 @@ interface ServerPrerenderResult {
|
|
|
80
102
|
html: string;
|
|
81
103
|
}
|
|
82
104
|
//#endregion
|
|
83
|
-
export {
|
|
105
|
+
export { ServerPreloadHeaderOptions as a, ServerPrerenderResult as c, RenderTreeKind as d, RenderTreeNode as f, ServerFragmentRenderResult as i, ServerRenderOptions as l, ServerErrorInfo as n, ServerPreloadHeaderResource as o, createRenderTreeCollector as p, ServerErrorPayload as r, ServerPrerenderOptions as s, ServerDocumentRenderResult as t, RenderTreeCollector as u };
|