{"version":3,"sources":["../../src/api/ComposerRuntime.ts"],"sourcesContent":["import { Attachment, PendingAttachment } from \"../types/AttachmentTypes\";\nimport {\n  ComposerRuntimeCore,\n  ComposerRuntimeEventType,\n  ThreadComposerRuntimeCore,\n} from \"../runtimes/core/ComposerRuntimeCore\";\nimport { Unsubscribe } from \"../types\";\nimport { SubscribableWithState } from \"./subscribable/Subscribable\";\nimport { LazyMemoizeSubject } from \"./subscribable/LazyMemoizeSubject\";\nimport {\n  AttachmentRuntime,\n  AttachmentState,\n  EditComposerAttachmentRuntimeImpl,\n  ThreadComposerAttachmentRuntimeImpl,\n} from \"./AttachmentRuntime\";\nimport { ShallowMemoizeSubject } from \"./subscribable/ShallowMemoizeSubject\";\nimport { SKIP_UPDATE } from \"./subscribable/SKIP_UPDATE\";\nimport { ComposerRuntimePath } from \"./RuntimePathTypes\";\nimport { MessageRole, RunConfig } from \"../types/AssistantTypes\";\nimport { EventSubscriptionSubject } from \"./subscribable/EventSubscriptionSubject\";\n\nexport type ThreadComposerRuntimeCoreBinding = SubscribableWithState<\n  ThreadComposerRuntimeCore | undefined,\n  ComposerRuntimePath & { composerSource: \"thread\" }\n>;\n\nexport type EditComposerRuntimeCoreBinding = SubscribableWithState<\n  ComposerRuntimeCore | undefined,\n  ComposerRuntimePath & { composerSource: \"edit\" }\n>;\n\nexport type ComposerRuntimeCoreBinding = SubscribableWithState<\n  ComposerRuntimeCore | undefined,\n  ComposerRuntimePath\n>;\n\ntype BaseComposerState = {\n  readonly canCancel: boolean;\n  readonly isEditing: boolean;\n  readonly isEmpty: boolean;\n\n  readonly text: string;\n  readonly role: MessageRole;\n  readonly attachments: readonly Attachment[];\n  readonly runConfig: RunConfig;\n};\n\nexport type ThreadComposerState = BaseComposerState & {\n  readonly type: \"thread\";\n\n  readonly attachments: readonly PendingAttachment[];\n};\n\nexport type EditComposerState = BaseComposerState & {\n  readonly type: \"edit\";\n};\n\nexport type ComposerState = ThreadComposerState | EditComposerState;\n\nconst EMPTY_ARRAY = Object.freeze([]);\nconst EMPTY_OBJECT = Object.freeze({});\nconst getThreadComposerState = (\n  runtime: ThreadComposerRuntimeCore | undefined,\n): ThreadComposerState => {\n  return Object.freeze({\n    type: \"thread\",\n\n    isEditing: runtime?.isEditing ?? false,\n    canCancel: runtime?.canCancel ?? false,\n    isEmpty: runtime?.isEmpty ?? true,\n\n    attachments: runtime?.attachments ?? EMPTY_ARRAY,\n    text: runtime?.text ?? \"\",\n    role: runtime?.role ?? \"user\",\n    runConfig: runtime?.runConfig ?? EMPTY_OBJECT,\n\n    value: runtime?.text ?? \"\",\n  });\n};\n\nconst getEditComposerState = (\n  runtime: ComposerRuntimeCore | undefined,\n): EditComposerState => {\n  return Object.freeze({\n    type: \"edit\",\n\n    isEditing: runtime?.isEditing ?? false,\n    canCancel: runtime?.canCancel ?? false,\n    isEmpty: runtime?.isEmpty ?? true,\n\n    text: runtime?.text ?? \"\",\n    role: runtime?.role ?? \"user\",\n    attachments: runtime?.attachments ?? EMPTY_ARRAY,\n    runConfig: runtime?.runConfig ?? EMPTY_OBJECT,\n\n    value: runtime?.text ?? \"\",\n  });\n};\n\nexport type ComposerRuntime = {\n  readonly path: ComposerRuntimePath;\n  readonly type: \"edit\" | \"thread\";\n  getState(): ComposerState;\n\n  getAttachmentAccept(): string;\n  addAttachment(file: File): Promise<void>;\n\n  setText(text: string): void;\n  setRole(role: MessageRole): void;\n  setRunConfig(runConfig: RunConfig): void;\n\n  reset(): Promise<void>;\n  clearAttachments(): Promise<void>;\n\n  send(): void;\n  cancel(): void;\n  subscribe(callback: () => void): Unsubscribe;\n  getAttachmentByIndex(idx: number): AttachmentRuntime;\n};\n\nexport abstract class ComposerRuntimeImpl implements ComposerRuntime {\n  public get path() {\n    return this._core.path;\n  }\n\n  public abstract get type(): \"edit\" | \"thread\";\n\n  constructor(protected _core: ComposerRuntimeCoreBinding) {}\n\n  protected __internal_bindMethods() {\n    this.setText = this.setText.bind(this);\n    this.setRunConfig = this.setRunConfig.bind(this);\n    this.getState = this.getState.bind(this);\n    this.subscribe = this.subscribe.bind(this);\n    this.addAttachment = this.addAttachment.bind(this);\n    this.reset = this.reset.bind(this);\n    this.clearAttachments = this.clearAttachments.bind(this);\n    this.send = this.send.bind(this);\n    this.cancel = this.cancel.bind(this);\n    this.setRole = this.setRole.bind(this);\n    this.getAttachmentAccept = this.getAttachmentAccept.bind(this);\n    this.getAttachmentByIndex = this.getAttachmentByIndex.bind(this);\n    this.unstable_on = this.unstable_on.bind(this);\n  }\n\n  public abstract getState(): ComposerState;\n\n  public setText(text: string) {\n    const core = this._core.getState();\n    if (!core) throw new Error(\"Composer is not available\");\n    core.setText(text);\n  }\n\n  public setRunConfig(runConfig: RunConfig) {\n    const core = this._core.getState();\n    if (!core) throw new Error(\"Composer is not available\");\n    core.setRunConfig(runConfig);\n  }\n\n  public addAttachment(file: File) {\n    const core = this._core.getState();\n    if (!core) throw new Error(\"Composer is not available\");\n    return core.addAttachment(file);\n  }\n\n  public reset() {\n    const core = this._core.getState();\n    if (!core) throw new Error(\"Composer is not available\");\n    return core.reset();\n  }\n\n  public clearAttachments() {\n    const core = this._core.getState();\n    if (!core) throw new Error(\"Composer is not available\");\n    return core.clearAttachments();\n  }\n\n  public send() {\n    const core = this._core.getState();\n    if (!core) throw new Error(\"Composer is not available\");\n    core.send();\n  }\n\n  public cancel() {\n    const core = this._core.getState();\n    if (!core) throw new Error(\"Composer is not available\");\n    core.cancel();\n  }\n\n  public setRole(role: MessageRole) {\n    const core = this._core.getState();\n    if (!core) throw new Error(\"Composer is not available\");\n    core.setRole(role);\n  }\n\n  public subscribe(callback: () => void) {\n    return this._core.subscribe(callback);\n  }\n\n  private _eventSubscriptionSubjects = new Map<\n    string,\n    EventSubscriptionSubject<ComposerRuntimeEventType>\n  >();\n\n  public unstable_on(\n    event: ComposerRuntimeEventType,\n    callback: () => void,\n  ): Unsubscribe {\n    let subject = this._eventSubscriptionSubjects.get(event);\n    if (!subject) {\n      subject = new EventSubscriptionSubject({\n        event: event,\n        binding: this._core,\n      });\n      this._eventSubscriptionSubjects.set(event, subject);\n    }\n    return subject.subscribe(callback);\n  }\n\n  public getAttachmentAccept(): string {\n    const core = this._core.getState();\n    if (!core) throw new Error(\"Composer is not available\");\n    return core.getAttachmentAccept();\n  }\n\n  public abstract getAttachmentByIndex(idx: number): AttachmentRuntime;\n}\n\nexport type ThreadComposerRuntime = Omit<\n  ComposerRuntime,\n  \"getState\" | \"getAttachmentByIndex\"\n> & {\n  readonly path: ComposerRuntimePath & { composerSource: \"thread\" };\n  readonly type: \"thread\";\n  getState(): ThreadComposerState;\n\n  getAttachmentByIndex(\n    idx: number,\n  ): AttachmentRuntime & { source: \"thread-composer\" };\n};\n\nexport class ThreadComposerRuntimeImpl\n  extends ComposerRuntimeImpl\n  implements ThreadComposerRuntime\n{\n  public override get path() {\n    return this._core.path as ComposerRuntimePath & {\n      composerSource: \"thread\";\n    };\n  }\n\n  public get type() {\n    return \"thread\" as const;\n  }\n\n  private _getState;\n\n  constructor(core: ThreadComposerRuntimeCoreBinding) {\n    const stateBinding = new LazyMemoizeSubject({\n      path: core.path,\n      getState: () => getThreadComposerState(core.getState()),\n      subscribe: (callback) => core.subscribe(callback),\n    });\n    super({\n      path: core.path,\n      getState: () => core.getState(),\n      subscribe: (callback) => stateBinding.subscribe(callback),\n    });\n    this._getState = stateBinding.getState.bind(stateBinding);\n  }\n\n  public override getState(): ThreadComposerState {\n    return this._getState();\n  }\n\n  public getAttachmentByIndex(idx: number) {\n    return new ThreadComposerAttachmentRuntimeImpl(\n      new ShallowMemoizeSubject({\n        path: {\n          ...this.path,\n          attachmentSource: \"thread-composer\",\n          attachmentSelector: { type: \"index\", index: idx },\n          ref: this.path.ref + `${this.path.ref}.attachments[${idx}]`,\n        },\n        getState: () => {\n          const attachments = this.getState().attachments;\n          const attachment = attachments[idx];\n          if (!attachment) return SKIP_UPDATE;\n\n          return {\n            ...attachment,\n            source: \"thread-composer\",\n          } satisfies AttachmentState & { source: \"thread-composer\" };\n        },\n        subscribe: (callback) => this._core.subscribe(callback),\n      }),\n      this._core,\n    );\n  }\n}\n\nexport type EditComposerRuntime = Omit<\n  ComposerRuntime,\n  \"getState\" | \"getAttachmentByIndex\"\n> & {\n  readonly path: ComposerRuntimePath & { composerSource: \"edit\" };\n  readonly type: \"edit\";\n\n  getState(): EditComposerState;\n  beginEdit(): void;\n\n  getAttachmentByIndex(\n    idx: number,\n  ): AttachmentRuntime & { source: \"edit-composer\" };\n};\n\nexport class EditComposerRuntimeImpl\n  extends ComposerRuntimeImpl\n  implements EditComposerRuntime\n{\n  public override get path() {\n    return this._core.path as ComposerRuntimePath & { composerSource: \"edit\" };\n  }\n\n  public get type() {\n    return \"edit\" as const;\n  }\n\n  private _getState;\n  constructor(\n    core: EditComposerRuntimeCoreBinding,\n    private _beginEdit: () => void,\n  ) {\n    const stateBinding = new LazyMemoizeSubject({\n      path: core.path,\n      getState: () => getEditComposerState(core.getState()),\n      subscribe: (callback) => core.subscribe(callback),\n    });\n\n    super({\n      path: core.path,\n      getState: () => core.getState(),\n      subscribe: (callback) => stateBinding.subscribe(callback),\n    });\n\n    this._getState = stateBinding.getState.bind(stateBinding);\n  }\n\n  public override __internal_bindMethods() {\n    super.__internal_bindMethods();\n    this.beginEdit = this.beginEdit.bind(this);\n  }\n\n  public override getState(): EditComposerState {\n    return this._getState();\n  }\n\n  public beginEdit() {\n    this._beginEdit();\n  }\n\n  public getAttachmentByIndex(idx: number) {\n    return new EditComposerAttachmentRuntimeImpl(\n      new ShallowMemoizeSubject({\n        path: {\n          ...this.path,\n          attachmentSource: \"edit-composer\",\n          attachmentSelector: { type: \"index\", index: idx },\n          ref: this.path.ref + `${this.path.ref}.attachments[${idx}]`,\n        },\n        getState: () => {\n          const attachments = this.getState().attachments;\n          const attachment = attachments[idx];\n          if (!attachment) return SKIP_UPDATE;\n\n          return {\n            ...attachment,\n            source: \"edit-composer\",\n          } satisfies AttachmentState & { source: \"edit-composer\" };\n        },\n        subscribe: (callback) => this._core.subscribe(callback),\n      }),\n      this._core,\n    );\n  }\n}\n"],"mappings":"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","names":[]}