{"version":3,"file":"convert.cjs","names":["convertDirectory","convertFile","parseSimpleYaml","convertConfig"],"sources":["../src/convert.ts"],"sourcesContent":["/**\n * CLI dispatcher for `aimock convert` subcommands.\n *\n * Delegates to the converter modules in src/convert-vidaimock.ts and\n * src/convert-mockllm.ts.\n */\n\nimport { readFileSync, writeFileSync, statSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { convertFile, convertDirectory, type AimockFixtureFile } from \"./convert-vidaimock.js\";\nimport { parseSimpleYaml, convertConfig, type MockLLMConfig } from \"./convert-mockllm.js\";\n\nconst CONVERT_HELP = `\nUsage: aimock convert <format> <input> [output]\n\nFormats:\n  vidaimock    Convert VidaiMock Tera templates to aimock JSON\n  mockllm      Convert mock-llm YAML config to aimock JSON\n\nExamples:\n  aimock convert vidaimock ./templates/ ./fixtures/\n  aimock convert mockllm ./config.yaml ./fixtures/converted.json\n`.trim();\n\nexport interface ConvertCliDeps {\n  argv: string[];\n  log: (msg: string) => void;\n  logError: (msg: string) => void;\n  exit: (code: number) => void;\n}\n\nexport function runConvertCli(deps: ConvertCliDeps): void {\n  const { argv, log, logError, exit } = deps;\n\n  if (argv.length === 0 || argv[0] === \"--help\" || argv[0] === \"-h\") {\n    if (argv.length === 0) {\n      logError(CONVERT_HELP);\n      exit(1);\n    } else {\n      log(CONVERT_HELP);\n      exit(0);\n    }\n    return;\n  }\n\n  const format = argv[0];\n  const inputArg = argv[1];\n  const outputArg = argv[2];\n\n  if (!inputArg) {\n    logError(`Error: missing <input> argument.\\n\\n${CONVERT_HELP}`);\n    exit(1);\n    return;\n  }\n\n  switch (format) {\n    case \"vidaimock\":\n      runVidaimockConvert(inputArg, outputArg, { log, logError, exit });\n      break;\n    case \"mockllm\":\n      runMockllmConvert(inputArg, outputArg, { log, logError, exit });\n      break;\n    default:\n      logError(`Error: unknown format \"${format}\".\\n\\n${CONVERT_HELP}`);\n      exit(1);\n  }\n}\n\n// ---------------------------------------------------------------------------\n// VidaiMock converter\n// ---------------------------------------------------------------------------\n\nfunction runVidaimockConvert(\n  inputArg: string,\n  outputArg: string | undefined,\n  io: { log: (msg: string) => void; logError: (msg: string) => void; exit: (code: number) => void },\n): void {\n  const inputPath = resolve(inputArg);\n  const outputPath = outputArg ? resolve(outputArg) : null;\n\n  let fixtures: AimockFixtureFile[\"fixtures\"];\n\n  try {\n    const stat = statSync(inputPath);\n    if (stat.isDirectory()) {\n      fixtures = convertDirectory(inputPath);\n    } else {\n      const single = convertFile(inputPath);\n      fixtures = single ? [single] : [];\n    }\n  } catch (err) {\n    io.logError(`Error reading input path: ${inputPath}`);\n    io.logError(err instanceof Error ? err.message : String(err));\n    io.exit(1);\n    return;\n  }\n\n  if (fixtures.length === 0) {\n    io.logError(\"No fixtures produced — check that the input contains valid VidaiMock templates.\");\n    io.exit(1);\n    return;\n  }\n\n  const output: AimockFixtureFile = { fixtures };\n  const json = JSON.stringify(output, null, 2) + \"\\n\";\n\n  if (outputPath) {\n    try {\n      writeFileSync(outputPath, json, \"utf-8\");\n    } catch (err) {\n      io.logError(`Error writing output: ${(err as Error).message}`);\n      io.exit(1);\n      return;\n    }\n    io.log(`Wrote ${fixtures.length} fixture(s) to ${outputPath}`);\n  } else {\n    io.log(json.trimEnd());\n  }\n}\n\n// ---------------------------------------------------------------------------\n// mock-llm converter\n// ---------------------------------------------------------------------------\n\nfunction runMockllmConvert(\n  inputArg: string,\n  outputArg: string | undefined,\n  io: { log: (msg: string) => void; logError: (msg: string) => void; exit: (code: number) => void },\n): void {\n  const inputPath = resolve(inputArg);\n  const outputPath = outputArg ? resolve(outputArg) : null;\n\n  let yamlContent: string;\n  try {\n    yamlContent = readFileSync(inputPath, \"utf-8\");\n  } catch (err) {\n    io.logError(`Error reading input file: ${(err as Error).message}`);\n    io.exit(1);\n    return;\n  }\n\n  const parsed = parseSimpleYaml(yamlContent) as MockLLMConfig | null;\n  if (!parsed || typeof parsed !== \"object\") {\n    io.logError(\"Error: could not parse YAML config\");\n    io.exit(1);\n    return;\n  }\n\n  const result = convertConfig(parsed);\n  const fixtureJson = JSON.stringify({ fixtures: result.fixtures }, null, 2);\n\n  if (outputPath) {\n    try {\n      writeFileSync(outputPath, fixtureJson + \"\\n\", \"utf-8\");\n    } catch (err) {\n      io.logError(`Error writing output: ${(err as Error).message}`);\n      io.exit(1);\n      return;\n    }\n    io.log(`Wrote fixtures to ${outputPath}`);\n\n    if (result.mcpTools) {\n      const configPath = outputPath.endsWith(\".json\")\n        ? outputPath.replace(/\\.json$/, \".aimock.json\")\n        : outputPath + \".aimock.json\";\n      const aimockConfig = {\n        llm: { fixtures: outputPath },\n        mcp: {\n          tools: result.mcpTools.map((t) => ({\n            name: t.name,\n            description: t.description ?? \"\",\n            inputSchema: t.inputSchema ?? {},\n            result: `Mock result for ${t.name}`,\n          })),\n        },\n      };\n      try {\n        writeFileSync(configPath, JSON.stringify(aimockConfig, null, 2) + \"\\n\", \"utf-8\");\n      } catch (err) {\n        io.logError(`Error writing config: ${(err as Error).message}`);\n        io.exit(1);\n        return;\n      }\n      io.log(`Wrote aimock config with MCP tools to ${configPath}`);\n    }\n  } else {\n    io.log(fixtureJson);\n\n    if (result.mcpTools) {\n      io.log(\"\\n--- MCP Tools (aimock config format) ---\");\n      io.log(JSON.stringify({ mcp: { tools: result.mcpTools } }, null, 2));\n    }\n  }\n}\n"],"mappings":";;;;;;;;;;;;;AAYA,MAAM,eAAe;;;;;;;;;;EAUnB,MAAM;AASR,SAAgB,cAAc,MAA4B;CACxD,MAAM,EAAE,MAAM,KAAK,UAAU,SAAS;AAEtC,KAAI,KAAK,WAAW,KAAK,KAAK,OAAO,YAAY,KAAK,OAAO,MAAM;AACjE,MAAI,KAAK,WAAW,GAAG;AACrB,YAAS,aAAa;AACtB,QAAK,EAAE;SACF;AACL,OAAI,aAAa;AACjB,QAAK,EAAE;;AAET;;CAGF,MAAM,SAAS,KAAK;CACpB,MAAM,WAAW,KAAK;CACtB,MAAM,YAAY,KAAK;AAEvB,KAAI,CAAC,UAAU;AACb,WAAS,uCAAuC,eAAe;AAC/D,OAAK,EAAE;AACP;;AAGF,SAAQ,QAAR;EACE,KAAK;AACH,uBAAoB,UAAU,WAAW;IAAE;IAAK;IAAU;IAAM,CAAC;AACjE;EACF,KAAK;AACH,qBAAkB,UAAU,WAAW;IAAE;IAAK;IAAU;IAAM,CAAC;AAC/D;EACF;AACE,YAAS,0BAA0B,OAAO,QAAQ,eAAe;AACjE,QAAK,EAAE;;;AAQb,SAAS,oBACP,UACA,WACA,IACM;CACN,MAAM,mCAAoB,SAAS;CACnC,MAAM,aAAa,mCAAoB,UAAU,GAAG;CAEpD,IAAI;AAEJ,KAAI;AAEF,4BADsB,UAAU,CACvB,aAAa,CACpB,YAAWA,2CAAiB,UAAU;OACjC;GACL,MAAM,SAASC,sCAAY,UAAU;AACrC,cAAW,SAAS,CAAC,OAAO,GAAG,EAAE;;UAE5B,KAAK;AACZ,KAAG,SAAS,6BAA6B,YAAY;AACrD,KAAG,SAAS,eAAe,QAAQ,IAAI,UAAU,OAAO,IAAI,CAAC;AAC7D,KAAG,KAAK,EAAE;AACV;;AAGF,KAAI,SAAS,WAAW,GAAG;AACzB,KAAG,SAAS,kFAAkF;AAC9F,KAAG,KAAK,EAAE;AACV;;CAGF,MAAM,SAA4B,EAAE,UAAU;CAC9C,MAAM,OAAO,KAAK,UAAU,QAAQ,MAAM,EAAE,GAAG;AAE/C,KAAI,YAAY;AACd,MAAI;AACF,8BAAc,YAAY,MAAM,QAAQ;WACjC,KAAK;AACZ,MAAG,SAAS,yBAA0B,IAAc,UAAU;AAC9D,MAAG,KAAK,EAAE;AACV;;AAEF,KAAG,IAAI,SAAS,SAAS,OAAO,iBAAiB,aAAa;OAE9D,IAAG,IAAI,KAAK,SAAS,CAAC;;AAQ1B,SAAS,kBACP,UACA,WACA,IACM;CACN,MAAM,mCAAoB,SAAS;CACnC,MAAM,aAAa,mCAAoB,UAAU,GAAG;CAEpD,IAAI;AACJ,KAAI;AACF,0CAA2B,WAAW,QAAQ;UACvC,KAAK;AACZ,KAAG,SAAS,6BAA8B,IAAc,UAAU;AAClE,KAAG,KAAK,EAAE;AACV;;CAGF,MAAM,SAASC,wCAAgB,YAAY;AAC3C,KAAI,CAAC,UAAU,OAAO,WAAW,UAAU;AACzC,KAAG,SAAS,qCAAqC;AACjD,KAAG,KAAK,EAAE;AACV;;CAGF,MAAM,SAASC,sCAAc,OAAO;CACpC,MAAM,cAAc,KAAK,UAAU,EAAE,UAAU,OAAO,UAAU,EAAE,MAAM,EAAE;AAE1E,KAAI,YAAY;AACd,MAAI;AACF,8BAAc,YAAY,cAAc,MAAM,QAAQ;WAC/C,KAAK;AACZ,MAAG,SAAS,yBAA0B,IAAc,UAAU;AAC9D,MAAG,KAAK,EAAE;AACV;;AAEF,KAAG,IAAI,qBAAqB,aAAa;AAEzC,MAAI,OAAO,UAAU;GACnB,MAAM,aAAa,WAAW,SAAS,QAAQ,GAC3C,WAAW,QAAQ,WAAW,eAAe,GAC7C,aAAa;GACjB,MAAM,eAAe;IACnB,KAAK,EAAE,UAAU,YAAY;IAC7B,KAAK,EACH,OAAO,OAAO,SAAS,KAAK,OAAO;KACjC,MAAM,EAAE;KACR,aAAa,EAAE,eAAe;KAC9B,aAAa,EAAE,eAAe,EAAE;KAChC,QAAQ,mBAAmB,EAAE;KAC9B,EAAE,EACJ;IACF;AACD,OAAI;AACF,+BAAc,YAAY,KAAK,UAAU,cAAc,MAAM,EAAE,GAAG,MAAM,QAAQ;YACzE,KAAK;AACZ,OAAG,SAAS,yBAA0B,IAAc,UAAU;AAC9D,OAAG,KAAK,EAAE;AACV;;AAEF,MAAG,IAAI,yCAAyC,aAAa;;QAE1D;AACL,KAAG,IAAI,YAAY;AAEnB,MAAI,OAAO,UAAU;AACnB,MAAG,IAAI,6CAA6C;AACpD,MAAG,IAAI,KAAK,UAAU,EAAE,KAAK,EAAE,OAAO,OAAO,UAAU,EAAE,EAAE,MAAM,EAAE,CAAC"}