{"version":3,"file":"testing.cjs","names":["name: string","inputSchema: ZodType<TIn>","runOne: (args: {\n      input: TIn;\n      item: Item<TIn>;\n      itemIndex: number;\n      items: Items<TIn>;\n      ctx: NodeExecutionContext<ItemHarnessNodeConfig<TIn, TOut>>;\n    }) => TOut | Promise<TOut>","opts: Readonly<{\n      id?: string;\n    }>","prefix: string","makeRunIdValue: () => string","makeActivationIdValue: () => string","name: string","args: Readonly<{\n      workflowId: WorkflowId;\n      startAt?: NodeId;\n      id?: string;\n      execution?: Readonly<{ hint?: \"local\" | \"worker\"; queue?: string }>;\n    }>","workflows: WorkflowRunnerService","emitPorts","name: string","id?: string","emitPorts","InMemoryWorkflowExecutionRepository","HintOnlyOffloadPolicy","InMemoryRunEventBus","InMemoryLiveWorkflowRepository","InMemoryRunDataFactory","DefaultExecutionContextFactory","tsyringeContainer","DefaultDrivingScheduler","InlineDrivingScheduler","NodeExecutor","NodeInstanceFactory","InProcessRetryRunner","DefaultAsyncSleeper","CoreTokens","PersistedWorkflowTokenRegistry","AllWorkflowsActiveWorkflowActivationPolicy","EngineRuntimeRegistrar","Engine","RunIntentService","runToCompletion: RegistrarEngineTestKitHandle[\"runToCompletion\"]","runIntentStartToCompletion: RegistrarEngineTestKitHandle[\"runIntentStartToCompletion\"]","WorkflowBuilder"],"sources":["../src/testing/RejectingCredentialSessionService.ts","../src/testing/ItemHarnessNode.ts","../src/testing/ItemHarnessNodeConfig.ts","../src/testing/CapturingScheduler.ts","../src/testing/PrefixedSequentialIdGenerator.ts","../src/testing/EngineTestKitRunIdFactory.ts","../src/testing/InMemoryTriggerSetupStateRepository.ts","../src/testing/SubWorkflowRunnerTestNode.ts","../src/testing/WorkflowTestHarnessManualTrigger.ts","../src/testing/SwitchHarnessNode.ts","../src/testing/RegistrarEngineTestKitFactory.ts","../src/testing/WorkflowTestKitNodeRegistrationContextFactory.ts","../src/testing/WorkflowTestKitRunNodeWorkflowFactory.ts","../src/testing/WorkflowTestKitBuilder.ts"],"sourcesContent":["import type { CredentialSessionService } from \"../contracts/credentialTypes\";\n\nexport class RejectingCredentialSessionService implements CredentialSessionService {\n  async getSession<TSession = unknown>(\n    args: Readonly<{ workflowId: string; nodeId: string; slotKey: string }>,\n  ): Promise<TSession> {\n    throw new Error(\n      `Credential sessions are unavailable for workflow ${args.workflowId} node ${args.nodeId} slot \"${args.slotKey}\". Register a real CredentialSessionService implementation before executing workflows.`,\n    );\n  }\n}\n","import type { Item, RunnableNode, RunnableNodeExecuteArgs } from \"../types\";\n\nimport type { ItemHarnessNodeConfig } from \"./ItemHarnessNodeConfig\";\n\nexport class ItemHarnessNode implements RunnableNode<ItemHarnessNodeConfig<any, any>> {\n  readonly kind = \"node\" as const;\n  readonly outputPorts = [\"main\"] as const;\n\n  async execute(args: RunnableNodeExecuteArgs<ItemHarnessNodeConfig<any, any>>): Promise<unknown> {\n    return await args.ctx.config.runOne({\n      input: args.input as never,\n      item: args.item as Item,\n      itemIndex: args.itemIndex,\n      items: args.items,\n      ctx: args.ctx,\n    });\n  }\n}\n","import type { ZodType } from \"zod\";\n\nimport type { TypeToken } from \"../di\";\nimport type { Item, Items, NodeExecutionContext, RunnableNodeConfig } from \"../types\";\n\nimport { ItemHarnessNode } from \"./ItemHarnessNode\";\n\nexport class ItemHarnessNodeConfig<TIn = unknown, TOut = unknown> implements RunnableNodeConfig<TIn, TOut> {\n  readonly kind = \"node\" as const;\n  readonly type: TypeToken<unknown> = ItemHarnessNode;\n\n  constructor(\n    public readonly name: string,\n    public readonly inputSchema: ZodType<TIn>,\n    public readonly runOne: (args: {\n      input: TIn;\n      item: Item<TIn>;\n      itemIndex: number;\n      items: Items<TIn>;\n      ctx: NodeExecutionContext<ItemHarnessNodeConfig<TIn, TOut>>;\n    }) => TOut | Promise<TOut>,\n    public readonly opts: Readonly<{\n      id?: string;\n    }> = {},\n  ) {}\n\n  get id(): string | undefined {\n    return this.opts.id;\n  }\n}\n","import type { NodeExecutionRequest, NodeExecutionScheduler } from \"../types\";\n\nexport class CapturingScheduler implements NodeExecutionScheduler {\n  lastRequest: NodeExecutionRequest | undefined;\n  requests: NodeExecutionRequest[] = [];\n\n  async enqueue(request: NodeExecutionRequest): Promise<{ receiptId: string }> {\n    this.lastRequest = request;\n    this.requests.push(request);\n    return { receiptId: `receipt_${this.requests.length}` };\n  }\n}\n","export class PrefixedSequentialIdGenerator {\n  private n = 0;\n\n  constructor(private readonly prefix: string) {}\n\n  next(): string {\n    this.n += 1;\n    return `${this.prefix}${this.n}`;\n  }\n\n  asFn(): () => string {\n    return () => this.next();\n  }\n}\n","import type { RunIdFactory } from \"../types\";\n\nexport class EngineTestKitRunIdFactory implements RunIdFactory {\n  private runCounter = 0;\n  private activationCounter = 0;\n\n  constructor(\n    private readonly makeRunIdValue: () => string,\n    private readonly makeActivationIdValue: () => string,\n  ) {}\n\n  makeRunId(): string {\n    this.runCounter += 1;\n    return this.makeRunIdValue();\n  }\n\n  makeActivationId(): string {\n    this.activationCounter += 1;\n    return this.makeActivationIdValue();\n  }\n}\n","import type { PersistedTriggerSetupState, TriggerSetupStateRepository } from \"../types\";\n\nexport class InMemoryTriggerSetupStateRepository implements TriggerSetupStateRepository {\n  private readonly statesByKey = new Map<string, PersistedTriggerSetupState>();\n\n  async load(trigger: { workflowId: string; nodeId: string }): Promise<PersistedTriggerSetupState | undefined> {\n    return this.statesByKey.get(this.toKey(trigger));\n  }\n\n  async save(state: PersistedTriggerSetupState): Promise<void> {\n    this.statesByKey.set(this.toKey(state.trigger), state);\n  }\n\n  async delete(trigger: { workflowId: string; nodeId: string }): Promise<void> {\n    this.statesByKey.delete(this.toKey(trigger));\n  }\n\n  private toKey(trigger: { workflowId: string; nodeId: string }): string {\n    return `${trigger.workflowId}:${trigger.nodeId}`;\n  }\n}\n","/* eslint-disable codemation/single-class-per-file -- Runnable config and implementation share a TypeToken pairing. */\nimport type { WorkflowRunnerService } from \"../contracts/runtimeTypes\";\nimport type { TypeToken } from \"../di\";\nimport type { Item, NodeId, RunnableNode, RunnableNodeConfig, RunnableNodeExecuteArgs, WorkflowId } from \"../types\";\nimport { emitPorts } from \"../contracts/emitPorts\";\n\nexport class SubWorkflowRunnerConfig<TInputJson = unknown, TOutputJson = unknown> implements RunnableNodeConfig<\n  TInputJson,\n  TOutputJson\n> {\n  readonly kind = \"node\" as const;\n  readonly type: TypeToken<unknown> = SubWorkflowRunnerNode;\n\n  readonly workflowId: WorkflowId;\n  readonly startAt: NodeId | undefined;\n\n  constructor(\n    public readonly name: string,\n    public readonly args: Readonly<{\n      workflowId: WorkflowId;\n      startAt?: NodeId;\n      id?: string;\n      execution?: Readonly<{ hint?: \"local\" | \"worker\"; queue?: string }>;\n    }>,\n  ) {\n    this.workflowId = args.workflowId;\n    this.startAt = args.startAt;\n  }\n\n  get id(): string | undefined {\n    return this.args.id;\n  }\n\n  get execution(): Readonly<{ hint?: \"local\" | \"worker\"; queue?: string }> | undefined {\n    return this.args.execution;\n  }\n}\n\nexport class SubWorkflowRunnerNode implements RunnableNode<SubWorkflowRunnerConfig<any, any>> {\n  readonly kind = \"node\" as const;\n  readonly outputPorts = [\"main\"] as const;\n\n  constructor(private readonly workflows: WorkflowRunnerService) {}\n\n  async execute(args: RunnableNodeExecuteArgs<SubWorkflowRunnerConfig<any, any>>): Promise<unknown> {\n    const current = args.item as Item;\n    const result = await this.workflows.runById({\n      workflowId: args.ctx.config.workflowId,\n      startAt: args.ctx.config.startAt,\n      items: [current],\n      parent: {\n        runId: args.ctx.runId,\n        workflowId: args.ctx.workflowId,\n        nodeId: args.ctx.nodeId,\n        subworkflowDepth: args.ctx.subworkflowDepth,\n        engineMaxNodeActivations: args.ctx.engineMaxNodeActivations,\n        engineMaxSubworkflowDepth: args.ctx.engineMaxSubworkflowDepth,\n      },\n    });\n    await args.ctx.nodeState?.setChildRunId?.({ nodeId: args.ctx.nodeId, childRunId: result.runId });\n    if (result.status !== \"completed\") {\n      throw new Error(`Subworkflow ${args.ctx.config.workflowId} did not complete (status=${result.status})`);\n    }\n    return emitPorts({ main: result.outputs });\n  }\n}\n","/* eslint-disable codemation/single-class-per-file -- Trigger config and implementation share a TypeToken pairing. */\nimport type { TypeToken } from \"../di\";\nimport type {\n  Items,\n  NodeExecutionContext,\n  NodeOutputs,\n  TriggerNode,\n  TriggerNodeConfig,\n  TriggerSetupContext,\n} from \"../types\";\n\nexport class WorkflowTestHarnessManualTriggerConfig implements TriggerNodeConfig<unknown> {\n  readonly kind = \"trigger\" as const;\n  readonly type: TypeToken<unknown> = WorkflowTestHarnessManualTriggerNode;\n\n  constructor(\n    public readonly name: string,\n    public readonly id?: string,\n  ) {}\n}\n\nexport class WorkflowTestHarnessManualTriggerNode implements TriggerNode<WorkflowTestHarnessManualTriggerConfig> {\n  readonly kind = \"trigger\" as const;\n  readonly outputPorts = [\"main\"] as const;\n\n  async setup(_ctx: TriggerSetupContext<WorkflowTestHarnessManualTriggerConfig>): Promise<undefined> {\n    return undefined;\n  }\n\n  async execute(\n    items: Items,\n    _ctx: NodeExecutionContext<WorkflowTestHarnessManualTriggerConfig>,\n  ): Promise<NodeOutputs> {\n    return { main: items };\n  }\n}\n","import type { TypeToken } from \"../di\";\nimport type {\n  Item,\n  Items,\n  NodeExecutionContext,\n  RunnableNode,\n  RunnableNodeConfig,\n  RunnableNodeExecuteArgs,\n} from \"../types\";\nimport { emitPorts } from \"../contracts/emitPorts\";\n\nexport class SwitchHarnessNode implements RunnableNode<SwitchHarnessNodeConfig<any>> {\n  readonly kind = \"node\" as const;\n  readonly outputPorts = [] as const;\n\n  async execute(args: RunnableNodeExecuteArgs<SwitchHarnessNodeConfig<any>>): Promise<unknown> {\n    const key = await Promise.resolve(\n      args.ctx.config.cfg.resolveCaseKey(args.item as Item, args.itemIndex, args.items, args.ctx),\n    );\n    const { cases, defaultCase } = args.ctx.config.cfg;\n    const port = cases.includes(key) ? key : defaultCase;\n    return emitPorts({\n      [port]: [args.item],\n    });\n  }\n}\n\nexport class SwitchHarnessNodeConfig<TInputJson = unknown> implements RunnableNodeConfig<TInputJson, TInputJson> {\n  readonly kind = \"node\" as const;\n  readonly type: TypeToken<unknown> = SwitchHarnessNode;\n  readonly declaredOutputPorts: ReadonlyArray<string>;\n\n  constructor(\n    public readonly name: string,\n    public readonly cfg: Readonly<{\n      cases: readonly string[];\n      defaultCase: string;\n      resolveCaseKey: (\n        item: Item<TInputJson>,\n        index: number,\n        items: Items<TInputJson>,\n        ctx: NodeExecutionContext<SwitchHarnessNodeConfig<TInputJson>>,\n      ) => string | Promise<string>;\n    }>,\n    public readonly opts: Readonly<{ id?: string }> = {},\n  ) {\n    this.declaredOutputPorts = [...new Set([...cfg.cases, cfg.defaultCase])].sort();\n  }\n\n  get id(): string | undefined {\n    return this.opts.id;\n  }\n}\n","import type { DependencyContainer, InjectionToken } from \"tsyringe\";\nimport { container as tsyringeContainer } from \"tsyringe\";\n\nimport type { WorkflowRunnerService } from \"../contracts/runtimeTypes\";\nimport { CoreTokens } from \"../di\";\nimport { InMemoryRunEventBus } from \"../events/InMemoryRunEventBusRegistry\";\nimport { AllWorkflowsActiveWorkflowActivationPolicy } from \"../contracts/workflowActivationPolicy\";\nimport { RunIntentService } from \"../runtime/RunIntentService\";\nimport {\n  DefaultDrivingScheduler,\n  DefaultAsyncSleeper,\n  DefaultExecutionContextFactory,\n  Engine,\n  EngineRuntimeRegistrar,\n  EngineWorkflowRunnerService,\n  HintOnlyOffloadPolicy,\n  InProcessRetryRunner,\n  InMemoryRunDataFactory,\n  InMemoryWorkflowExecutionRepository,\n  InlineDrivingScheduler,\n  NodeExecutor,\n  NodeInstanceFactory,\n  PersistedWorkflowTokenRegistry,\n} from \"../bootstrap/index\";\nimport { InMemoryLiveWorkflowRepository } from \"../runtime/InMemoryLiveWorkflowRepository\";\nimport { EngineTestKitRunIdFactory } from \"./EngineTestKitRunIdFactory\";\nimport { InMemoryTriggerSetupStateRepository } from \"./InMemoryTriggerSetupStateRepository\";\nimport { RejectingCredentialSessionService } from \"./RejectingCredentialSessionService\";\nimport { CapturingScheduler } from \"./CapturingScheduler\";\nimport { PrefixedSequentialIdGenerator } from \"./PrefixedSequentialIdGenerator\";\nimport type { RegistrarEngineTestKitHandle, RegistrarEngineTestKitOptions } from \"./RegistrarEngineTestKit.types\";\nimport { ItemHarnessNode } from \"./ItemHarnessNode\";\nimport { SubWorkflowRunnerNode } from \"./SubWorkflowRunnerTestNode\";\nimport { WorkflowTestHarnessManualTriggerNode } from \"./WorkflowTestHarnessManualTrigger\";\nimport { SwitchHarnessNode } from \"./SwitchHarnessNode\";\n\nexport class RegistrarEngineTestKitFactory {\n  static create(options: RegistrarEngineTestKitOptions = {}): RegistrarEngineTestKitHandle {\n    const runStore = options.runStore ?? new InMemoryWorkflowExecutionRepository();\n    const scheduler = options.scheduler ?? new CapturingScheduler();\n    const offloadPolicy = options.offloadPolicy ?? new HintOnlyOffloadPolicy();\n    const runIdGen = new PrefixedSequentialIdGenerator(\"run_\");\n    const activationIdGen = new PrefixedSequentialIdGenerator(\"act_\");\n    const makeRunId = options.makeRunId ?? runIdGen.asFn();\n    const makeActivationId = options.makeActivationId ?? activationIdGen.asFn();\n    const credentialSessions = options.credentialSessions ?? new RejectingCredentialSessionService();\n    const eventBus = options.eventBus ?? new InMemoryRunEventBus();\n    const triggerSetupStateRepository =\n      options.triggerSetupStateRepository ?? new InMemoryTriggerSetupStateRepository();\n    const liveWorkflowRepository = new InMemoryLiveWorkflowRepository();\n    const runDataFactory = options.runDataFactory ?? new InMemoryRunDataFactory();\n    const executionContextFactory = options.executionContextFactory ?? new DefaultExecutionContextFactory();\n    const container = options.container ?? tsyringeContainer.createChildContainer();\n    const dependencyContainer = container as DependencyContainer;\n    const nodeResolver = container;\n    const nodeExecutor = new NodeExecutor(\n      new NodeInstanceFactory(nodeResolver),\n      new InProcessRetryRunner(new DefaultAsyncSleeper()),\n    );\n    const activationScheduler = new DefaultDrivingScheduler(\n      offloadPolicy,\n      scheduler,\n      new InlineDrivingScheduler(nodeExecutor),\n    );\n\n    for (const [token, value] of options.providers ?? new Map<InjectionToken<unknown>, unknown>()) {\n      dependencyContainer.registerInstance(token, value);\n    }\n\n    dependencyContainer.registerInstance(CoreTokens.CredentialSessionService, credentialSessions);\n    dependencyContainer.registerInstance(CoreTokens.LiveWorkflowRepository, liveWorkflowRepository);\n    dependencyContainer.registerInstance(CoreTokens.WorkflowRepository, liveWorkflowRepository);\n    dependencyContainer.registerInstance(CoreTokens.NodeResolver, nodeResolver);\n    dependencyContainer.registerInstance(\n      CoreTokens.RunIdFactory,\n      new EngineTestKitRunIdFactory(makeRunId, makeActivationId),\n    );\n    dependencyContainer.registerInstance(\n      CoreTokens.ActivationIdFactory,\n      new EngineTestKitRunIdFactory(makeRunId, makeActivationId),\n    );\n    dependencyContainer.registerInstance(CoreTokens.WebhookBasePath, options.webhookBasePath ?? \"/webhooks\");\n    dependencyContainer.registerInstance(CoreTokens.WorkflowExecutionRepository, runStore);\n    dependencyContainer.registerInstance(CoreTokens.TriggerSetupStateRepository, triggerSetupStateRepository);\n    dependencyContainer.registerInstance(CoreTokens.NodeActivationScheduler, activationScheduler);\n    dependencyContainer.registerInstance(CoreTokens.RunDataFactory, runDataFactory);\n    dependencyContainer.registerInstance(CoreTokens.ExecutionContextFactory, executionContextFactory);\n    dependencyContainer.registerInstance(CoreTokens.RunEventBus, eventBus);\n    dependencyContainer.registerInstance(\n      CoreTokens.PersistedWorkflowTokenRegistry,\n      new PersistedWorkflowTokenRegistry(),\n    );\n    dependencyContainer.registerInstance(\n      CoreTokens.WorkflowActivationPolicy,\n      new AllWorkflowsActiveWorkflowActivationPolicy(),\n    );\n\n    if (options.executionLimitsPolicy !== undefined) {\n      dependencyContainer.registerInstance(CoreTokens.EngineExecutionLimitsPolicy, options.executionLimitsPolicy);\n    }\n\n    new EngineRuntimeRegistrar().register(dependencyContainer, options.registrarOptions ?? {});\n\n    const engine = dependencyContainer.resolve(Engine);\n    const runIntent = dependencyContainer.resolve(RunIntentService);\n    const workflowRunner =\n      options.workflowRunner ??\n      (dependencyContainer.resolve(CoreTokens.WorkflowRunnerService) as EngineWorkflowRunnerService);\n    dependencyContainer.registerInstance(\n      SubWorkflowRunnerNode,\n      new SubWorkflowRunnerNode(workflowRunner as WorkflowRunnerService),\n    );\n    dependencyContainer.registerInstance(ItemHarnessNode, new ItemHarnessNode());\n    dependencyContainer.registerInstance(SwitchHarnessNode, new SwitchHarnessNode());\n    dependencyContainer.registerInstance(\n      WorkflowTestHarnessManualTriggerNode,\n      new WorkflowTestHarnessManualTriggerNode(),\n    );\n\n    const start = async (workflows: ReadonlyArray<import(\"../types\").WorkflowDefinition>): Promise<void> => {\n      await engine.start([...workflows]);\n    };\n\n    const runToCompletion: RegistrarEngineTestKitHandle[\"runToCompletion\"] = async (args) => {\n      const r0 = await engine.runWorkflow(args.wf, args.startAt, args.items, args.parent);\n      if (r0.status !== \"pending\") return r0;\n      return await engine.waitForCompletion(r0.runId);\n    };\n\n    const runIntentStartToCompletion: RegistrarEngineTestKitHandle[\"runIntentStartToCompletion\"] = async (args) => {\n      const r0 = await runIntent.startWorkflow({\n        workflow: args.wf,\n        startAt: args.startAt,\n        items: args.items,\n        parent: args.parent,\n      });\n      if (r0.status !== \"pending\") return r0;\n      return await engine.waitForCompletion(r0.runId);\n    };\n\n    return {\n      engine,\n      runIntent,\n      liveWorkflowRepository,\n      runStore,\n      triggerSetupStateRepository,\n      scheduler: scheduler as CapturingScheduler | import(\"../types\").NodeExecutionScheduler,\n      offloadPolicy,\n      workflowRunner,\n      dependencyContainer,\n      start,\n      runToCompletion,\n      runIntentStartToCompletion,\n      makeRunId,\n      makeActivationId,\n    };\n  }\n}\n","import type { DependencyContainer } from \"tsyringe\";\n\nimport type { TypeToken } from \"../di\";\n\nimport type { DefinedNodeRegistrationContext } from \"./WorkflowTestKit.types\";\n\nexport class WorkflowTestKitNodeRegistrationContextFactory {\n  create(dependencyContainer: DependencyContainer): DefinedNodeRegistrationContext {\n    return {\n      registerNode<TValue>(token: TypeToken<TValue>, implementation?: TypeToken<TValue>) {\n        dependencyContainer.registerSingleton(token as never, (implementation ?? token) as never);\n      },\n    };\n  }\n}\n","import type { RunnableNodeConfig, WorkflowDefinition, WorkflowId } from \"../types\";\nimport { WorkflowBuilder } from \"../workflow/dsl/WorkflowBuilder\";\n\nimport { WorkflowTestHarnessManualTriggerConfig } from \"./WorkflowTestHarnessManualTrigger\";\n\nconst defaultInlineWorkflowId = \"codemation.testing.workflowkit.inline\" as WorkflowId;\nconst defaultInlineWorkflowName = \"WorkflowTestKit inline\";\n\nexport class WorkflowTestKitRunNodeWorkflowFactory {\n  build(args: { node: RunnableNodeConfig; workflowId?: WorkflowId; workflowName?: string }): WorkflowDefinition {\n    const workflowId = args.workflowId ?? defaultInlineWorkflowId;\n    const workflowName = args.workflowName ?? defaultInlineWorkflowName;\n    const trigger = new WorkflowTestHarnessManualTriggerConfig(\n      \"WorkflowTestKit trigger\",\n      \"workflowkit.harness.trigger\",\n    );\n    return new WorkflowBuilder({ id: workflowId, name: workflowName }).trigger(trigger).then(args.node).build();\n  }\n\n  defaultStartNodeId(): string {\n    return \"workflowkit.harness.trigger\";\n  }\n}\n","import type { DependencyContainer } from \"tsyringe\";\n\nimport type { Items, NodeId, RunnableNodeConfig, RunResult, WorkflowDefinition, WorkflowId } from \"../types\";\n\nimport { RegistrarEngineTestKitFactory } from \"./RegistrarEngineTestKitFactory\";\nimport type { EngineTestKitOptions, RegistrarEngineTestKitHandle } from \"./RegistrarEngineTestKit.types\";\nimport { WorkflowTestKitNodeRegistrationContextFactory } from \"./WorkflowTestKitNodeRegistrationContextFactory\";\nimport type { DefinedNodeRegistration } from \"./WorkflowTestKit.types\";\nimport { WorkflowTestKitRunNodeWorkflowFactory } from \"./WorkflowTestKitRunNodeWorkflowFactory\";\n\nexport type { DefinedNodeRegistration, DefinedNodeRegistrationContext } from \"./WorkflowTestKit.types\";\n\nexport type WorkflowTestKitOptions = EngineTestKitOptions;\n\nexport class WorkflowTestKit {\n  private readonly handle: RegistrarEngineTestKitHandle;\n  private readonly runNodeWorkflowFactory = new WorkflowTestKitRunNodeWorkflowFactory();\n  private readonly nodeRegistrationContextFactory = new WorkflowTestKitNodeRegistrationContextFactory();\n\n  constructor(options: WorkflowTestKitOptions = {}) {\n    this.handle = RegistrarEngineTestKitFactory.create(options);\n  }\n\n  get dependencyContainer(): DependencyContainer {\n    return this.handle.dependencyContainer;\n  }\n\n  get engine(): RegistrarEngineTestKitHandle[\"engine\"] {\n    return this.handle.engine;\n  }\n\n  get workflowRunner(): RegistrarEngineTestKitHandle[\"workflowRunner\"] {\n    return this.handle.workflowRunner;\n  }\n\n  get liveWorkflowRepository(): RegistrarEngineTestKitHandle[\"liveWorkflowRepository\"] {\n    return this.handle.liveWorkflowRepository;\n  }\n\n  get runStore(): RegistrarEngineTestKitHandle[\"runStore\"] {\n    return this.handle.runStore;\n  }\n\n  registerDefinedNodes(definitions: ReadonlyArray<DefinedNodeRegistration>): void {\n    const ctx = this.nodeRegistrationContextFactory.create(this.handle.dependencyContainer);\n    for (const def of definitions) {\n      def.register(ctx);\n    }\n  }\n\n  async run(args: { workflow: WorkflowDefinition; items: Items; startAt?: NodeId }): Promise<RunResult> {\n    await this.handle.start([args.workflow]);\n    return await this.handle.workflowRunner.runById({\n      workflowId: args.workflow.id,\n      startAt: args.startAt,\n      items: args.items,\n    });\n  }\n\n  async runNode(args: {\n    node: RunnableNodeConfig;\n    items: Items;\n    workflowId?: WorkflowId;\n    workflowName?: string;\n  }): Promise<RunResult> {\n    const wf = this.runNodeWorkflowFactory.build(args);\n    return await this.run({\n      workflow: wf,\n      items: args.items,\n      startAt: this.runNodeWorkflowFactory.defaultStartNodeId(),\n    });\n  }\n}\n"],"mappings":"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"}