{"version":3,"sources":["../interpreter/eval/pipeline/effects-attachment.ts"],"names":["cmd"],"mappings":"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","file":"chunk-MOU2QELE.mjs","sourcesContent":["import type { PipelineCommand, PipelineStage } from '@core/types';\nimport { isBuiltinEffect } from './builtin-effects';\n\n/**\n * Attach builtin effects (e.g., @log, @show, @output) to preceding functional stages.\n * - Effects after a parallel group attach to each command in the group.\n * - Leading effects attach to the first functional stage encountered.\n * - If the pipeline contains only effects, synthesize an __identity__ stage to host them.\n */\nexport function attachBuiltinEffects(pipeline: PipelineStage[]): {\n  functionalPipeline: PipelineStage[];\n  hadLeadingEffects: boolean;\n} {\n  const functional: PipelineStage[] = [];\n  const pendingLeadingEffects: PipelineCommand[] = [];\n  let hadLeadingEffects = false;\n\n  for (const stage of pipeline) {\n    if (Array.isArray(stage)) {\n      const { functionalPipeline: group, hadLeadingEffects: inner } = attachBuiltinEffects(stage);\n      if (pendingLeadingEffects.length > 0 && group.length > 0) {\n        for (const cmd of group as PipelineCommand[]) {\n          const command = cmd as PipelineCommand;\n          command.effects = [\n            ...(command.effects || []),\n            ...pendingLeadingEffects\n          ];\n        }\n        pendingLeadingEffects.length = 0;\n      }\n      if (group.length > 0) {\n        functional.push(group as PipelineCommand[]);\n      }\n      hadLeadingEffects = hadLeadingEffects || inner;\n      continue;\n    }\n\n    const name = stage.rawIdentifier;\n    if (isBuiltinEffect(name)) {\n      if (functional.length > 0) {\n        const prev = functional[functional.length - 1];\n        if (Array.isArray(prev)) {\n          for (const pcmd of prev as PipelineCommand[]) {\n            const command = pcmd as PipelineCommand;\n            command.effects = [\n              ...(command.effects || []),\n              stage\n            ];\n          }\n        } else {\n          const prevCmd = prev as PipelineCommand;\n          prevCmd.effects = [\n            ...(prevCmd.effects || []),\n            stage\n          ];\n        }\n      } else {\n        pendingLeadingEffects.push(stage);\n        hadLeadingEffects = true;\n      }\n      continue;\n    }\n\n    const cmd: PipelineCommand = { ...stage };\n    if (pendingLeadingEffects.length > 0) {\n      cmd.effects = [...(cmd.effects || []), ...pendingLeadingEffects];\n      pendingLeadingEffects.length = 0;\n    }\n    functional.push(cmd);\n  }\n\n  if (functional.length === 0 && pendingLeadingEffects.length > 0) {\n    functional.push({\n      rawIdentifier: '__identity__',\n      identifier: [],\n      args: [],\n      fields: [],\n      rawArgs: [],\n      effects: [...pendingLeadingEffects]\n    } as PipelineCommand);\n    pendingLeadingEffects.length = 0;\n  }\n\n  return { functionalPipeline: functional, hadLeadingEffects };\n}\n"]}