{"record":{"id":"5af7cf0601a5a8db","repo":"GoogleChrome/lighthouse","slug":"csv-output-is-not-support-for-user-flows","errorCode":null,"errorMessage":"CSV output is not support for user flows","messagePattern":"CSV output is not support for user flows","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"report/generator/report-generator.js","lineNumber":178,"sourceCode":"   * @param {LHResult['configSettings']['output']} outputModes\n   * @return {string|string[]}\n   */\n  static generateReport(result, outputModes) {\n    const outputAsArray = Array.isArray(outputModes);\n    if (typeof outputModes === 'string') outputModes = [outputModes];\n\n    const output = outputModes.map(outputMode => {\n      // HTML report.\n      if (outputMode === 'html') {\n        if (ReportGenerator.isFlowResult(result)) {\n          return ReportGenerator.generateFlowReportHtml(result);\n        }\n        return ReportGenerator.generateReportHtml(result);\n      }\n      // CSV report.\n      if (outputMode === 'csv') {\n        if (ReportGenerator.isFlowResult(result)) {\n          throw new Error('CSV output is not support for user flows');\n        }\n        return ReportGenerator.generateReportCSV(result);\n      }\n      // JSON report.\n      if (outputMode === 'json') {\n        return JSON.stringify(result, null, 2);\n      }\n\n      throw new Error('Invalid output mode: ' + outputMode);\n    });\n\n    return outputAsArray ? output : output[0];\n  }\n}\n\nexport {ReportGenerator};\n","sourceCodeStart":160,"sourceCodeEnd":195,"githubUrl":"https://github.com/GoogleChrome/lighthouse/blob/9515cd4e58ebed69f78742d932b501c2cab8ad8f/report/generator/report-generator.js#L160-L195","documentation":"Thrown by ReportGenerator.generateReport when CSV output is requested for a user-flow result (a FlowResult object containing a 'steps' array). Lighthouse's CSV generator (generateReportCSV) only knows how to serialize a single Lighthouse Result (categories/audits), so a multi-step FlowResult has no CSV representation. The error message contains a typo ('support' instead of 'supported') in the shipped source.","triggerScenarios":"Calling ReportGenerator.generateReport(flowResult, 'csv') or generateReport(flowResult, ['csv','html']) where flowResult is an LH.FlowResult (detected by ReportGenerator.isFlowResult via the presence of a 'steps' key).","commonSituations":"Running a Lighthouse user flow (multi-step navigation flow) and attempting to export the result with output mode 'csv'. Programmatic pipelines that pick output mode generically without distinguishing flow vs single-page results.","solutions":["For FlowResult inputs, request 'html' or 'json' output instead of 'csv' — both are supported for flows (html via generateFlowReportHtml).","If CSV per step is required, iterate flowResult.steps and call ReportGenerator.generateReportCSV(step.lhr) for each step's LHR individually.","Add an isFlowResult(result) branch upstream so 'csv' is never passed for flow results."],"exampleFix":"// before\nconst out = ReportGenerator.generateReport(flowResult, 'csv');\n\n// after\nconst out = ReportGenerator.generateReport(flowResult, 'json');\n// or, CSV per step:\nconst csvPerStep = flowResult.steps.map(s => ReportGenerator.generateReportCSV(s.lhr));","handlingStrategy":"validation","validationCode":"import {ReportGenerator} from 'report/generator/report-generator.js';\n\nfunction safeGenerate(result, modes) {\n  const requested = Array.isArray(modes) ? modes : [modes];\n  if (ReportGenerator.isFlowResult(result) && requested.includes('csv')) {\n    throw new Error('CSV is unsupported for user flows; use html or json');\n  }\n  return ReportGenerator.generateReport(result, modes);\n}","typeGuard":"/** @param {LH.Result | LH.FlowResult} r */\nfunction isFlowResult(r) {\n  return r != null && typeof r === 'object' && 'steps' in r && Array.isArray(r.steps);\n}","tryCatchPattern":"try {\n  ReportGenerator.generateReport(result, modes);\n} catch (err) {\n  if (/not support for user flows/.test(err.message)) {\n    // switch to a flow-supported mode\n    ReportGenerator.generateReport(result, 'json');\n  } else throw err;\n}","preventionTips":["Branch on ReportGenerator.isFlowResult(result) before choosing an output mode.","Never include 'csv' in the requested modes when the input is a FlowResult.","If per-step CSV is needed, map over result.steps and call generateReportCSV on each step.lhr."],"tags":["csv","user-flows","report-generator","output-mode"],"backgroundTag":null,"analyzedSha":"9515cd4e58ebed69f78742d932b501c2cab8ad8f","analyzedAt":"2026-08-13T06:28:10.346Z","schemaVersion":2},"datasetVersion":"2026-08-13T09:17:06.757Z"}