{"version":3,"sources":["../src/cli/commands/dataset/records-add.ts"],"sourcesContent":["import chalk from \"chalk\";\nimport fs from \"fs\";\nimport ora from \"ora\";\nimport { checkApiKey } from \"../../utils/apiKey\";\nimport { createDatasetService } from \"./service-factory\";\nimport { handleDatasetCommandError } from \"./error-handler\";\n\n/**\n * Reads all data from stdin as a string.\n */\nconst readStdin = (): Promise<string> => {\n  return new Promise((resolve, reject) => {\n    const chunks: Buffer[] = [];\n    process.stdin.on(\"data\", (chunk: Buffer) => chunks.push(chunk));\n    process.stdin.on(\"end\", () => resolve(Buffer.concat(chunks).toString(\"utf-8\")));\n    process.stdin.on(\"error\", reject);\n  });\n};\n\n/**\n * Parses a JSON string into an array of record entries.\n * Validates that the input is valid JSON and is an array.\n *\n * @param jsonStr - The raw JSON string\n * @returns Parsed array of record objects\n * @throws Error if the JSON is invalid or not an array\n */\nexport const parseRecordsJson = (jsonStr: string): Record<string, unknown>[] => {\n  let parsed: unknown;\n  try {\n    parsed = JSON.parse(jsonStr);\n  } catch {\n    throw new Error(\"Invalid JSON: could not parse input.\");\n  }\n\n  if (!Array.isArray(parsed)) {\n    throw new Error(\"Invalid input: expected a JSON array of records.\");\n  }\n\n  return parsed as Record<string, unknown>[];\n};\n\n/**\n * Adds records to a dataset from inline JSON, a file, or stdin.\n */\nexport const recordsAddCommand = async (\n  slugOrId: string,\n  options: { json?: string; file?: string; stdin?: boolean },\n): Promise<void> => {\n  checkApiKey();\n\n  if (!options.json && !options.file && !options.stdin) {\n    console.error(\n      chalk.red(\"Error: One of --json, --file, or --stdin is required.\"),\n    );\n    process.exit(1);\n  }\n\n  let entries: Record<string, unknown>[];\n  try {\n    let jsonStr: string;\n    if (options.file) {\n      if (!fs.existsSync(options.file)) {\n        console.error(chalk.red(`Error: File not found: ${options.file}`));\n        process.exit(1);\n      }\n      jsonStr = fs.readFileSync(options.file, \"utf-8\");\n    } else if (options.stdin) {\n      jsonStr = await readStdin();\n    } else {\n      jsonStr = options.json!;\n    }\n    entries = parseRecordsJson(jsonStr);\n  } catch (error) {\n    console.error(\n      chalk.red(error instanceof Error ? error.message : \"Invalid JSON input\"),\n    );\n    process.exit(1);\n  }\n\n  if (entries.length === 0) {\n    console.error(chalk.red(\"Error: No records provided. The JSON array is empty.\"));\n    process.exit(1);\n  }\n\n  const service = createDatasetService();\n  const spinner = ora(`Adding ${entries.length} record${entries.length !== 1 ? \"s\" : \"\"} to \"${slugOrId}\"...`).start();\n\n  try {\n    const result = await service.createRecords(slugOrId, entries);\n    const created = result.data;\n\n    spinner.succeed(\n      `Added ${created.length} record${created.length !== 1 ? \"s\" : \"\"} to \"${chalk.cyan(slugOrId)}\"`,\n    );\n    console.log();\n    created.forEach((record) => {\n      console.log(`  ${chalk.bold(\"ID:\")} ${record.id}`);\n    });\n  } catch (error) {\n    handleDatasetCommandError({ spinner, error, context: \"add records\" });\n  }\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,WAAW;AAClB,OAAO,QAAQ;AACf,OAAO,SAAS;AAQhB,IAAM,YAAY,MAAuB;AACvC,SAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,UAAM,SAAmB,CAAC;AAC1B,YAAQ,MAAM,GAAG,QAAQ,CAAC,UAAkB,OAAO,KAAK,KAAK,CAAC;AAC9D,YAAQ,MAAM,GAAG,OAAO,MAAM,QAAQ,OAAO,OAAO,MAAM,EAAE,SAAS,OAAO,CAAC,CAAC;AAC9E,YAAQ,MAAM,GAAG,SAAS,MAAM;AAAA,EAClC,CAAC;AACH;AAUO,IAAM,mBAAmB,CAAC,YAA+C;AAC9E,MAAI;AACJ,MAAI;AACF,aAAS,KAAK,MAAM,OAAO;AAAA,EAC7B,SAAQ;AACN,UAAM,IAAI,MAAM,sCAAsC;AAAA,EACxD;AAEA,MAAI,CAAC,MAAM,QAAQ,MAAM,GAAG;AAC1B,UAAM,IAAI,MAAM,kDAAkD;AAAA,EACpE;AAEA,SAAO;AACT;AAKO,IAAM,oBAAoB,OAC/B,UACA,YACkB;AAClB,cAAY;AAEZ,MAAI,CAAC,QAAQ,QAAQ,CAAC,QAAQ,QAAQ,CAAC,QAAQ,OAAO;AACpD,YAAQ;AAAA,MACN,MAAM,IAAI,uDAAuD;AAAA,IACnE;AACA,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,MAAI;AACJ,MAAI;AACF,QAAI;AACJ,QAAI,QAAQ,MAAM;AAChB,UAAI,CAAC,GAAG,WAAW,QAAQ,IAAI,GAAG;AAChC,gBAAQ,MAAM,MAAM,IAAI,0BAA0B,QAAQ,IAAI,EAAE,CAAC;AACjE,gBAAQ,KAAK,CAAC;AAAA,MAChB;AACA,gBAAU,GAAG,aAAa,QAAQ,MAAM,OAAO;AAAA,IACjD,WAAW,QAAQ,OAAO;AACxB,gBAAU,MAAM,UAAU;AAAA,IAC5B,OAAO;AACL,gBAAU,QAAQ;AAAA,IACpB;AACA,cAAU,iBAAiB,OAAO;AAAA,EACpC,SAAS,OAAO;AACd,YAAQ;AAAA,MACN,MAAM,IAAI,iBAAiB,QAAQ,MAAM,UAAU,oBAAoB;AAAA,IACzE;AACA,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,MAAI,QAAQ,WAAW,GAAG;AACxB,YAAQ,MAAM,MAAM,IAAI,sDAAsD,CAAC;AAC/E,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,QAAM,UAAU,qBAAqB;AACrC,QAAM,UAAU,IAAI,UAAU,QAAQ,MAAM,UAAU,QAAQ,WAAW,IAAI,MAAM,EAAE,QAAQ,QAAQ,MAAM,EAAE,MAAM;AAEnH,MAAI;AACF,UAAM,SAAS,MAAM,QAAQ,cAAc,UAAU,OAAO;AAC5D,UAAM,UAAU,OAAO;AAEvB,YAAQ;AAAA,MACN,SAAS,QAAQ,MAAM,UAAU,QAAQ,WAAW,IAAI,MAAM,EAAE,QAAQ,MAAM,KAAK,QAAQ,CAAC;AAAA,IAC9F;AACA,YAAQ,IAAI;AACZ,YAAQ,QAAQ,CAAC,WAAW;AAC1B,cAAQ,IAAI,KAAK,MAAM,KAAK,KAAK,CAAC,IAAI,OAAO,EAAE,EAAE;AAAA,IACnD,CAAC;AAAA,EACH,SAAS,OAAO;AACd,8BAA0B,EAAE,SAAS,OAAO,SAAS,cAAc,CAAC;AAAA,EACtE;AACF;","names":[]}