{"version":3,"file":"worker-thread.cjs","sources":["../../../src/run-assertions/worker-thread.js"],"sourcesContent":["import { parentPort, workerData } from 'worker_threads';\nimport * as colors from 'colors/safe.js';\nimport { Writable } from 'stream';\nconst { testFile, env, options } = workerData;\n\n// Set environment variables\nif (env) {\n  Object.assign(process.env, env);\n}\n\n// Enhanced large file handling with optimizations\nconst isLargeFile = process.env.FAUJI_IS_LARGE_FILE === 'true';\nconst fileSize = parseInt(process.env.FAUJI_FILE_SIZE || '0', 10);\n\nif (isLargeFile) {\n  console.log(colors.blue(`🔧 Applying optimizations for large file (${Math.round(fileSize / 1024)}KB)`));\n  \n  // Enhanced memory management\n  if (global.gc) {\n    global.gc();\n  }\n  \n  // Adaptive timeout based on file size\n  const baseTimeout = 30000; // 30 seconds\n  const sizeMultiplier = Math.max(1, fileSize / (50 * 1024)); // Scale with size\n  const adaptiveTimeout = Math.min(baseTimeout * sizeMultiplier, 120000); // Max 2 minutes\n  \n  const timeout = setTimeout(() => {\n    console.error(colors.red(`⏰ Large file execution timeout after ${adaptiveTimeout/1000}s`));\n    console.error(colors.yellow('💡 Consider splitting the file or increasing timeout'));\n    process.exit(1);\n  }, adaptiveTimeout);\n  \n  process.on('exit', () => clearTimeout(timeout));\n  \n  // Enhanced error recovery\n  process.on('uncaughtException', (err) => {\n    if (err.message.includes('Bad Request') || err.message.includes('memory')) {\n      console.error(colors.red(`💥 Large file execution error: ${err.message}`));\n      console.error(colors.yellow('💡 This might be due to file complexity. Consider:'));\n      console.error(colors.yellow('   1. Splitting the test file into smaller files'));\n      console.error(colors.yellow('   2. Reducing the number of test cases per file'));\n      console.error(colors.yellow('   3. Using --optimization-strategy=memory for enhanced memory management'));\n    }\n    process.exit(1);\n  });\n}\n\n// BufferStream to capture output\nclass BufferStream extends Writable {\n  constructor() {\n    super();\n    this.chunks = [];\n  }\n  _write(chunk, encoding, callback) {\n    this.chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk, encoding));\n    callback();\n  }\n  toString() {\n    return Buffer.concat(this.chunks).toString('utf8');\n  }\n}\n\nlet capturedStdout = '';\nlet capturedStderr = '';\nconst bufferStdout = new BufferStream();\nconst bufferStderr = new BufferStream();\n\nconst origStdoutWrite = process.stdout.write.bind(process.stdout);\nconst origStderrWrite = process.stderr.write.bind(process.stderr);\n\n// Redirect process.stdout/stderr to buffer only (no terminal output)\nprocess.stdout.write = bufferStdout.write.bind(bufferStdout);\nprocess.stderr.write = bufferStderr.write.bind(bufferStderr);\n\n// Ensure proper flushing\nprocess.stdout.on('drain', () => {});\nprocess.stderr.on('drain', () => {});\n\nlet error = null;\nlet testResults = null;\n\n(async () => {\n  const startTime = Date.now();\n  try {\n    // Setup JSDOM environment if needed (before setting up globals)\n    if (options && options.env === 'jsdom') {\n      const { setupJsdomIfNeeded } = await import(new URL('./env-setup.js', import.meta.url));\n      setupJsdomIfNeeded(options);\n    }\n    \n    // Import setup-globals to initialize the test environment\n    const setupGlobals = (await import(new URL('./setup-globals.js', import.meta.url))).default;\n    setupGlobals();\n    \n    // Import spy module and spy matchers properly to ensure all functions are available\n    try {\n      const spyModule = await import(new URL('../matchers/spy.js', import.meta.url));\n      const spyMatchers = await import(new URL('../matchers/spyMatchers.js', import.meta.url));\n      \n      if (spyModule.createSpy && !global.createSpy) {\n        global.createSpy = spyModule.createSpy;\n      }\n      if (spyModule.fn && !global.fn) {\n        global.fn = spyModule.fn;\n      }\n      if (spyModule.spyOn && !global.spyOn) {\n        global.spyOn = spyModule.spyOn;\n      }\n      if (spyModule.mock && !global.mock) {\n        global.mock = spyModule.mock;\n      }\n      if (spyModule.unmock && !global.unmock) {\n        global.unmock = spyModule.unmock;\n      }\n      if (spyModule.resetAllMocks && !global.resetAllMocks) {\n        global.resetAllMocks = spyModule.resetAllMocks;\n      }\n      if (spyModule.requireActual && !global.requireActual) {\n        global.requireActual = spyModule.requireActual;\n      }\n      if (spyModule.requireMock && !global.requireMock) {\n        global.requireMock = spyModule.requireMock;\n      }\n      if (spyModule.createSpy && !global.spy) {\n        global.spy = spyModule.createSpy;\n      }\n      if (spyModule.isMockFunction && !global.isMockFunction) {\n        global.isMockFunction = spyModule.isMockFunction;\n      }\n      if (spyModule.isSpy && !global.isSpy) {\n        global.isSpy = spyModule.isSpy;\n      }\n      if (spyMatchers && !global._spyMatchersAdded) {\n        const { allMatchers } = await import(new URL('../matchers/index.js', import.meta.url));\n        global._spyMatchersAdded = true;\n      }\n    } catch (importError) {\n      console.error('Failed to import spy module:', importError.message);\n    }\n    \n    const { rootSuite, setCurrentSuite } = await import(new URL('./suite.js', import.meta.url));\n    setCurrentSuite(rootSuite);\n    \n    const { Logger } = await import(new URL('../logger/logger-core.js', import.meta.url));\n    const workerLogger = new Logger({ stdout: bufferStdout, stderr: bufferStderr });\n    global._testLogger = workerLogger;\n    \n    await import(new URL(testFile, `file://${process.cwd()}/`).href);\n\n    if (typeof global.run === 'function') {\n      await global.run();\n    }\n    \n    // Get test results from the logger we just set\n    if (!workerLogger.endTime && workerLogger.startTime) {\n      workerLogger.endTimer();\n    }\n    testResults = workerLogger.getResultsJSON();\n    \n    const endTime = Date.now();\n    \n    // Ensure timing information is properly set\n    if (testResults) {\n      testResults.startTime = startTime;\n      testResults.endTime = endTime;\n      testResults.duration = endTime - startTime;\n      \n      if (testResults.tests) {\n        testResults.tests = testResults.tests.map(test => ({\n          ...test,\n          duration: test.duration || (test.endTime && test.startTime ? test.endTime - test.startTime : 0)\n        }));\n      }\n    }\n  } catch (e) {\n    error = e.stack || e.message || String(e);\n    console.error(colors.red('Error in test file execution:'), e);\n  }\n\n  await new Promise(resolve => setImmediate(resolve));\n\n  capturedStdout = bufferStdout.toString();\n  capturedStderr = bufferStderr.toString();\n\n  if (global._testLogger) {\n    delete global._testLogger;\n  }\n  \n  // Send results immediately instead of waiting for process exit\n  parentPort.postMessage({\n    type: 'result',\n    stdout: capturedStdout,\n    stderr: capturedStderr,\n    error,\n    code: error ? 1 : 0,\n    testResults\n  });\n\n})();\n"],"names":["workerData","colors.blue","colors.red","colors.yellow","Writable","parentPort"],"mappings":"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"}