@bgub/fig-server 0.0.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.
@@ -0,0 +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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"}
@@ -0,0 +1,105 @@
1
+ //#region src/shared.ts
2
+ function contextStack(values, context) {
3
+ let stack = values.get(context);
4
+ if (stack === void 0) {
5
+ stack = [];
6
+ values.set(context, stack);
7
+ }
8
+ return stack;
9
+ }
10
+ function withContextValue(values, context, value, callback) {
11
+ const stack = contextStack(values, context);
12
+ stack.push(value);
13
+ try {
14
+ return callback();
15
+ } finally {
16
+ stack.pop();
17
+ }
18
+ }
19
+ function readContextValue(values, context) {
20
+ const stack = values.get(context);
21
+ if (stack !== void 0 && stack.length > 0) return stack[stack.length - 1];
22
+ return context.defaultValue;
23
+ }
24
+ function deferred() {
25
+ let resolve = () => void 0;
26
+ let reject = () => void 0;
27
+ return {
28
+ promise: new Promise((innerResolve, innerReject) => {
29
+ resolve = innerResolve;
30
+ reject = innerReject;
31
+ }),
32
+ reject,
33
+ resolve
34
+ };
35
+ }
36
+ function cloneContextValues(values) {
37
+ const clone = /* @__PURE__ */ new Map();
38
+ for (const [context, stack] of values) clone.set(context, [...stack]);
39
+ return clone;
40
+ }
41
+ function resolveInitialState(initialState) {
42
+ return typeof initialState === "function" ? initialState() : initialState;
43
+ }
44
+ function createStaticDispatcher(options) {
45
+ return {
46
+ useState(initialState) {
47
+ const value = resolveInitialState(initialState);
48
+ const setState = () => {
49
+ throw new Error(options.updateError);
50
+ };
51
+ return [value, setState];
52
+ },
53
+ useActionState(_action, initialState) {
54
+ const runner = () => {
55
+ throw new Error(options.updateError);
56
+ };
57
+ return [
58
+ initialState,
59
+ runner,
60
+ false
61
+ ];
62
+ },
63
+ useId() {
64
+ return options.useId();
65
+ },
66
+ useDeferredValue(value, _initialValue, _hasInitialValue) {
67
+ return value;
68
+ },
69
+ useMemo(calculate, _deps) {
70
+ return calculate();
71
+ },
72
+ useTransition() {
73
+ const startTransition = (callback) => void callback(new AbortController().signal);
74
+ return [false, startTransition];
75
+ },
76
+ useReactive(_effect, _deps) {},
77
+ useBeforePaint(_effect, _deps) {},
78
+ useBeforeLayout(_effect, _deps) {},
79
+ useSyncExternalStore(_subscribe, _getSnapshot, getServerSnapshot) {
80
+ if (getServerSnapshot === void 0) throw new Error(options.externalStoreError);
81
+ return getServerSnapshot();
82
+ },
83
+ useStableEvent(_handler) {
84
+ return (() => {
85
+ throw new Error("Stable events cannot be called during server render.");
86
+ });
87
+ },
88
+ readContext(context) {
89
+ return readContextValue(options.contextValues, context);
90
+ },
91
+ readData(resource, args) {
92
+ return options.readData(resource, args);
93
+ },
94
+ preloadData(resource, args) {
95
+ options.preloadData(resource, args);
96
+ },
97
+ readPromise(promise) {
98
+ return options.readPromise(promise);
99
+ }
100
+ };
101
+ }
102
+ //#endregion
103
+ export { withContextValue as i, createStaticDispatcher as n, deferred as r, cloneContextValues as t };
104
+
105
+ //# sourceMappingURL=shared-CQn6Dje6.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared-CQn6Dje6.js","names":[],"sources":["../src/shared.ts"],"sourcesContent":["import type {\n ActionStateAction,\n ActionStateRunner,\n DependencyList,\n EffectCallback,\n ExternalStoreSubscribe,\n FigContext,\n StableEventArgs,\n StateSetter,\n StartTransition,\n} from \"@bgub/fig\";\nimport type { DataResource, RenderDispatcher } from \"@bgub/fig/internal\";\n\nexport type ContextValues = Map<FigContext<unknown>, unknown[]>;\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\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: StableEventArgs<Args>) => Result {\n return (() => {\n throw new Error(\"Stable events cannot be called during server render.\");\n }) as (...args: StableEventArgs<Args>) => Result;\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"],"mappings":";AA+BA,SAAS,aACP,QACA,SACW;CACX,IAAI,QAAQ,OAAO,IAAI,OAAO;CAE9B,IAAI,UAAU,KAAA,GAAW;EACvB,QAAQ,CAAC;EACT,OAAO,IAAI,SAAS,KAAK;CAC3B;CAEA,OAAO;AACT;AAEA,SAAgB,iBACd,QACA,SACA,OACA,UACG;CACH,MAAM,QAAQ,aAAa,QAAQ,OAAO;CAC1C,MAAM,KAAK,KAAK;CAEhB,IAAI;EACF,OAAO,SAAS;CAClB,UAAU;EACR,MAAM,IAAI;CACZ;AACF;AAEA,SAAS,iBAAoB,QAAuB,SAA2B;CAC7E,MAAM,QAAQ,OAAO,IAAI,OAA8B;CACvD,IAAI,UAAU,KAAA,KAAa,MAAM,SAAS,GACxC,OAAO,MAAM,MAAM,SAAS;CAG9B,OAAO,QAAQ;AACjB;AAQA,SAAgB,WAA2B;CACzC,IAAI,gBAAwC,KAAA;CAC5C,IAAI,eAAsC,KAAA;CAK1C,OAAO;EAAE,SAAA,IAJW,SAAY,cAAc,gBAAgB;GAC5D,UAAU;GACV,SAAS;EACX,CACe;EAAG;EAAQ;CAAQ;AACpC;AAEA,SAAgB,mBAAmB,QAAsC;CACvE,MAAM,wBAAuB,IAAI,IAAI;CACrC,KAAK,MAAM,CAAC,SAAS,UAAU,QAAQ,MAAM,IAAI,SAAS,CAAC,GAAG,KAAK,CAAC;CACpE,OAAO;AACT;AAEA,SAAS,oBAAuB,cAAgC;CAC9D,OAAO,OAAO,iBAAiB,aAC1B,aAAyB,IAC1B;AACN;AAEA,SAAgB,uBACd,SACkB;CAClB,OAAO;EACL,SAAY,cAAkD;GAC5D,MAAM,QAAQ,oBAAoB,YAAY;GAC9C,MAAM,iBAA4C;IAChD,MAAM,IAAI,MAAM,QAAQ,WAAW;GACrC;GACA,OAAO,CAAC,OAAO,QAAQ;EACzB;EACA,eACE,SACA,cACuC;GACvC,MAAM,eAAwC;IAC5C,MAAM,IAAI,MAAM,QAAQ,WAAW;GACrC;GACA,OAAO;IAAC;IAAc;IAAQ;GAAK;EACrC;EACA,QAAgB;GACd,OAAO,QAAQ,MAAM;EACvB;EACA,iBACE,OACA,eACA,kBACG;GACH,OAAO;EACT;EACA,QAAW,WAAoB,OAA0B;GACvD,OAAO,UAAU;EACnB;EACA,gBAA4C;GAG1C,MAAM,mBACJ,aACG,KAAK,SAAS,IAAI,gBAAgB,CAAC,CAAC,MAAM;GAC/C,OAAO,CAAC,OAAO,eAAe;EAChC;EACA,YAAY,SAAyB,OAA8B,CAAC;EACpE,eAAe,SAAyB,OAA8B,CAAC;EACvE,gBAAgB,SAAyB,OAA8B,CAAC;EACxE,qBACE,YACA,cACA,mBACG;GACH,IAAI,sBAAsB,KAAA,GACxB,MAAM,IAAI,MAAM,QAAQ,kBAAkB;GAG5C,OAAO,kBAAkB;EAC3B;EACA,eACE,UAC4C;GAC5C,cAAc;IACZ,MAAM,IAAI,MAAM,sDAAsD;GACxE;EACF;EACA,YAAe,SAA2B;GACxC,OAAO,iBAAiB,QAAQ,eAAe,OAAO;EACxD;EACA,SACE,UACA,MACQ;GACR,OAAO,QAAQ,SAAS,UAAU,IAAI;EACxC;EACA,YACE,UACA,MACM;GACN,QAAQ,YAAY,UAAU,IAAI;EACpC;EACA,YAAe,SAA4B;GACzC,OAAO,QAAQ,YAAY,OAAO;EACpC;CACF;AACF"}
@@ -0,0 +1,83 @@
1
+ import { DataResourceKeyInput, ElementType, FigAssetResource, FigAssetResourceList, FigClientReference, FigDataHydrationEntry, FigNode, Props } from "@bgub/fig";
2
+ //#region src/render-tree.d.ts
3
+ type RenderTreeKind = "activity" | "assets" | "client-reference" | "context-provider" | "error-boundary" | "fragment" | "function" | "host" | "root" | "suspense" | "text" | "view-transition";
4
+ interface RenderTreeNode {
5
+ children: RenderTreeNode[];
6
+ key: string | number | null;
7
+ kind: RenderTreeKind;
8
+ name: string;
9
+ props: Record<string, unknown>;
10
+ }
11
+ interface RenderTreeCollector {
12
+ readonly tree: RenderTreeNode;
13
+ }
14
+ declare function createRenderTreeCollector(): RenderTreeCollector;
15
+ //#endregion
16
+ //#region src/types.d.ts
17
+ interface ServerRenderOptions {
18
+ /**
19
+ * Prefix for generated streaming Suspense and useId identifiers.
20
+ * Defaults to an empty string.
21
+ */
22
+ identifierPrefix?: string;
23
+ nonce?: string;
24
+ onError?: (error: unknown, info: ServerErrorInfo) => ServerErrorPayload | undefined;
25
+ onAssetError?: (error: unknown, info: ServerAssetErrorInfo) => void;
26
+ clientReferenceFallback?: (reference: FigClientReference, props: Props) => FigNode;
27
+ resolveAssetKey?: (type: ElementType) => string | undefined;
28
+ dataPartition?: DataResourceKeyInput;
29
+ assets?: Record<string, FigAssetResourceList>;
30
+ /**
31
+ * Caller-owned collector the renderer fills with the component structure
32
+ * as it renders (see createRenderTreeCollector) — readable mid-render, so
33
+ * a subtree later in document order can prerender introspection UI from
34
+ * everything rendered before it.
35
+ */
36
+ renderTree?: RenderTreeCollector;
37
+ signal?: AbortSignal;
38
+ }
39
+ interface ServerPrerenderOptions extends ServerRenderOptions {
40
+ /**
41
+ * Render a full document. The root must render an <html> element with a
42
+ * <head>, and collected head assets are inlined into that document head.
43
+ */
44
+ document?: boolean;
45
+ }
46
+ interface ServerErrorInfo {
47
+ componentStack: string;
48
+ }
49
+ interface ServerErrorPayload {
50
+ digest?: string;
51
+ message?: string;
52
+ }
53
+ interface ServerAssetErrorInfo {
54
+ componentStack: string;
55
+ destination: ServerAssetDestination;
56
+ key: string;
57
+ resource: FigAssetResource;
58
+ }
59
+ type ServerAssetDestination = "head" | "stream";
60
+ interface ServerStreamRenderResult {
61
+ abort(reason?: unknown): void;
62
+ allReady: Promise<void>;
63
+ contentType: "text/html; charset=utf-8";
64
+ getData(): FigDataHydrationEntry[];
65
+ shellReady: Promise<void>;
66
+ stream: ReadableStream<Uint8Array>;
67
+ }
68
+ type ServerDocumentRenderResult = ServerStreamRenderResult;
69
+ interface ServerFragmentRenderResult extends ServerStreamRenderResult {
70
+ getHead(): string;
71
+ headReady: Promise<string>;
72
+ }
73
+ interface ServerPrerenderResult {
74
+ data: FigDataHydrationEntry[];
75
+ /**
76
+ * Fragment-mode collected head HTML. Empty in document mode because the head
77
+ * assets are already inlined into `html`.
78
+ */
79
+ head: string;
80
+ html: string;
81
+ }
82
+ //#endregion
83
+ export { ServerErrorPayload as a, ServerPrerenderResult as c, RenderTreeKind as d, RenderTreeNode as f, ServerErrorInfo as i, ServerRenderOptions as l, ServerAssetErrorInfo as n, ServerFragmentRenderResult as o, createRenderTreeCollector as p, ServerDocumentRenderResult as r, ServerPrerenderOptions as s, ServerAssetDestination as t, RenderTreeCollector as u };
package/package.json ADDED
@@ -0,0 +1,52 @@
1
+ {
2
+ "name": "@bgub/fig-server",
3
+ "version": "0.0.1",
4
+ "description": "Fig server renderer",
5
+ "keywords": [],
6
+ "homepage": "https://github.com/bgub/fig",
7
+ "type": "module",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js",
12
+ "default": "./dist/index.js"
13
+ },
14
+ "./payload": {
15
+ "types": "./dist/payload.d.ts",
16
+ "import": "./dist/payload.js",
17
+ "default": "./dist/payload.js"
18
+ },
19
+ "./package.json": "./package.json"
20
+ },
21
+ "types": "./dist/index.d.ts",
22
+ "sideEffects": false,
23
+ "files": [
24
+ "dist"
25
+ ],
26
+ "author": "Ben Gubler <nebrelbug@gmail.com>",
27
+ "repository": {
28
+ "type": "git",
29
+ "url": "https://github.com/bgub/fig",
30
+ "directory": "packages/fig-server"
31
+ },
32
+ "bugs": {
33
+ "url": "https://github.com/bgub/fig/issues"
34
+ },
35
+ "license": "MIT",
36
+ "publishConfig": {
37
+ "access": "public"
38
+ },
39
+ "peerDependencies": {
40
+ "@bgub/fig": "0.0.1"
41
+ },
42
+ "devDependencies": {
43
+ "@bgub/fig": "0.0.1"
44
+ },
45
+ "engines": {
46
+ "node": "^20.19.0 || >=22.12.0"
47
+ },
48
+ "scripts": {
49
+ "build": "tsdown --config ../../tsdown.config.ts && node ../../scripts/strip-declaration-map-comments.mjs dist",
50
+ "test": "vitest run --config ../../vite.config.ts src"
51
+ }
52
+ }