{"version":3,"file":"ng-commander.mjs","sources":["../../../projects/ng-commander/src/Domain/command-event.interface.ts","../../../projects/ng-commander/src/Application/commander.service.ts","../../../projects/ng-commander/src/ng-commander.ts"],"sourcesContent":["import Command from './command.interface';\n\nexport enum CommandEventType {\n  START = 'start',\n  SUCCESS = 'success',\n  FAIL = 'fail',\n  RESTART = 'restart',\n  DEAD = 'dead',\n}\nexport interface CommandEvent {\n  type: CommandEventType;\n  timestamp: Date;\n  command: Command;\n  data?: any;\n}\n\n// Signal types for Angular 18+ compatibility\nexport type CommandEventSignal = CommandEvent;\n","import { computed, Injectable, OnDestroy } from '@angular/core';\nimport {\n  BehaviorSubject,\n  catchError,\n  EMPTY,\n  finalize,\n  Subject,\n  switchMap,\n} from 'rxjs';\nimport {\n  CommandEvent,\n  CommandEventType,\n} from '../Domain/command-event.interface';\nimport Command from '../Domain/command.interface';\nimport { CommanderConfiguration } from './commander.service.configuration';\n\nexport enum CommanderState {\n  IDLE,\n  EXECUTING,\n  DONE,\n  ERROR,\n}\n\nexport enum CommandsType {\n  WAITING,\n  DONE,\n  ERROR,\n  DEAD,\n}\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class Commander implements OnDestroy {\n  private configuration: CommanderConfiguration = {\n    error: {\n      maxNumberOfRetries: 3,\n    },\n  };\n\n  private commandsSubject = new BehaviorSubject<Command[]>([]);\n  private commandsDoneSubject = new BehaviorSubject<Command[]>([]);\n  private commandsInErrorSubject = new BehaviorSubject<Command[]>([]);\n  private commandsDeadSubject = new BehaviorSubject<Command[]>([]);\n  private stateSubject = new BehaviorSubject<CommanderState>(\n    CommanderState.IDLE,\n  );\n\n  private processingCommand = new Subject<{\n    command: Command;\n    result: any;\n  }>();\n\n  private destroy$ = new Subject<void>();\n\n  public commands$ = this.commandsSubject.asObservable();\n  public commandsDone$ = this.commandsDoneSubject.asObservable();\n  public commandsInError$ = this.commandsInErrorSubject.asObservable();\n  public commandsDead$ = this.commandsDeadSubject.asObservable();\n  public state$ = this.stateSubject.asObservable();\n\n  // Signal properties for Angular 18+ compatibility\n  public commandsSignal = computed(() => this.commandsSubject.value);\n  public commandsDoneSignal = computed(() => this.commandsDoneSubject.value);\n  public commandsInErrorSignal = computed(\n    () => this.commandsInErrorSubject.value,\n  );\n  public commandsDeadSignal = computed(() => this.commandsDeadSubject.value);\n  public stateSignal = computed(() => this.stateSubject.value);\n\n  constructor() {}\n\n  ngOnDestroy(): void {\n    this.destroy$.next();\n    this.destroy$.complete();\n  }\n\n  init(configuration: CommanderConfiguration) {\n    this.configuration = configuration;\n    this.startCommander();\n  }\n\n  private startCommander() {\n    this.processingCommand\n      .pipe(\n        switchMap(({ command }) => {\n          // Update state to executing before starting execution\n          this.stateSubject.next(CommanderState.EXECUTING);\n\n          return command.execute().pipe(\n            // Handle successful execution\n            switchMap((result) => {\n              return this.handleSuccessfulCommand(command, result);\n            }),\n            // Handle errors with retry logic\n            catchError((error) => {\n              return this.handleFailedCommand(command, error);\n            }),\n            // Finalize to ensure cleanup\n            finalize(() => {\n              this.executeNextCommand();\n            }),\n          );\n        }),\n        // Complete the stream when destroy$ emits\n        finalize(() => {\n          this.stateSubject.complete();\n        }),\n      )\n      .subscribe({\n        error: (error) => {\n          console.error('Commander error:', error);\n          this.stateSubject.next(CommanderState.ERROR);\n        },\n      });\n  }\n\n  private handleSuccessfulCommand(command: Command, result: any) {\n    const event: CommandEvent = {\n      type: CommandEventType.SUCCESS,\n      timestamp: new Date(),\n      command: command,\n    };\n\n    if (!command.events) command.events = [];\n    command.events.push(event);\n\n\n    const currentErrors = this.commandsInErrorSubject.value;\n    this.commandsInErrorSubject.next(currentErrors.filter(c => c !== command));\n\n    const currentDone = this.commandsDoneSubject.value;\n    this.commandsDoneSubject.next([...currentDone, command]);\n\n    // Update state to DONE only if there are no more commands\n    this.stateSubject.next(\n      this.commandsSubject.value.length > 0\n        ? CommanderState.EXECUTING\n        : CommanderState.DONE,\n    );\n\n    return EMPTY;\n  }\n\n  private handleFailedCommand(command: Command, error: any) {\n    const event: CommandEvent = {\n      type: CommandEventType.FAIL,\n      timestamp: new Date(),\n      command: command,\n    };\n\n    if (!command.events) command.events = [];\n    command.events.push(event);\n\n    const currentErrors = this.commandsInErrorSubject.value;\n    this.commandsInErrorSubject.next([...currentErrors, command]);\n\n    // Check if we should mark as dead\n    this.trashDeadCommands();\n\n    return EMPTY;\n  }\n  stop() {\n    this.stateSubject.complete();\n  }\n\n  addCommand(command: Command) {\n    const currentCommands = this.commandsSubject.value;\n    this.commandsSubject.next([...currentCommands, command]);\n\n    // Start processing if this is the first command\n    if (\n      currentCommands.length === 0 &&\n      this.stateSubject.value === CommanderState.IDLE\n    ) {\n      this.executeNextCommand();\n    }\n  }\n\n  replayCommandsInError() {\n    const commandsInError = this.commandsInErrorSubject.value;\n    this.commandsInErrorSubject.next([]);\n\n    if (commandsInError.length > 0) {\n      this.commandsSubject.next(commandsInError);\n\n      // Only start execution if not already executing\n      if (this.stateSubject.value === CommanderState.IDLE) {\n        this.executeNextCommand();\n      }\n    }\n  }\n\n  private trashDeadCommands() {\n    const inError = this.commandsInErrorSubject.value;\n\n    // Check for commands that have exceeded max retries\n    const deadCommands: Command[] = [];\n    const remainingCommands: Command[] = [];\n\n    inError.forEach((command) => {\n      const events = command.events;\n\n      // Count failure events (excluding restarts if they exist)\n      const failCount =\n        events?.filter((e) => e.type === CommandEventType.FAIL).length || 0;\n\n      if (events && failCount > this.configuration.error.maxNumberOfRetries) {\n        // Mark as dead\n        const event: CommandEvent = {\n          type: CommandEventType.DEAD,\n          timestamp: new Date(),\n          command: command,\n        };\n\n        if (!command.events) command.events = [];\n        command.events.push(event);\n\n        deadCommands.push(command);\n      } else {\n        remainingCommands.push(command);\n      }\n    });\n\n    if (deadCommands.length > 0) {\n      this.commandsDeadSubject.next([\n        ...this.commandsDeadSubject.value,\n        ...deadCommands,\n      ]);\n    }\n\n    if (remainingCommands.length !== inError.length) {\n      this.commandsInErrorSubject.next(remainingCommands);\n    }\n  }\n\n  flushDeadCommands() {\n    this.commandsDeadSubject.next([]);\n  }\n\n  getCommands(type: CommandsType): Command[] {\n    switch (type) {\n      case CommandsType.WAITING:\n        return this.commandsSubject.value;\n      case CommandsType.DONE:\n        return this.commandsDoneSubject.value;\n      case CommandsType.ERROR:\n        return this.commandsInErrorSubject.value;\n      case CommandsType.DEAD:\n        return this.commandsDeadSubject.value;\n    }\n  }\n\n  getState(): CommanderState {\n    return this.stateSubject.value;\n  }\n\n  private executeNextCommand() {\n    const currentCommands = this.commandsSubject.value;\n\n    if (currentCommands.length > 0) {\n      const [command, ...rest] = currentCommands;\n      this.commandsSubject.next(rest);\n\n      // Update state to EXECUTING\n      if (this.stateSubject.value !== CommanderState.EXECUTING) {\n        this.stateSubject.next(CommanderState.EXECUTING);\n      }\n\n      // Process the command\n      this.processingCommand.next({ command, result: null });\n    } else {\n      // No more commands, set to IDLE\n      this.stateSubject.next(CommanderState.IDLE);\n    }\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}