{"version":3,"sources":["../src/cli/commands/dataset/service-factory.ts","../src/cli/commands/dataset/error-handler.ts"],"sourcesContent":["import { DatasetService } from \"@/client-sdk/services/datasets\";\nimport { createLangWatchApiClient } from \"@/internal/api/client\";\nimport { NoOpLogger } from \"@/logger\";\nimport { DEFAULT_ENDPOINT } from \"@/internal/constants\";\n\nimport { resolveControlPlaneUrl } from \"@/cli/utils/governance/resolveEndpoint\";\n/**\n * Creates a DatasetService configured from environment variables.\n * Reused by all dataset CLI commands.\n */\nexport function createDatasetService(): DatasetService {\n  const apiKey = process.env.LANGWATCH_API_KEY ?? \"\";\n  const endpoint = (\n    resolveControlPlaneUrl()\n  ).replace(/\\/$/, \"\");\n\n  return new DatasetService({\n    langwatchApiClient: createLangWatchApiClient(apiKey, endpoint),\n    logger: new NoOpLogger(),\n    endpoint,\n    apiKey,\n  });\n}\n","import chalk from \"chalk\";\nimport type { Ora } from \"ora\";\nimport {\n  DatasetApiError,\n  DatasetNotFoundError,\n  DatasetPlanLimitError,\n} from \"@/client-sdk/services/datasets/errors\";\nimport { failSpinner } from \"../../utils/spinnerError\";\n\n/**\n * Centralized error handler for all dataset CLI commands.\n * Maps known error types to a single spinner-fail line (plus an optional\n * detail line for plan limits) and exits with code 1.\n *\n * @param spinner - The ora spinner to fail. The spinner's message is the\n *   only top-level error line rendered — we never emit a separate\n *   `console.error` that would produce two disconnected lines.\n * @param error - The caught error\n * @param context - Human-readable action description (e.g. \"create dataset\",\n *   \"upload records\"). Used as a fallback prefix when the error doesn't\n *   already carry one.\n */\nexport function handleDatasetCommandError({\n  spinner,\n  error,\n  context,\n}: {\n  spinner: Ora;\n  error: unknown;\n  context: string;\n}): never {\n  if (error instanceof DatasetNotFoundError) {\n    spinner.fail(chalk.red(`Not found: ${error.message}`));\n  } else if (error instanceof DatasetPlanLimitError) {\n    spinner.fail(chalk.red(`Plan limit reached: ${error.message}`));\n    if (error.current !== undefined && error.max !== undefined) {\n      console.error(\n        chalk.gray(\n          `  Current ${error.limitType}: ${error.current} / ${error.max}`,\n        ),\n      );\n    }\n  } else if (error instanceof DatasetApiError) {\n    // DatasetApiError.message is already built with formatApiErrorForOperation\n    // (\"Failed to <op>: <detail>\"), so forward it as-is via failSpinner to keep\n    // the double-prefix guard and single-line rendering consistent.\n    failSpinner({ spinner, error, action: context });\n  } else {\n    failSpinner({ spinner, error, action: context });\n  }\n  process.exit(1);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAUO,SAAS,uBAAuC;AAVvD;AAWE,QAAM,UAAS,aAAQ,IAAI,sBAAZ,YAAiC;AAChD,QAAM,WACJ,uBAAuB,EACvB,QAAQ,OAAO,EAAE;AAEnB,SAAO,IAAI,eAAe;AAAA,IACxB,oBAAoB,yBAAyB,QAAQ,QAAQ;AAAA,IAC7D,QAAQ,IAAI,WAAW;AAAA,IACvB;AAAA,IACA;AAAA,EACF,CAAC;AACH;;;ACtBA,OAAO,WAAW;AAsBX,SAAS,0BAA0B;AAAA,EACxC;AAAA,EACA;AAAA,EACA;AACF,GAIU;AACR,MAAI,iBAAiB,sBAAsB;AACzC,YAAQ,KAAK,MAAM,IAAI,cAAc,MAAM,OAAO,EAAE,CAAC;AAAA,EACvD,WAAW,iBAAiB,uBAAuB;AACjD,YAAQ,KAAK,MAAM,IAAI,uBAAuB,MAAM,OAAO,EAAE,CAAC;AAC9D,QAAI,MAAM,YAAY,UAAa,MAAM,QAAQ,QAAW;AAC1D,cAAQ;AAAA,QACN,MAAM;AAAA,UACJ,aAAa,MAAM,SAAS,KAAK,MAAM,OAAO,MAAM,MAAM,GAAG;AAAA,QAC/D;AAAA,MACF;AAAA,IACF;AAAA,EACF,WAAW,iBAAiB,iBAAiB;AAI3C,gBAAY,EAAE,SAAS,OAAO,QAAQ,QAAQ,CAAC;AAAA,EACjD,OAAO;AACL,gBAAY,EAAE,SAAS,OAAO,QAAQ,QAAQ,CAAC;AAAA,EACjD;AACA,UAAQ,KAAK,CAAC;AAChB;","names":[]}