{"version":3,"file":"mocha-multiple-sessions.mjs","sources":["../../../src/impl/core/TestSession.ts","../../../src/impl/core/SessionManager.ts","../../../src/impl/core/SessionExecutor.ts","../../../src/impl/core/SessionRepository.ts","../../../src/impl/test-environment/BrowserTestEnvironment.ts","../../../src/impl/events/EventBus.ts","../../../src/impl/utils/ScriptLoader.ts","../../../src/impl/use-cases/CreateSessionUseCase.ts","../../../src/impl/use-cases/RunSessionUseCase.ts","../../../src/impl/use-cases/RunAllSessionsUseCase.ts","../../../src/impl/di/Container.ts","../../../src/impl/api/PublicAPI.ts","../../../src/index.ts"],"sourcesContent":["import { ITestSession, TestSessionOptions } from '../../interfaces/core/ITestSession';\r\n\r\nexport class TestSession implements ITestSession {\r\n  private _completed = false;\r\n  private _error?: Error;\r\n\r\n  constructor(\r\n    public readonly id: string,\r\n    public readonly label: string,\r\n    public readonly options: TestSessionOptions\r\n  ) {}\r\n\r\n  get completed(): boolean {\r\n    return this._completed;\r\n  }\r\n\r\n  get error(): Error | undefined {\r\n    return this._error;\r\n  }\r\n\r\n  markCompleted(): void {\r\n    this._completed = true;\r\n  }\r\n\r\n  setError(error: Error): void {\r\n    this._error = error;\r\n  }\r\n\r\n  static createId(label: string): string {\r\n    return `session_${label.toLowerCase().replace(/\\s+/g, '_')}_${Date.now()}`;\r\n  }\r\n\r\n  static getDefaultOptions(): TestSessionOptions {\r\n    return {\r\n      timeout: 5000,\r\n      retries: 0,\r\n      metadata: {}\r\n    };\r\n  }\r\n}\r\n","import { ISessionManager, SessionSetupFunction } from '../../interfaces/core/ISessionManager';\r\nimport { ITestSession, TestSessionOptions } from '../../interfaces/core/ITestSession';\r\nimport { ISessionRepository } from '../../interfaces/core/ISessionRepository';\r\nimport { IEventBus } from '../../interfaces/events/IEventBus';\r\nimport { TestSession } from './TestSession';\r\n\r\nexport class SessionManager implements ISessionManager {\r\n  constructor(\r\n    private repository: ISessionRepository,\r\n    private eventBus: IEventBus\r\n  ) {}\r\n\r\n  async createSession(\r\n    label: string, \r\n    setupFn: SessionSetupFunction, \r\n    options?: Partial<TestSessionOptions>\r\n  ): Promise<ITestSession> {\r\n    if (!label || typeof label !== 'string') {\r\n      throw new Error('Session label must be a non-empty string');\r\n    }\r\n    \r\n    if (this.exists(label)) {\r\n      throw new Error(`Session with label '${label}' already exists`);\r\n    }\r\n\r\n    const sessionId = TestSession.createId(label);\r\n    const mergedOptions = { ...TestSession.getDefaultOptions(), ...options };\r\n    const session = new TestSession(sessionId, label, mergedOptions);\r\n\r\n    // Store setup function for later execution\r\n    (session as any).setupFn = setupFn;\r\n\r\n    try {\r\n      // Execute setup function\r\n      const result = setupFn();\r\n      if (result instanceof Promise) {\r\n        await result;\r\n      }\r\n      \r\n      this.repository.save(session);\r\n      \r\n      this.eventBus.emit({\r\n        type: 'session:created',\r\n        sessionLabel: label,\r\n        timestamp: new Date().toISOString(),\r\n        data: { sessionId, label, options: mergedOptions }\r\n      });\r\n\r\n      return session;\r\n    } catch (error) {\r\n      session.setError(error as Error);\r\n      \r\n      this.eventBus.emit({\r\n        type: 'session:creation-failed',\r\n        sessionLabel: label,\r\n        timestamp: new Date().toISOString(),\r\n        data: { sessionId, label, error: (error as Error).message }\r\n      });\r\n      \r\n      throw error;\r\n    }\r\n  }\r\n\r\n  getSession(label: string): ITestSession | null {\r\n    return this.repository.findByLabel(label);\r\n  }\r\n\r\n  getAllSessions(): ITestSession[] {\r\n    return this.repository.findAll();\r\n  }\r\n\r\n  deleteSession(label: string): boolean {\r\n    const session = this.getSession(label);\r\n    if (session) {\r\n      const deleted = this.repository.delete(session.id);\r\n      if (deleted) {\r\n        this.eventBus.emit({\r\n          type: 'session:deleted',\r\n          sessionLabel: label,\r\n          timestamp: new Date().toISOString(),\r\n          data: { sessionId: session.id, label }\r\n        });\r\n      }\r\n      return deleted;\r\n    }\r\n    return false;\r\n  }\r\n\r\n  exists(label: string): boolean {\r\n    return this.repository.findByLabel(label) !== null;\r\n  }\r\n\r\n  clear(): void {\r\n    this.repository.clear();\r\n  }\r\n}\r\n","import { ISessionExecutor, ISessionExecutionResult } from '../../interfaces/core/ISessionExecutor';\r\nimport { ITestSession } from '../../interfaces/core/ITestSession';\r\nimport { ITestEnvironment } from '../../interfaces/test-environment/ITestEnvironment';\r\nimport { IEventBus } from '../../interfaces/events/IEventBus';\r\n\r\nexport class SessionExecutor implements ISessionExecutor {\r\n  constructor(\r\n    private testEnvironment: ITestEnvironment,\r\n    private eventBus: IEventBus\r\n  ) {}\r\n\r\n  async execute(session: ITestSession): Promise<ISessionExecutionResult> {\r\n    if (!this.canExecute(session)) {\r\n      throw new Error(`Cannot execute session '${session.label}': ${session.error?.message || 'Unknown error'}`);\r\n    }\r\n\r\n    const startTime = Date.now();\r\n    \r\n    this.eventBus.emit({\r\n      type: 'session:execution-started',\r\n      sessionLabel: session.label,\r\n      timestamp: new Date().toISOString(),\r\n      data: { sessionId: session.id, sessionLabel: session.label }\r\n    });\r\n\r\n    try {\r\n      const mochaInstance = this.testEnvironment.createMochaInstance(session.label);\r\n      this.testEnvironment.injectGlobals(mochaInstance);\r\n\r\n      // Re-run setup if needed\r\n      const setupFn = (session as any).setupFn;\r\n      if (!session.completed && setupFn) {\r\n        const result = setupFn();\r\n        if (result instanceof Promise) {\r\n          await result;\r\n        }\r\n      }\r\n\r\n      const testResult = await this.runTests(mochaInstance);\r\n      const duration = Date.now() - startTime;\r\n\r\n      session.markCompleted();\r\n\r\n      const result: ISessionExecutionResult = {\r\n        sessionId: session.id,\r\n        sessionLabel: session.label,\r\n        stats: testResult.stats,\r\n        success: testResult.success,\r\n        error: testResult.error,\r\n        duration\r\n      };\r\n\r\n      this.eventBus.emit({\r\n        type: 'session:execution-completed',\r\n        sessionLabel: session.label,\r\n        timestamp: new Date().toISOString(),\r\n        data: result\r\n      });\r\n\r\n      return result;\r\n\r\n    } catch (error) {\r\n      const duration = Date.now() - startTime;\r\n      session.setError(error as Error);\r\n\r\n      const result: ISessionExecutionResult = {\r\n        sessionId: session.id,\r\n        sessionLabel: session.label,\r\n        stats: { tests: 0, passes: 0, pending: 0, failures: 1 },\r\n        success: false,\r\n        error: error as Error,\r\n        duration\r\n      };\r\n\r\n      this.eventBus.emit({\r\n        type: 'session:failed',\r\n        sessionLabel: session.label,\r\n        timestamp: new Date().toISOString(),\r\n        data: { sessionId: session.id, error: (error as Error).message }\r\n      });\r\n\r\n      throw error;\r\n    }\r\n  }\r\n\r\n  canExecute(session: ITestSession): boolean {\r\n    return !session.error;\r\n  }\r\n\r\n  private async runTests(mochaInstance: any): Promise<{ stats: any; success: boolean; error?: Error }> {\r\n    return new Promise((resolve) => {\r\n      const runner = mochaInstance.run();\r\n      \r\n      let failures = 0;\r\n      let passes = 0;\r\n      let tests = 0;\r\n      \r\n      runner.on('pass', () => {\r\n        passes++;\r\n        tests++;\r\n      });\r\n      \r\n      runner.on('fail', () => {\r\n        failures++;\r\n        tests++;\r\n      });\r\n      \r\n      runner.on('end', () => {\r\n        const stats = mochaInstance.stats || { passes, failures, tests, pending: 0 };\r\n        resolve({\r\n          stats,\r\n          success: failures === 0\r\n        });\r\n      });\r\n    });\r\n  }\r\n}\r\n","import { ISessionRepository } from '../../interfaces/core/ISessionRepository';\r\nimport { ITestSession } from '../../interfaces/core/ITestSession';\r\n\r\nexport class InMemorySessionRepository implements ISessionRepository {\r\n  private sessions = new Map<string, ITestSession>();\r\n\r\n  save(session: ITestSession): void {\r\n    this.sessions.set(session.id, session);\r\n  }\r\n\r\n  findByLabel(label: string): ITestSession | null {\r\n    for (const session of this.sessions.values()) {\r\n      if (session.label === label) {\r\n        return session;\r\n      }\r\n    }\r\n    return null;\r\n  }\r\n\r\n  findById(id: string): ITestSession | null {\r\n    return this.sessions.get(id) || null;\r\n  }\r\n\r\n  findAll(): ITestSession[] {\r\n    return Array.from(this.sessions.values());\r\n  }\r\n\r\n  exists(id: string): boolean {\r\n    return this.sessions.has(id);\r\n  }\r\n\r\n  delete(id: string): boolean {\r\n    return this.sessions.delete(id);\r\n  }\r\n\r\n  clear(): void {\r\n    this.sessions.clear();\r\n  }\r\n}\r\n","import { IBrowserTestEnvironment, BrowserTestEnvironmentConfig } from '../../interfaces/test-environment/IBrowserTestEnvironment';\r\nimport { IMochaInstance } from '../../interfaces/test-environment/IMochaInstance';\r\nimport '../../interfaces/browser'; // Import global declarations\r\n\r\nexport class BrowserTestEnvironment implements IBrowserTestEnvironment {\r\n  private config: BrowserTestEnvironmentConfig;\r\n\r\n  constructor(config: BrowserTestEnvironmentConfig = {}) {\r\n    this.config = {\r\n      defaultReporter: 'html',\r\n      enableDetailedReporter: false,\r\n      ...config\r\n    };\r\n  }\r\n\r\n  createMochaInstance(sessionLabel: string): IMochaInstance {\r\n    const resultKey = `results_${sessionLabel.replace(/\\s+/g, '_')}`;\r\n    \r\n    const detailedReporterAvailable = this.config.enableDetailedReporter && \r\n      window.MochaDetailedReporter?.DetailedJsonReporter !== undefined;\r\n    \r\n    return new window.Mocha({\r\n      ui: 'bdd',\r\n      reporter: detailedReporterAvailable ? \r\n        window.MochaDetailedReporter!.DetailedJsonReporter : \r\n        window.Mocha.reporters.HTML,\r\n      reporterOptions: {\r\n        outputToWindow: 'true',\r\n        windowVariableName: resultKey\r\n      },\r\n      ...this.config.mochaOptions\r\n    });\r\n  }\r\n\r\n  injectGlobals(mochaInstance: IMochaInstance): void {\r\n    mochaInstance.suite.emit('pre-require', window, null, mochaInstance);\r\n    \r\n    if (window.chai) {\r\n      window.expect = window.chai.expect;\r\n    }\r\n  }\r\n\r\n  setupDOM?(): void {\r\n    if (this.config.globalSetup) {\r\n      const setupResult = this.config.globalSetup();\r\n      if (setupResult instanceof Promise) {\r\n        setupResult.catch(console.error);\r\n      }\r\n    }\r\n  }\r\n\r\n  cleanupDOM?(): void {\r\n    // Default cleanup implementation\r\n    const containers = document.querySelectorAll('[data-session-container]');\r\n    containers.forEach(container => container.remove());\r\n  }\r\n\r\n  validateEnvironment(): boolean {\r\n    return !!(window.Mocha && window.chai);\r\n  }\r\n}\r\n","import { IEventBus } from '../../interfaces/events/IEventBus';\r\nimport { SessionEvent, SessionEventType } from '../../interfaces/events/SessionEventTypes';\r\n\r\nexport class EventBus implements IEventBus {\r\n  private listeners = new Map<SessionEventType | string, Set<(event: SessionEvent) => void>>();\r\n  private anyListeners = new Set<(event: SessionEvent) => void>();\r\n\r\n  emit(event: SessionEvent): void {\r\n    // Emit to specific listeners\r\n    const typeListeners = this.listeners.get(event.type);\r\n    if (typeListeners) {\r\n      typeListeners.forEach(callback => {\r\n        try {\r\n          callback(event);\r\n        } catch (error) {\r\n          console.error('Error in event listener:', error);\r\n        }\r\n      });\r\n    }\r\n\r\n    // Emit to any listeners\r\n    this.anyListeners.forEach(callback => {\r\n      try {\r\n        callback(event);\r\n      } catch (error) {\r\n        console.error('Error in any event listener:', error);\r\n      }\r\n    });\r\n  }\r\n\r\n  on(eventType: SessionEventType | string, callback: (event: SessionEvent) => void): void {\r\n    if (!this.listeners.has(eventType)) {\r\n      this.listeners.set(eventType, new Set());\r\n    }\r\n    this.listeners.get(eventType)!.add(callback);\r\n  }\r\n\r\n  off(eventType: SessionEventType | string, callback: (event: SessionEvent) => void): void {\r\n    const typeListeners = this.listeners.get(eventType);\r\n    if (typeListeners) {\r\n      typeListeners.delete(callback);\r\n    }\r\n  }\r\n\r\n  onAny(callback: (event: SessionEvent) => void): void {\r\n    this.anyListeners.add(callback);\r\n  }\r\n\r\n  offAny?(callback: (event: SessionEvent) => void): void {\r\n    this.anyListeners.delete(callback);\r\n  }\r\n}\r\n","import { IScriptLoader, ScriptLoaderOptions } from '../../interfaces/utils/IScriptLoader';\r\n\r\nexport class ScriptLoader implements IScriptLoader {\r\n  private static defaultOptions: Required<ScriptLoaderOptions> = {\r\n    cacheBusting: true,\r\n    timeout: 30000\r\n  };\r\n\r\n  async loadScript(scriptPath: string, options: ScriptLoaderOptions = {}): Promise<string> {\r\n    const opts = { ...ScriptLoader.defaultOptions, ...options };\r\n    \r\n    return new Promise((resolve, reject) => {\r\n      const script = document.createElement('script');\r\n      \r\n      let src = scriptPath;\r\n      if (opts.cacheBusting) {\r\n        src += (scriptPath.includes('?') ? '&' : '?') + 'v=' + Date.now();\r\n      }\r\n      \r\n      script.src = src;\r\n      \r\n      // Use ReturnType<typeof setTimeout> to handle both browser and Node.js environments\r\n      let timeoutId: ReturnType<typeof setTimeout> | undefined;\r\n      \r\n      const cleanup = () => {\r\n        if (timeoutId !== undefined) {\r\n          clearTimeout(timeoutId);\r\n        }\r\n        script.remove();\r\n      };\r\n      \r\n      script.onload = () => {\r\n        cleanup();\r\n        resolve(scriptPath);\r\n      };\r\n      \r\n      script.onerror = () => {\r\n        cleanup();\r\n        reject(new Error(`Failed to load script: ${scriptPath}`));\r\n      };\r\n      \r\n      // Set timeout after handlers are defined\r\n      timeoutId = setTimeout(() => {\r\n        cleanup();\r\n        reject(new Error(`Script loading timeout: ${scriptPath}`));\r\n      }, opts.timeout);\r\n      \r\n      document.body.appendChild(script);\r\n    });\r\n  }\r\n\r\n  async loadScripts(scriptPaths: string[], options: ScriptLoaderOptions = {}): Promise<string[]> {\r\n    const results: string[] = [];\r\n    for (const path of scriptPaths) {\r\n      const result = await this.loadScript(path, options);\r\n      results.push(result);\r\n    }\r\n    return results;\r\n  }\r\n}\r\n","import { ICreateSessionUseCase } from '../../interfaces/use-cases/ICreateSessionUseCase';\r\nimport { ISessionManager, SessionSetupFunction } from '../../interfaces/core/ISessionManager';\r\nimport { TestSessionOptions } from '../../interfaces/core/ITestSession';\r\n\r\nexport class CreateSessionUseCase implements ICreateSessionUseCase {\r\n  constructor(private sessionManager: ISessionManager) {}\r\n\r\n  async execute(\r\n    label: string,\r\n    setupFn: SessionSetupFunction,\r\n    options?: Partial<TestSessionOptions>\r\n  ): Promise<string> {\r\n    const session = await this.sessionManager.createSession(label, setupFn, options);\r\n    return session.label;\r\n  }\r\n}\r\n","import { IRunSessionUseCase } from '../../interfaces/use-cases/IRunSessionUseCase';\r\nimport { ISessionManager } from '../../interfaces/core/ISessionManager';\r\nimport { ISessionExecutor, ISessionExecutionResult } from '../../interfaces/core/ISessionExecutor';\r\n\r\nexport class RunSessionUseCase implements IRunSessionUseCase {\r\n  constructor(\r\n    private sessionManager: ISessionManager,\r\n    private sessionExecutor: ISessionExecutor\r\n  ) {}\r\n\r\n  async execute(label: string): Promise<ISessionExecutionResult> {\r\n    const session = this.sessionManager.getSession(label);\r\n    \r\n    if (!session) {\r\n      throw new Error(`Session with label '${label}' not found`);\r\n    }\r\n\r\n    if (session.completed) {\r\n      console.warn(`Session '${session.label}' has already been run.`);\r\n      return {\r\n        sessionId: session.id,\r\n        sessionLabel: session.label,\r\n        stats: { tests: 0, passes: 0, pending: 0, failures: 0 },\r\n        success: true,\r\n        duration: 0\r\n      };\r\n    }\r\n\r\n    return this.sessionExecutor.execute(session);\r\n  }\r\n}\r\n","import { IRunAllSessionsUseCase } from '../../interfaces/use-cases/IRunAllSessionsUseCase';\r\nimport { ISessionManager } from '../../interfaces/core/ISessionManager';\r\nimport { ISessionExecutor } from '../../interfaces/core/ISessionExecutor';\r\nimport { SessionResult, SessionExecutionResult } from '../../interfaces/results/SessionResult';\r\n\r\nexport class RunAllSessionsUseCase implements IRunAllSessionsUseCase {\r\n  constructor(\r\n    private sessionManager: ISessionManager,\r\n    private sessionExecutor: ISessionExecutor\r\n  ) {}\r\n\r\n  async execute(): Promise<SessionResult[]> {\r\n    const sessions = this.sessionManager.getAllSessions();\r\n    const results: SessionResult[] = [];\r\n\r\n    for (const session of sessions) {\r\n      if (!session.completed) {\r\n        try {\r\n          const result = await this.sessionExecutor.execute(session);\r\n          const sessionExecutionResult: SessionExecutionResult = {\r\n            ...result,\r\n            label: result.sessionLabel,\r\n            passes: result.stats.passes,\r\n            failures: result.stats.failures,\r\n            tests: result.stats.tests\r\n          };\r\n          results.push({\r\n            label: session.label,\r\n            result: sessionExecutionResult\r\n          });\r\n        } catch (error) {\r\n          results.push({\r\n            label: session.label,\r\n            result: null,\r\n            error: error instanceof Error ? error.message : String(error)\r\n          });\r\n        }\r\n      }\r\n    }\r\n\r\n    return results;\r\n  }\r\n}\r\n","import { IContainer } from '../../interfaces/di/IContainer';\r\nimport { ISessionManager } from '../../interfaces/core/ISessionManager';\r\nimport { ISessionExecutor } from '../../interfaces/core/ISessionExecutor';\r\nimport { ISessionRepository } from '../../interfaces/core/ISessionRepository';\r\nimport { ITestEnvironment } from '../../interfaces/test-environment/ITestEnvironment';\r\nimport { IEventBus } from '../../interfaces/events/IEventBus';\r\nimport { IScriptLoader } from '../../interfaces/utils/IScriptLoader';\r\nimport { ICreateSessionUseCase } from '../../interfaces/use-cases/ICreateSessionUseCase';\r\nimport { IRunSessionUseCase } from '../../interfaces/use-cases/IRunSessionUseCase';\r\nimport { IRunAllSessionsUseCase } from '../../interfaces/use-cases/IRunAllSessionsUseCase';\r\n\r\nimport { SessionManager } from '../core/SessionManager';\r\nimport { SessionExecutor } from '../core/SessionExecutor';\r\nimport { InMemorySessionRepository } from '../core/SessionRepository';\r\nimport { BrowserTestEnvironment } from '../test-environment/BrowserTestEnvironment';\r\nimport { EventBus } from '../events/EventBus';\r\nimport { ScriptLoader } from '../utils/ScriptLoader';\r\nimport { CreateSessionUseCase } from '../use-cases/CreateSessionUseCase';\r\nimport { RunSessionUseCase } from '../use-cases/RunSessionUseCase';\r\nimport { RunAllSessionsUseCase } from '../use-cases/RunAllSessionsUseCase';\r\n\r\nexport class Container implements IContainer {\r\n  private static instance: Container;\r\n  private _sessionManager: ISessionManager;\r\n  private _sessionExecutor: ISessionExecutor;\r\n  private _sessionRepository: ISessionRepository;\r\n  private _testEnvironment: ITestEnvironment;\r\n  private _eventBus: IEventBus;\r\n  private _scriptLoader: IScriptLoader;\r\n\r\n  private constructor() {\r\n    this._eventBus = new EventBus();\r\n    this._testEnvironment = new BrowserTestEnvironment();\r\n    this._sessionRepository = new InMemorySessionRepository();\r\n    this._sessionManager = new SessionManager(this._sessionRepository, this._eventBus);\r\n    this._sessionExecutor = new SessionExecutor(this._testEnvironment, this._eventBus);\r\n    this._scriptLoader = new ScriptLoader();\r\n  }\r\n\r\n  static getInstance(): Container {\r\n    if (!Container.instance) {\r\n      Container.instance = new Container();\r\n    }\r\n    return Container.instance;\r\n  }\r\n\r\n  get sessionManager(): ISessionManager { return this._sessionManager; }\r\n  get sessionExecutor(): ISessionExecutor { return this._sessionExecutor; }\r\n  get sessionRepository(): ISessionRepository { return this._sessionRepository; }\r\n  get testEnvironment(): ITestEnvironment { return this._testEnvironment; }\r\n  get eventBus(): IEventBus { return this._eventBus; }\r\n  get scriptLoader(): IScriptLoader { return this._scriptLoader; }\r\n\r\n  setTestEnvironment(testEnvironment: Partial<ITestEnvironment>): void {\r\n    const currentEnv = this._testEnvironment;\r\n    this._testEnvironment = {\r\n      createMochaInstance: testEnvironment.createMochaInstance || currentEnv.createMochaInstance,\r\n      injectGlobals: testEnvironment.injectGlobals || currentEnv.injectGlobals\r\n    };\r\n    \r\n    this._sessionExecutor = new SessionExecutor(this._testEnvironment, this._eventBus);\r\n  }\r\n\r\n  createSessionUseCase(): ICreateSessionUseCase {\r\n    return new CreateSessionUseCase(this._sessionManager);\r\n  }\r\n\r\n  runSessionUseCase(): IRunSessionUseCase {\r\n    return new RunSessionUseCase(this._sessionManager, this._sessionExecutor);\r\n  }\r\n\r\n  runAllSessionsUseCase(): IRunAllSessionsUseCase {\r\n    return new RunAllSessionsUseCase(this._sessionManager, this._sessionExecutor);\r\n  }\r\n}\r\n","import { IPublicAPI } from '../../interfaces/api/IPublicAPI';\r\nimport { ITestEnvironment } from '../../interfaces/test-environment/ITestEnvironment';\r\nimport { SessionSetupFunction } from '../../interfaces/core/ISessionManager';\r\nimport { TestSessionOptions, ITestSession } from '../../interfaces/core/ITestSession';\r\nimport { ISessionExecutionResult } from '../../interfaces/core/ISessionExecutor';\r\nimport { SessionResult } from '../../interfaces/results/SessionResult';\r\nimport { IEventEmitter, SessionEventType, SessionEvent } from '../../interfaces/events/IEventBus';\r\nimport { Container } from '../di/Container';\r\n\r\nexport class PublicAPI implements IPublicAPI {\r\n  private container: Container;\r\n\r\n  constructor() {\r\n    this.container = Container.getInstance();\r\n  }\r\n\r\n  setup(config: Partial<ITestEnvironment>): void {\r\n    this.container.setTestEnvironment(config);\r\n  }\r\n\r\n  getEnvironment(): ITestEnvironment {\r\n    return this.container.testEnvironment;\r\n  }\r\n\r\n  async createSession(\r\n    label: string,\r\n    setupFn: SessionSetupFunction,\r\n    options?: Partial<TestSessionOptions>\r\n  ): Promise<string> {\r\n    const useCase = this.container.createSessionUseCase();\r\n    return useCase.execute(label, setupFn, options);\r\n  }\r\n\r\n  async runSession(label: string): Promise<ISessionExecutionResult> {\r\n    const useCase = this.container.runSessionUseCase();\r\n    return useCase.execute(label);\r\n  }\r\n\r\n  async runAllSessions(): Promise<SessionResult[]> {\r\n    const useCase = this.container.runAllSessionsUseCase();\r\n    return useCase.execute();\r\n  }\r\n\r\n  getSession(label: string): ITestSession | null {\r\n    return this.container.sessionRepository.findByLabel(label);\r\n  }\r\n\r\n  getAllSessions(): ITestSession[] {\r\n    return this.container.sessionRepository.findAll();\r\n  }\r\n\r\n  onSessionEvent(eventType: SessionEventType, callback: (event: SessionEvent) => void): void {\r\n    this.container.eventBus.on(eventType, callback);\r\n  }\r\n\r\n  onAnySessionEvent(callback: (event: SessionEvent) => void): void {\r\n    this.container.eventBus.onAny(callback);\r\n  }\r\n\r\n  offSessionEvent(eventType: SessionEventType, callback: (event: SessionEvent) => void): void {\r\n    this.container.eventBus.off(eventType, callback);\r\n  }\r\n\r\n  getEventEmitter(): IEventEmitter {\r\n    return this.container.eventBus;\r\n  }\r\n}\r\n","/**\r\n * Mocha Multiple Sessions Library - Main Entry Point\r\n * Clean architecture implementation with dependency injection and events\r\n */\r\n\r\nimport { PublicAPI } from './impl/api/PublicAPI';\r\nimport { Container } from './impl/di/Container';\r\nimport { ScriptLoader } from './impl/utils/ScriptLoader';\r\n\r\n// Create the public API instance\r\nconst publicAPI = new PublicAPI();\r\n\r\n// ============================================================================\r\n// FUNCTIONAL API (PRIMARY - RECOMMENDED)\r\n// ============================================================================\r\n\r\nexport const testSessionSetup = publicAPI.setup.bind(publicAPI);\r\nexport const getTestEnvironment = publicAPI.getEnvironment.bind(publicAPI);\r\nexport const testSession = publicAPI.createSession.bind(publicAPI);\r\nexport const runSession = publicAPI.runSession.bind(publicAPI);\r\nexport const runAllSessions = publicAPI.runAllSessions.bind(publicAPI);\r\nexport const getSession = publicAPI.getSession.bind(publicAPI);\r\nexport const getAllSessions = publicAPI.getAllSessions.bind(publicAPI);\r\n\r\n// Event API\r\nexport const onSessionEvent = publicAPI.onSessionEvent.bind(publicAPI);\r\nexport const onAnySessionEvent = publicAPI.onAnySessionEvent.bind(publicAPI);\r\nexport const offSessionEvent = publicAPI.offSessionEvent.bind(publicAPI);\r\nexport const getEventEmitter = publicAPI.getEventEmitter.bind(publicAPI);\r\n\r\n// ============================================================================\r\n// OBJECT-ORIENTED API (ADVANCED USAGE)\r\n// ============================================================================\r\n\r\n// Create wrapper classes that use the container\r\nexport class SessionManager {\r\n  private container: Container;\r\n\r\n  constructor(options: any = {}) {\r\n    this.container = Container.getInstance();\r\n  }\r\n\r\n  async createSession(label: string, setupFn: any, options?: any) {\r\n    return publicAPI.createSession(label, setupFn, options);\r\n  }\r\n\r\n  async createSessions(configs: Array<{label: string; setupFn: any; options?: any}>) {\r\n    const results = [];\r\n    for (const config of configs) {\r\n      await this.createSession(config.label, config.setupFn, config.options);\r\n      results.push(new ManagedSession(config.label));\r\n    }\r\n    return results;\r\n  }\r\n\r\n  getSession(label: string) {\r\n    const session = publicAPI.getSession(label);\r\n    return session ? new ManagedSession(label) : null;\r\n  }\r\n\r\n  getAllSessions() {\r\n    return publicAPI.getAllSessions().map(s => new ManagedSession(s.label));\r\n  }\r\n\r\n  async runAll(options: { parallel?: boolean } = {}) {\r\n    return publicAPI.runAllSessions();\r\n  }\r\n\r\n  getStats() {\r\n    const sessions = publicAPI.getAllSessions();\r\n    return {\r\n      total: sessions.length,\r\n      completed: sessions.filter(s => s.completed).length,\r\n      pending: sessions.filter(s => !s.completed).length,\r\n      failed: sessions.filter(s => s.error).length\r\n    };\r\n  }\r\n}\r\n\r\nexport class ManagedSession {\r\n  constructor(public readonly label: string) {}\r\n\r\n  get exists() {\r\n    return publicAPI.getSession(this.label) !== null;\r\n  }\r\n\r\n  get completed() {\r\n    const session = publicAPI.getSession(this.label);\r\n    return session?.completed ?? false;\r\n  }\r\n\r\n  get failed() {\r\n    const session = publicAPI.getSession(this.label);\r\n    return !!session?.error;\r\n  }\r\n\r\n  get error() {\r\n    const session = publicAPI.getSession(this.label);\r\n    return session?.error;\r\n  }\r\n\r\n  get id() {\r\n    const session = publicAPI.getSession(this.label);\r\n    return session?.id;\r\n  }\r\n\r\n  get options() {\r\n    const session = publicAPI.getSession(this.label);\r\n    return session?.options;\r\n  }\r\n\r\n  async run(options: any = {}) {\r\n    const result = await publicAPI.runSession(this.label);\r\n    return {\r\n      ...result,\r\n      label: this.label,\r\n      passes: result.stats.passes,\r\n      failures: result.stats.failures,\r\n      tests: result.stats.tests\r\n    };\r\n  }\r\n\r\n  async runWithTimeout(timeoutMs: number) {\r\n    return new Promise((resolve, reject) => {\r\n      const timeoutId = setTimeout(() => {\r\n        reject(new Error(`Session '${this.label}' execution timeout after ${timeoutMs}ms`));\r\n      }, timeoutMs);\r\n\r\n      this.run().then(\r\n        (result) => {\r\n          clearTimeout(timeoutId);\r\n          resolve(result);\r\n        },\r\n        (error) => {\r\n          clearTimeout(timeoutId);\r\n          reject(error);\r\n        }\r\n      );\r\n    });\r\n  }\r\n\r\n  onEvent(eventType: string, callback: any) {\r\n    publicAPI.onSessionEvent(eventType as any, callback);\r\n    return () => publicAPI.offSessionEvent(eventType as any, callback);\r\n  }\r\n\r\n  onAnyEvent(callback: any) {\r\n    publicAPI.onAnySessionEvent(callback);\r\n    return () => {}; // Simplified implementation\r\n  }\r\n}\r\n\r\nexport class SessionBuilder {\r\n  private label: string = '';\r\n  private setupFunctions: Array<() => Promise<void> | void> = [];\r\n  private sessionOptions: any = {};\r\n  private scripts: string[] = [];\r\n  private testSuites: Array<() => void> = [];\r\n  private scriptLoader = new ScriptLoader();\r\n\r\n  constructor(private sessionManager: SessionManager) {}\r\n\r\n  withLabel(label: string) {\r\n    this.label = label;\r\n    return this;\r\n  }\r\n\r\n  withOptions(options: any) {\r\n    this.sessionOptions = { ...this.sessionOptions, ...options };\r\n    return this;\r\n  }\r\n\r\n  withTimeout(timeoutMs: number) {\r\n    this.sessionOptions.timeout = timeoutMs;\r\n    return this;\r\n  }\r\n\r\n  withRetries(retries: number) {\r\n    this.sessionOptions.retries = retries;\r\n    return this;\r\n  }\r\n\r\n  withMetadata(key: string, value: any) {\r\n    if (!this.sessionOptions.metadata) {\r\n      this.sessionOptions.metadata = {};\r\n    }\r\n    this.sessionOptions.metadata[key] = value;\r\n    return this;\r\n  }\r\n\r\n  loadScript(scriptPath: string) {\r\n    this.scripts.push(scriptPath);\r\n    return this;\r\n  }\r\n\r\n  loadScripts(scriptPaths: string[]) {\r\n    this.scripts.push(...scriptPaths);\r\n    return this;\r\n  }\r\n\r\n  addTestSuite(suiteFn: () => void) {\r\n    this.testSuites.push(suiteFn);\r\n    return this;\r\n  }\r\n\r\n  addAsyncSetup(setupFn: () => Promise<void>) {\r\n    this.setupFunctions.push(setupFn);\r\n    return this;\r\n  }\r\n\r\n  addSetup(setupFn: () => void) {\r\n    this.setupFunctions.push(setupFn);\r\n    return this;\r\n  }\r\n\r\n  describe(description: string, testFn: () => void) {\r\n    this.testSuites.push(() => {\r\n      (window as any).describe(description, testFn);\r\n    });\r\n    return this;\r\n  }\r\n\r\n  it(description: string, testFn: () => void) {\r\n    this.testSuites.push(() => {\r\n      (window as any).it(description, testFn);\r\n    });\r\n    return this;\r\n  }\r\n\r\n  async build(): Promise<ManagedSession> {\r\n    if (!this.label) {\r\n      throw new Error('Session label is required');\r\n    }\r\n\r\n    const setupFn = async () => {\r\n      // Load scripts first\r\n      for (const scriptPath of this.scripts) {\r\n        await this.scriptLoader.loadScript(scriptPath);\r\n      }\r\n\r\n      // Run setup functions\r\n      for (const setup of this.setupFunctions) {\r\n        await setup();\r\n      }\r\n\r\n      // Define test suites\r\n      for (const suite of this.testSuites) {\r\n        suite();\r\n      }\r\n    };\r\n\r\n    await this.sessionManager.createSession(this.label, setupFn, this.sessionOptions);\r\n    return new ManagedSession(this.label);\r\n  }\r\n\r\n  async buildAndRun(): Promise<any> {\r\n    const session = await this.build();\r\n    return await session.run();\r\n  }\r\n}\r\n\r\n// ============================================================================\r\n// LEGACY API (DEPRECATED)\r\n// ============================================================================\r\n\r\nexport class LegacyAPI {\r\n  private scriptLoader = new ScriptLoader();\r\n\r\n  async runSession(\r\n    label: string,\r\n    resultKey: string,\r\n    testFiles: string[],\r\n    reportContainerId: string | null = null,\r\n    options: any = {}\r\n  ) {\r\n    const sessionLabel = `legacy_${label}_${Date.now()}`;\r\n    \r\n    await publicAPI.createSession(sessionLabel, async () => {\r\n      for (const file of testFiles) {\r\n        await this.scriptLoader.loadScript(file);\r\n      }\r\n    }, {\r\n      containerId: reportContainerId || 'mocha-report',\r\n      ...options\r\n    });\r\n    \r\n    return publicAPI.runSession(sessionLabel);\r\n  }\r\n\r\n  async runMultipleSessions(\r\n    sessions: Array<{label: string; resultKey: string; testFiles: string[]}>,\r\n    containerId: string,\r\n    options: any = {}\r\n  ) {\r\n    for (const session of sessions) {\r\n      const sessionLabel = `legacy_${session.label}_${Date.now()}`;\r\n      \r\n      await publicAPI.createSession(sessionLabel, async () => {\r\n        for (const file of session.testFiles) {\r\n          await this.scriptLoader.loadScript(file);\r\n        }\r\n      }, {\r\n        containerId,\r\n        ...options\r\n      });\r\n    }\r\n    \r\n    return publicAPI.runAllSessions();\r\n  }\r\n}\r\n\r\n// For backward compatibility, export legacy functions directly\r\nconst legacyAPI = new LegacyAPI();\r\nexport const legacyRunSession = legacyAPI.runSession.bind(legacyAPI);\r\nexport const legacyRunMultipleSessions = legacyAPI.runMultipleSessions.bind(legacyAPI);\r\n\r\n// ============================================================================\r\n// UTILITY EXPORTS\r\n// ============================================================================\r\n\r\nexport { ScriptLoader };\r\n\r\n// Convenience exports for utilities\r\nconst scriptLoader = new ScriptLoader();\r\nexport const loadScript = scriptLoader.loadScript.bind(scriptLoader);\r\nexport const loadScripts = scriptLoader.loadScripts.bind(scriptLoader);\r\n\r\n// ============================================================================\r\n// TYPE EXPORTS\r\n// ============================================================================\r\n\r\n// Core types\r\nexport type { \r\n  ITestSession, \r\n  TestSessionOptions, \r\n  TestSessionStats \r\n} from './interfaces/core/ITestSession';\r\n\r\nexport type { \r\n  SessionSetupFunction \r\n} from './interfaces/core/ISessionManager';\r\n\r\nexport type { \r\n  ISessionExecutionResult \r\n} from './interfaces/core/ISessionExecutor';\r\n\r\n// Result types\r\nexport type { \r\n  SessionResult, \r\n  SessionExecutionResult \r\n} from './interfaces/results/SessionResult';\r\n\r\n// Event types\r\nexport type { \r\n  SessionEventType, \r\n  SessionEvent \r\n} from './interfaces/events/SessionEventTypes';\r\n\r\nexport type { \r\n  IEventEmitter \r\n} from './interfaces/events/IEventBus';\r\n\r\n// API types\r\nexport type { \r\n  SessionManagerOptions,\r\n  SessionConfig,\r\n  BatchExecutionOptions,\r\n  SessionManagerStats\r\n} from './interfaces/api/ISessionManagerAPI';\r\n\r\nexport type { \r\n  SessionExecutionOptions \r\n} from './interfaces/api/IManagedSession';\r\n\r\n// Test environment types\r\nexport type { \r\n  ITestEnvironment \r\n} from './interfaces/test-environment/ITestEnvironment';\r\n\r\nexport type { \r\n  IMochaInstance \r\n} from './interfaces/test-environment/IMochaInstance';\r\n\r\n// Utility types\r\nexport type { \r\n  ScriptLoaderOptions \r\n} from './interfaces/utils/IScriptLoader';\r\n\r\n// ============================================================================\r\n// DEFAULT EXPORT (BACKWARD COMPATIBILITY)\r\n// ============================================================================\r\n\r\nconst MochaMultipleSessions = {\r\n  // Functional API\r\n  testSessionSetup,\r\n  getTestEnvironment,\r\n  testSession,\r\n  runSession,\r\n  runAllSessions,\r\n  getSession,\r\n  getAllSessions,\r\n  \r\n  // Event API\r\n  onSessionEvent,\r\n  onAnySessionEvent,\r\n  offSessionEvent,\r\n  getEventEmitter,\r\n  \r\n  // Utilities\r\n  loadScript,\r\n  loadScripts,\r\n  \r\n  // Legacy API\r\n  legacyRunSession,\r\n  legacyRunMultipleSessions\r\n};\r\n\r\nexport default MochaMultipleSessions;\r\n"],"names":["SessionManager"],"mappings":"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"}