{"version":3,"file":"component.cjs","sources":["@gensx/core/../../../../src/component.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-unsafe-argument */\n\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n\nimport type {\n  ComponentOpts,\n  ComponentOpts as OriginalComponentOpts,\n  DecoratorComponentOpts,\n  WorkflowOpts,\n} from \"./types.js\";\n\nimport serializeErrorPkg from \"@common.js/serialize-error\";\nconst { serializeError } = serializeErrorPkg;\n\nimport { ExecutionNode, STREAMING_PLACEHOLDER } from \"./checkpoint-types.js\";\nimport {\n  ExecutionContext,\n  getContextSnapshot,\n  getCurrentContext,\n  getCurrentNodeCheckpointManager,\n  RunInContext,\n  withContext,\n} from \"./context.js\";\nimport { generateNodeId } from \"./utils/nodeId.js\";\nimport { InputRequest, WorkflowExecutionContext } from \"./workflow-context.js\";\nimport { WorkflowMessageListener } from \"./workflow-state.js\";\n\nexport { STREAMING_PLACEHOLDER };\n\n// Helper function to extract path from enhanced ID format: \"path:contentHash:callIndex\"\nfunction extractPathFromId(nodeId: string): string {\n  if (nodeId.includes(\":\")) {\n    return nodeId.split(\":\")[0] ?? \"\";\n  }\n  // Fallback for legacy IDs - return the ID as-is\n  return nodeId;\n}\n\nfunction getResolvedOpts(\n  decoratorOpts?: DecoratorComponentOpts | string,\n  callTimeOpts?: OriginalComponentOpts,\n  functionName?: string,\n): OriginalComponentOpts {\n  const decoratorName =\n    typeof decoratorOpts === \"string\" ? decoratorOpts : decoratorOpts?.name;\n\n  // Prioritize names: callTimeOpts.name > decoratorName > functionName\n  let name = callTimeOpts?.name ?? decoratorName ?? functionName;\n\n  const baseOpts =\n    typeof decoratorOpts === \"string\" ? {} : (decoratorOpts ?? {});\n\n  const merged: OriginalComponentOpts = {\n    ...baseOpts,\n    ...callTimeOpts,\n    name,\n    metadata: {\n      ...baseOpts.metadata,\n      ...callTimeOpts?.metadata,\n    },\n    secretProps: Array.from(\n      new Set([\n        ...(baseOpts.secretProps ?? []),\n        ...(callTimeOpts?.secretProps ?? []),\n      ]),\n    ),\n    secretOutputs: baseOpts.secretOutputs ?? callTimeOpts?.secretOutputs,\n  };\n\n  return merged;\n}\n\nexport function Component<P extends object = {}, R = unknown>(\n  name: string,\n  target: (props: P) => R,\n  componentOpts?: ComponentOpts,\n): (props?: P, runtimeOpts?: ComponentOpts) => R {\n  const ComponentFn = (\n    props?: P,\n    runtimeOpts?: ComponentOpts & { onComplete?: () => void },\n  ): R => {\n    const context = getCurrentContext();\n    const workflowContext = context.getWorkflowContext();\n    const { checkpointManager } = workflowContext;\n    const parentNode = context.getCurrentNode();\n\n    // Get resolved options for checkpointing, including name (runtime props > decorator > function name)\n    const resolvedComponentOpts = getResolvedOpts(\n      componentOpts,\n      runtimeOpts,\n      name,\n    );\n    const componentName = resolvedComponentOpts.name;\n\n    if (!componentName) {\n      throw new Error(\n        \"Internal error: Component name could not be determined.\",\n      );\n    }\n\n    // Enhanced ID generation: Calculate parent path and call index\n    const parentPath = parentNode?.id ? extractPathFromId(parentNode.id) : \"\";\n\n    // Use call counter from checkpoint manager for unique callIndex\n    const callIndex = checkpointManager.getNextCallIndex(\n      parentPath,\n      componentName,\n      props as Record<string, unknown>,\n      resolvedComponentOpts.idPropsKeys,\n    );\n\n    // Generate the node ID\n    const nodeId = generateNodeId(\n      componentName,\n      props as Record<string, unknown>,\n      resolvedComponentOpts.idPropsKeys,\n      parentPath,\n      callIndex,\n    );\n\n    // Check checkpoint for existing result\n    const cachedResult = checkpointManager.getNodeFromCheckpoint(nodeId);\n    if (cachedResult.found && cachedResult.node.completed) {\n      const { node } = cachedResult;\n      console.debug(`[Replay] Using cached result for ${name} (${nodeId})`);\n\n      // Add the cached subtree to the new checkpoint being built\n      checkpointManager.addCachedSubtreeToCheckpoint(node, parentNode);\n\n      return deserializeResult<R>(node.output);\n    }\n\n    function onComplete() {\n      workflowContext.sendWorkflowMessage({\n        type: \"component-end\",\n        componentName: componentName ?? \"\",\n        componentId: nodeId,\n      });\n      resolvedComponentOpts.onComplete?.();\n    }\n\n    const node = checkpointManager.addNode(\n      {\n        id: nodeId,\n        componentName: componentName,\n        props: props as Record<string, unknown>,\n        componentOpts: resolvedComponentOpts,\n      },\n      parentNode,\n      {\n        // Do not update the checkpoint if we are adding an existing node that has not finished yet.\n        // This prevents \"resetting\" the checkpoint and rebuilding it on the server side (causing the visualization to reset when we do human in the loop or input requests).\n        skipCheckpointUpdate: cachedResult.found,\n      },\n    );\n\n    if (resolvedComponentOpts.metadata) {\n      checkpointManager.addMetadata(node, resolvedComponentOpts.metadata);\n    }\n\n    function handleResultValue(\n      value: unknown,\n      runInContext: RunInContext,\n      wrapInPromise: boolean,\n    ) {\n      if (\n        !Array.isArray(value) &&\n        typeof value === \"object\" &&\n        value != null &&\n        resolvedComponentOpts.__streamingResultKey !== undefined &&\n        (isAsyncIterable(\n          (value as Record<string, unknown>)[\n            resolvedComponentOpts.__streamingResultKey\n          ],\n        ) ||\n          isReadableStream(\n            (value as Record<string, unknown>)[\n              resolvedComponentOpts.__streamingResultKey\n            ],\n          ))\n      ) {\n        const streamingResult = captureAsyncGenerator(\n          (value as Record<string, unknown>)[\n            resolvedComponentOpts.__streamingResultKey\n          ] as AsyncIterable<unknown>,\n          runInContext,\n          {\n            streamKey: resolvedComponentOpts.__streamingResultKey,\n            aggregator: resolvedComponentOpts.aggregator,\n            fullValue: value,\n            onComplete,\n            wrapInPromise,\n          },\n        );\n\n        try {\n          (value as Record<string, unknown>)[\n            resolvedComponentOpts.__streamingResultKey\n          ] = streamingResult;\n        } catch {\n          // Can't always set the streaming result key, so carry on.\n        }\n\n        return value;\n      }\n\n      if (isAsyncIterable(value) || isReadableStream(value)) {\n        const streamingResult = captureAsyncGenerator(\n          value as AsyncIterable<unknown>,\n          runInContext,\n          {\n            aggregator: resolvedComponentOpts.aggregator,\n            fullValue: value,\n            onComplete,\n            wrapInPromise,\n          },\n        );\n\n        return streamingResult;\n      }\n\n      onComplete();\n      checkpointManager.completeNode(node, value, {\n        wrapInPromise,\n      });\n      return value;\n    }\n\n    try {\n      // TODO: Don't emit this when rerunning the workflow with a partial checkpoint.\n      let runInContext: RunInContext;\n      workflowContext.sendWorkflowMessage({\n        type: \"component-start\",\n        componentName: componentName,\n        componentId: nodeId,\n      });\n      const result = context.withCurrentNode(node, () => {\n        runInContext = getContextSnapshot();\n        return target((props ?? {}) as P);\n      });\n\n      if (result instanceof Promise) {\n        return result\n          .then((value) => handleResultValue(value, runInContext, true))\n          .catch((error: unknown) => {\n            handleError(node, error, workflowContext, true);\n            throw error;\n          }) as R;\n      }\n\n      return handleResultValue(result, runInContext!, false) as R;\n    } catch (error) {\n      handleError(node, error, workflowContext, false);\n      throw error;\n    }\n  };\n\n  Object.defineProperty(ComponentFn, \"name\", {\n    value: name,\n    configurable: true,\n  });\n  Object.defineProperty(ComponentFn, \"__gensxComponent\", {\n    value: true,\n  });\n\n  return ComponentFn;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters\nfunction deserializeResult<R>(result: unknown): R {\n  if (!result) {\n    return result as R;\n  }\n\n  if (\n    typeof result === \"object\" &&\n    \"__gensxSerialized\" in result &&\n    result.__gensxSerialized &&\n    \"type\" in result &&\n    typeof result.type === \"string\" &&\n    \"value\" in result\n  ) {\n    switch (result.type) {\n      case \"async-iterator\":\n      case \"readable-stream\":\n        const stream = new ReadableStream({\n          start(controller) {\n            if (Array.isArray(result.value)) {\n              for (const item of result.value) {\n                controller.enqueue(item);\n              }\n            } else {\n              controller.enqueue(result.value);\n            }\n            controller.close();\n          },\n        }) as R;\n        Object.defineProperty(stream, \"__gensxDeserializedStream\", {\n          value: true,\n        });\n        return stream;\n      case \"promise\":\n        return Promise.resolve(deserializeResult(result.value)) as R;\n      default:\n        console.warn(\"[GenSX] Unknown serialized result type: \", result.type);\n        return deserializeResult(result.value);\n    }\n  }\n\n  if (Array.isArray(result)) {\n    return result.map(deserializeResult) as R;\n  }\n\n  if (typeof result === \"object\" && !ArrayBuffer.isView(result)) {\n    return Object.fromEntries(\n      Object.entries(result).map(([key, value]) => [\n        key,\n        deserializeResult(value),\n      ]),\n    ) as R;\n  }\n\n  return result as R;\n}\n\nfunction handleError(\n  node: ExecutionNode,\n  error: unknown,\n  workflowContext: WorkflowExecutionContext,\n  wrapInPromise: boolean,\n) {\n  const serializedError = serializeError(error);\n  workflowContext.checkpointManager.addMetadata(node, {\n    error: serializedError,\n  });\n  workflowContext.checkpointManager.completeNode(node, undefined, {\n    wrapInPromise,\n  });\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  if (!(error as any).__gensxErrorEventEmitted) {\n    workflowContext.sendWorkflowMessage({\n      type: \"error\",\n      error: JSON.stringify(serializedError),\n    });\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    (error as any).__gensxErrorEventEmitted = true;\n  }\n}\n\ntype WorkflowRuntimeOpts = WorkflowOpts & {\n  workflowExecutionId?: string;\n  messageListener?: WorkflowMessageListener;\n  checkpoint?: ExecutionNode;\n  printUrl?: boolean;\n  executionScope?: Record<string, unknown>;\n  onRequestInput?: (request: InputRequest) => Promise<void>;\n  onRestoreCheckpoint?: (\n    node: ExecutionNode,\n    feedback: unknown,\n  ) => Promise<void>;\n  /**\n   * Optional reference to capture the pending updates promise, that ensures that all traces are sent to the server after completion.\n   * If provided, the workflow will set this reference to the promise\n   * that resolves when all checkpoint updates are complete.\n   * If not provided, the workflow will wait for pending updates before returning.\n   *\n   * @example\n   * ```typescript\n   * const pendingUpdatesRef = { value: undefined };\n   * const result = await workflow(props, { pendingUpdatesRef });\n   * // result is available immediately\n   * await pendingUpdatesRef.value; // wait for checkpoint updates\n   * ```\n   */\n  pendingUpdatesRef?: { value?: Promise<void> };\n};\n\nexport function Workflow<P extends object = {}, R = unknown>(\n  name: string,\n  target: (props: P) => R,\n  workflowOpts?: WorkflowOpts,\n): (props?: P, runtimeOpts?: WorkflowRuntimeOpts) => Promise<Awaited<R>> {\n  const WorkflowFn = async (\n    props?: P,\n    runtimeOpts?: WorkflowRuntimeOpts,\n  ): Promise<Awaited<R>> => {\n    const context = new ExecutionContext({}, undefined, {\n      messageListener: runtimeOpts?.messageListener,\n      onRequestInput: runtimeOpts?.onRequestInput,\n      onRestoreCheckpoint: runtimeOpts?.onRestoreCheckpoint,\n      checkpoint: runtimeOpts?.checkpoint,\n      executionScope: runtimeOpts?.executionScope,\n    });\n    await context.init();\n\n    const resolvedOpts = {\n      ...(typeof workflowOpts === \"string\" ? {} : workflowOpts),\n      ...runtimeOpts,\n      metadata: {\n        ...workflowOpts?.metadata,\n        ...runtimeOpts?.metadata,\n      },\n    };\n\n    const workflowContext = context.getWorkflowContext();\n\n    workflowContext.checkpointManager.setPrintUrl(\n      resolvedOpts.printUrl ?? false,\n    );\n\n    const workflowName = name;\n    if (!workflowName) {\n      throw new Error(\n        \"Workflow name must be provided either via options or by naming the function.\",\n      );\n    }\n\n    workflowContext.checkpointManager.setWorkflowName(workflowName);\n\n    const component = Component<P, R>(name, target);\n\n    try {\n      // TODO: Don't emit this when rerunning the workflow\n      workflowContext.sendWorkflowMessage({\n        type: \"start\",\n        workflowExecutionId: runtimeOpts?.workflowExecutionId,\n        workflowName,\n      });\n\n      const result = await withContext(context, () =>\n        component(props, {\n          ...runtimeOpts,\n          onComplete: () => {\n            workflowContext.sendWorkflowMessage({\n              type: \"end\",\n            });\n          },\n        }),\n      );\n\n      const root = workflowContext.checkpointManager.root;\n      if (root) {\n        if (workflowOpts?.metadata) {\n          workflowContext.checkpointManager.addMetadata(\n            root,\n            workflowOpts.metadata,\n          );\n        }\n      } else {\n        console.warn(\n          \"No root checkpoint found for workflow after execution\",\n          workflowName,\n        );\n      }\n\n      return result;\n    } finally {\n      if (runtimeOpts?.pendingUpdatesRef) {\n        runtimeOpts.pendingUpdatesRef.value =\n          workflowContext.checkpointManager.waitForPendingUpdates();\n      } else {\n        await workflowContext.checkpointManager.waitForPendingUpdates();\n      }\n    }\n  };\n\n  Object.defineProperty(WorkflowFn, \"name\", {\n    value: name,\n    configurable: true,\n  });\n  Object.defineProperty(WorkflowFn, \"__gensxWorkflow\", {\n    value: true,\n  });\n\n  return WorkflowFn;\n}\n\nfunction captureAsyncGenerator(\n  iterable: AsyncIterable<unknown>,\n  runInContext: RunInContext,\n  {\n    streamKey,\n    aggregator,\n    fullValue,\n    onComplete,\n    wrapInPromise,\n  }: {\n    streamKey?: string;\n    aggregator?: (chunks: unknown[]) => unknown;\n    fullValue: unknown;\n    onComplete: () => void;\n    wrapInPromise: boolean;\n  },\n) {\n  aggregator ??= (chunks: unknown[]) => {\n    // Assume if the first chunk is a string, we're streaming text\n    if (typeof chunks[0] === \"string\") {\n      return chunks.join(\"\");\n    }\n    return chunks;\n  };\n\n  if (isReadableStream(iterable)) {\n    return captureReadableStream(iterable, runInContext, {\n      streamKey,\n      aggregator,\n      fullValue,\n      onComplete,\n      wrapInPromise,\n    });\n  }\n  const iterator = iterable[Symbol.asyncIterator]();\n  const wrappedIterator = captureAsyncIterator(iterator, runInContext, {\n    streamKey,\n    aggregator,\n    fullValue,\n    onComplete,\n    wrapInPromise,\n  });\n  iterable[Symbol.asyncIterator] = () => wrappedIterator;\n  return iterable;\n}\n\nfunction captureReadableStream(\n  stream: ReadableStream<unknown>,\n  runInContext: (fn: (...args: unknown[]) => unknown) => unknown,\n  {\n    streamKey,\n    aggregator,\n    fullValue,\n    onComplete,\n    wrapInPromise,\n  }: {\n    streamKey?: string;\n    aggregator: (chunks: unknown[]) => unknown;\n    fullValue: unknown;\n    onComplete: () => void;\n    wrapInPromise: boolean;\n  },\n) {\n  const reader = stream.getReader();\n  let done = false;\n  const chunks: unknown[] = [];\n\n  let lastUpdateNodeCall = performance.now();\n  const capturedStream = new ReadableStream({\n    async start(controller) {\n      try {\n        while (!done) {\n          await runInContext(async () => {\n            const result = await reader.read();\n            if (result.done) {\n              done = true;\n              const { completeNode } = getCurrentNodeCheckpointManager();\n              const aggregatedValue = aggregator(chunks);\n              if (streamKey) {\n                completeNode(\n                  {\n                    ...(fullValue as Record<string, unknown>),\n                    [streamKey]: {\n                      __gensxSerialized: true,\n                      type: \"readable-stream\",\n                      value: aggregatedValue,\n                    },\n                  },\n                  { wrapInPromise },\n                );\n              } else {\n                completeNode(\n                  {\n                    __gensxSerialized: true,\n                    type: \"readable-stream\",\n                    value: aggregatedValue,\n                  },\n                  { wrapInPromise },\n                );\n              }\n              onComplete();\n              controller.close();\n              return;\n            }\n            chunks.push(result.value);\n            // Only update the node every 200ms to avoid hammering the server\n            if (performance.now() - lastUpdateNodeCall > 200) {\n              const { updateNode } = getCurrentNodeCheckpointManager();\n              const aggregatedValue = aggregator(chunks);\n              if (streamKey) {\n                const value = {\n                  ...(fullValue as Record<string, unknown>),\n                  [streamKey]: {\n                    __gensxSerialized: true,\n                    type: \"readable-stream\",\n                    value: aggregatedValue,\n                  },\n                };\n                updateNode({\n                  output: wrapInPromise\n                    ? {\n                        __gensxSerialized: true,\n                        type: \"promise\",\n                        value,\n                      }\n                    : value,\n                });\n              } else {\n                const value = {\n                  __gensxSerialized: true,\n                  type: \"readable-stream\",\n                  value: aggregatedValue,\n                };\n                updateNode({\n                  output: wrapInPromise\n                    ? {\n                        __gensxSerialized: true,\n                        type: \"promise\",\n                        value,\n                      }\n                    : value,\n                });\n              }\n              lastUpdateNodeCall = performance.now();\n            }\n            controller.enqueue(result.value as ArrayBufferView);\n          });\n        }\n      } catch (e) {\n        const { completeNode, addMetadata } = getCurrentNodeCheckpointManager();\n        addMetadata({ error: serializeError(e) });\n        const aggregatedValue = aggregator(chunks);\n        if (streamKey) {\n          completeNode(\n            {\n              ...(fullValue as Record<string, unknown>),\n              [streamKey]: {\n                __gensxSerialized: true,\n                type: \"readable-stream\",\n                value: aggregatedValue,\n              },\n            },\n            { wrapInPromise },\n          );\n        } else {\n          completeNode(\n            {\n              __gensxSerialized: true,\n              type: \"readable-stream\",\n              value: aggregatedValue,\n            },\n            { wrapInPromise },\n          );\n        }\n        throw e;\n      }\n    },\n    cancel(reason) {\n      runInContext(() => {\n        if (!done) {\n          const { completeNode, addMetadata } =\n            getCurrentNodeCheckpointManager();\n          addMetadata({ cancelled: true });\n          completeNode(\n            {\n              __gensxSerialized: true,\n              type: \"readable-stream\",\n              value: aggregator(chunks),\n            },\n            { wrapInPromise },\n          );\n        }\n        return reader.cancel(reason);\n      });\n    },\n  });\n\n  return capturedStream;\n}\n\nasync function* captureAsyncIterator(\n  iterator: AsyncIterator<unknown, unknown, undefined>,\n  runInContext: RunInContext,\n  {\n    streamKey,\n    aggregator,\n    fullValue,\n    onComplete,\n    wrapInPromise,\n  }: {\n    streamKey?: string;\n    aggregator: (chunks: unknown[]) => unknown;\n    fullValue: unknown;\n    onComplete: () => void;\n    wrapInPromise: boolean;\n  },\n) {\n  const chunks: unknown[] = [];\n\n  let lastUpdateNodeCall = performance.now();\n  try {\n    let isDone = false;\n    // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n    while (!isDone) {\n      const value = await runInContext(async () => {\n        const { value, done } = await iterator.next();\n        if (done) {\n          const { completeNode } = getCurrentNodeCheckpointManager();\n          const aggregatedValue = aggregator(chunks);\n          if (streamKey) {\n            completeNode(\n              {\n                ...(fullValue as Record<string, unknown>),\n                [streamKey]: {\n                  __gensxSerialized: true,\n                  type: \"async-iterator\",\n                  value: aggregatedValue,\n                },\n              },\n              { wrapInPromise },\n            );\n          } else {\n            completeNode(\n              {\n                __gensxSerialized: true,\n                type: \"async-iterator\",\n                value: aggregatedValue,\n              },\n              { wrapInPromise },\n            );\n          }\n          isDone = true;\n          onComplete();\n          return;\n        }\n        chunks.push(value);\n        // Only update the node every 200ms to avoid hammering the server\n        if (performance.now() - lastUpdateNodeCall > 200) {\n          const { updateNode } = getCurrentNodeCheckpointManager();\n          const aggregatedValue = aggregator(chunks);\n          if (streamKey) {\n            const value = {\n              ...(fullValue as Record<string, unknown>),\n              [streamKey]: {\n                __gensxSerialized: true,\n                type: \"async-iterator\",\n                value: aggregatedValue,\n              },\n            };\n            updateNode({\n              output: wrapInPromise\n                ? {\n                    __gensxSerialized: true,\n                    type: \"promise\",\n                    value,\n                  }\n                : value,\n            });\n          } else {\n            const value = {\n              __gensxSerialized: true,\n              type: \"async-iterator\",\n              value: aggregatedValue,\n            };\n            updateNode({\n              output: wrapInPromise\n                ? {\n                    __gensxSerialized: true,\n                    type: \"promise\",\n                    value,\n                  }\n                : value,\n            });\n          }\n          lastUpdateNodeCall = performance.now();\n        }\n        return value;\n      });\n\n      // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n      if (isDone) {\n        break;\n      }\n\n      yield value;\n    }\n  } catch (e) {\n    const { completeNode, addMetadata } = getCurrentNodeCheckpointManager();\n    addMetadata({ error: serializeError(e) });\n    const aggregatedValue = aggregator(chunks);\n    if (streamKey) {\n      completeNode(\n        {\n          ...(fullValue as Record<string, unknown>),\n          [streamKey]: {\n            __gensxSerialized: true,\n            type: \"async-iterator\",\n            value: aggregatedValue,\n          },\n        },\n        { wrapInPromise },\n      );\n    } else {\n      completeNode(\n        {\n          __gensxSerialized: true,\n          type: \"async-iterator\",\n          value: aggregatedValue,\n        },\n        { wrapInPromise },\n      );\n    }\n    throw e;\n  }\n}\n\nexport const isReadableStream = (x: unknown): x is ReadableStream =>\n  x != null &&\n  typeof x === \"object\" &&\n  \"getReader\" in x &&\n  typeof x.getReader === \"function\";\n\nexport const isAsyncIterable = (x: unknown): x is AsyncIterable<unknown> =>\n  x != null &&\n  typeof x === \"object\" &&\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  typeof (x as any)[Symbol.asyncIterator] === \"function\";\n"],"names":["context","getCurrentContext","nodeId","generateNodeId","getContextSnapshot","ExecutionContext","withContext","getCurrentNodeCheckpointManager"],"mappings":"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"}