{"version":3,"sources":["../../src/commands/copy.ts"],"names":[],"mappings":";;;;;;;;AASA,MAAO,oBAAkC,WAAY,CAAA;AAAA,EACnD,OAAO,EAAK,GAAA,MAAA;AAAA,EACZ,OAAO,WAAc,GAAA,4BAAA;AAAA,EAErB,OAAO,QAAW,GAAA;AAAA,IAChB,0EAAA;AAAA,IACA,uEAAA;AAAA,IACA,oEAAA;AAAA,IACA,8EAAA;AAAA,IACA;AAAA,GACF;AAAA,EAEA,OAAO,KAAQ,GAAA;AAAA,IACb,GAAG,WAAY,CAAA,KAAA;AAAA,IACf,SAAA,EAAW,MAAM,OAAQ,CAAA;AAAA,MACvB,IAAM,EAAA,GAAA;AAAA,MACN,WAAa,EAAA,8BAAA;AAAA,MACb,OAAS,EAAA;AAAA,KACV,CAAA;AAAA,IACD,OAAA,EAAS,MAAM,MAAO,CAAA;AAAA,MACpB,IAAM,EAAA,GAAA;AAAA,MACN,WAAa,EAAA;AAAA,KACd,CAAA;AAAA,IACD,KAAA,EAAO,MAAM,OAAQ,CAAA;AAAA,MACnB,IAAM,EAAA,GAAA;AAAA,MACN,WAAa,EAAA,gCAAA;AAAA,MACb,OAAS,EAAA;AAAA,KACV,CAAA;AAAA,IACD,SAAA,EAAW,MAAM,OAAQ,CAAA;AAAA,MACvB,WAAa,EAAA,oDAAA;AAAA,MACb,OAAS,EAAA;AAAA,KACV,CAAA;AAAA,IACD,QAAA,EAAU,MAAM,OAAQ,CAAA;AAAA,MACtB,WAAa,EAAA,mCAAA;AAAA,MACb,OAAS,EAAA;AAAA,KACV,CAAA;AAAA,IACD,KAAA,EAAO,MAAM,OAAQ,CAAA;AAAA,MACnB,WAAa,EAAA,0CAAA;AAAA,MACb,OAAS,EAAA;AAAA,KACV,CAAA;AAAA,IACD,GAAA,EAAK,MAAM,OAAQ,CAAA;AAAA,MACjB,IAAM,EAAA,GAAA;AAAA,MACN,WAAa,EAAA,0BAAA;AAAA,MACb,OAAS,EAAA;AAAA,KACV,CAAA;AAAA,IACD,WAAA,EAAa,MAAM,OAAQ,CAAA;AAAA,MACzB,IAAM,EAAA,GAAA;AAAA,MACN,WAAa,EAAA,4CAAA;AAAA,MACb,OAAS,EAAA;AAAA,KACV;AAAA,GACH;AAAA,EAEA,OAAO,IAAO,GAAA;AAAA,IACZ,MAAA,EAAQ,KAAK,MAAO,CAAA;AAAA,MAClB,WAAa,EAAA,0BAAA;AAAA,MACb,QAAU,EAAA;AAAA,KACX,CAAA;AAAA,IACD,GAAA,EAAK,KAAK,MAAO,CAAA;AAAA,MACf,WAAa,EAAA,4BAAA;AAAA,MACb,QAAU,EAAA;AAAA,KACX;AAAA,GACH;AAAA,EAEA,MAAa,GAAqB,GAAA;AAChC,IAAA,MAAM,EAAC,IAAM,EAAA,KAAA,KAAS,MAAM,IAAA,CAAK,MAAM,WAAW,CAAA;AAClD,IAAM,MAAA,OAAA,GAAU,IAAK,CAAA,iBAAA,CAAkB,KAAK,CAAA;AAE5C,IAAI,IAAA;AAEF,MAAA,MAAM,WAAmD,GAAA;AAAA,QACvD,SAAS,KAAM,CAAA,OAAA;AAAA,QACf,SAAA,EAAW,MAAM,SAAa,IAAA,KAAA;AAAA,QAC9B,SAAA,EAAW,MAAM,KAAS,IAAA,KAAA;AAAA,QAC1B,MAAA,EAAQ,KAAM,CAAA,SAAS,CAAK,IAAA,KAAA;AAAA,QAC5B,QAAA,EAAU,MAAM,QAAY,IAAA,KAAA;AAAA,QAC5B,KAAA,EAAO,MAAM,KAAS,IAAA,KAAA;AAAA,QACtB,KAAA,EAAO,MAAM,GAAO,IAAA,KAAA;AAAA,QACpB,WAAA,EAAa,MAAM,WAAe,IAAA;AAAA,OACpC;AAEA,MAAI,IAAA,CAAC,QAAQ,MAAQ,EAAA;AACnB,QAAA,IAAA,CAAK,GAAI,CAAA,MAAA,CAAO,IAAK,CAAA,4BAA4B,CAAC,CAAA;AAAA;AAGpD,MAAM,MAAA,UAAA,GAAa,IAAI,UAAW,EAAA;AAGlC,MAAA,IAAI,MAAM,WAAa,EAAA;AACrB,QAAM,MAAA,aAAA,GAAgB,MAAM,OAAQ,CAAA;AAAA,UAClC,OAAS,EAAA,iDAAA;AAAA,UACT,OAAS,EAAA;AAAA,SACV,CAAA;AAED,QAAA,IAAI,CAAC,aAAe,EAAA;AAClB,UAAA,IAAA,CAAK,GAAI,CAAA,MAAA,CAAO,IAAK,CAAA,mCAAmC,CAAC,CAAA;AACzD,UAAA;AAAA;AACF;AAIF,MAAM,MAAA,MAAA,GAAS,MAAM,UAAW,CAAA,IAAA,CAAK,KAAK,MAAQ,EAAA,IAAA,CAAK,KAAK,WAAW,CAAA;AAEvE,MAAI,IAAA,CAAC,QAAQ,MAAQ,EAAA;AACnB,QAAI,IAAA,MAAA,IAAU,OAAO,OAAS,EAAA;AAC5B,UAAK,IAAA,CAAA,GAAA,CAAI,OAAO,OAAQ,CAAA;AAAA,oBAAA,EAAyB,OAAO,WAAY,CAAA,MAAM,aAAa,MAAO,CAAA,UAAU,EAAE,CAAC,CAAA;AAAA,mBAClG,MAAQ,EAAA;AACjB,UAAK,IAAA,CAAA,GAAA,CAAI,OAAO,KAAM,CAAA;AAAA,eAAA,EAAoB,MAAO,CAAA,WAAA,CAAY,MAAM,CAAA,MAAA,CAAQ,CAAC,CAAA;AAC5E,UAAO,MAAA,CAAA,MAAA,CAAO,QAAQ,CAAO,GAAA,KAAA;AAC3B,YAAA,IAAA,CAAK,IAAI,MAAO,CAAA,KAAA,CAAM,KAAK,GAAI,CAAA,OAAO,EAAE,CAAC,CAAA;AAAA,WAC1C,CAAA;AACD,UAAA,IAAA,CAAK,MAAM,uBAAuB,CAAA;AAAA;AACpC;AACF,aACO,KAAY,EAAA;AACnB,MAAA,IAAA,CAAK,MAAM,KAAK,CAAA;AAAA;AAClB;AACF,EAEQ,eAAA,CAAgB,UAAe,OAA4B,EAAA;AACjE,IAAA,IAAA,CAAK,GAAI,CAAA,MAAA,CAAO,IAAK,CAAA,kBAAkB,CAAC,CAAA;AACxC,IAAA,IAAA,CAAK,GAAI,CAAA,CAAA,QAAA,EAAW,QAAS,CAAA,MAAM,CAAE,CAAA,CAAA;AACrC,IAAA,IAAA,CAAK,GAAI,CAAA,CAAA,cAAA,EAAiB,QAAS,CAAA,WAAA,CAAY,GAAI,CAAA,CAAC,CAAW,KAAA,CAAA,CAAE,IAAI,CAAA,CAAE,IAAK,CAAA,IAAI,CAAC,CAAE,CAAA,CAAA;AACnF,IAAA,IAAA,CAAK,GAAI,CAAA,CAAA,eAAA,EAAkB,QAAS,CAAA,UAAU,CAAE,CAAA,CAAA;AAChD,IAAA,IAAA,CAAK,IAAI,CAAe,YAAA,EAAA,IAAA,CAAK,WAAW,QAAS,CAAA,SAAS,CAAC,CAAE,CAAA,CAAA;AAE7D,IAAI,IAAA,OAAA,CAAQ,MAAU,IAAA,OAAA,CAAQ,QAAU,EAAA;AACtC,MAAA,IAAI,QAAQ,KAAO,EAAA;AACjB,QAAA,IAAA,CAAK,GAAI,CAAA,MAAA,CAAO,GAAI,CAAA,iCAAiC,CAAC,CAAA;AAGtD,QAAA,MAAM,SAAY,GAAA,EAAA;AAClB,QAAA,MAAM,SAAY,GAAA,EAAA;AAClB,QAAA,MAAM,SAAY,GAAA,EAAA;AAGlB,QAAA,MAAM,MAAS,GAAA,CAAA,IAAA,EAAO,GAAI,CAAA,MAAA,CAAO,SAAY,GAAA,CAAC,CAAC,CAAA,KAAA,EAAQ,GAAI,CAAA,MAAA,CAAO,SAAY,GAAA,CAAC,CAAC,CAAA,cAAA,CAAA;AAChF,QAAM,MAAA,cAAA,GAAiB,SAAY,GAAA,SAAA,GAAY,SAAY,GAAA,CAAA;AAC3D,QAAM,MAAA,SAAA,GAAY,QAAI,CAAA,MAAA,CAAO,cAAc,CAAA;AAE3C,QAAA,IAAA,CAAK,IAAI,MAAM,CAAA;AACf,QAAA,IAAA,CAAK,GAAI,CAAA,MAAA,CAAO,GAAI,CAAA,SAAS,CAAC,CAAA;AAE9B,QAAS,QAAA,CAAA,WAAA,CAAY,OAAQ,CAAA,CAAC,IAAiB,KAAA;AAC7C,UAAI,IAAA;AACF,YAAM,MAAA,KAAA,GAAQ,EAAG,CAAA,QAAA,CAAS,IAAI,CAAA;AAC9B,YAAA,MAAM,IAAO,GAAA,IAAA,CAAK,UAAW,CAAA,KAAA,CAAM,IAAI,CAAA;AACvC,YAAM,MAAA,YAAA,GAAe,MAAM,KAAM,CAAA,WAAA,GAAc,KAAM,CAAA,GAAG,EAAE,CAAC,CAAA;AAC3D,YAAA,MAAM,YAAe,GAAA,IAAA,CAAK,QAAS,CAAA,QAAA,CAAS,QAAQ,IAAI,CAAA;AACxD,YAAA,IAAA,CAAK,GAAI,CAAA,CAAA,EAAG,YAAa,CAAA,MAAA,CAAO,SAAS,CAAC,CAAI,CAAA,EAAA,IAAA,CAAK,MAAO,CAAA,SAAS,CAAC,CAAA,CAAA,EAAI,YAAY,CAAE,CAAA,CAAA;AAAA,WAChF,CAAA,MAAA;AACN,YAAA,MAAM,YAAe,GAAA,IAAA,CAAK,QAAS,CAAA,QAAA,CAAS,QAAQ,IAAI,CAAA;AACxD,YAAA,IAAA,CAAK,GAAI,CAAA,CAAA,EAAG,YAAa,CAAA,MAAA,CAAO,SAAS,CAAC,CAAW,QAAA,EAAA,GAAA,CAAI,MAAO,CAAA,SAAA,GAAY,CAAC,CAAC,CAAU,QAAA,CAAA,CAAA;AAAA;AAC1F,SACD,CAAA;AAAA,OACI,MAAA;AACL,QAAA,IAAA,CAAK,GAAI,CAAA,MAAA,CAAO,GAAI,CAAA,+BAA+B,CAAC,CAAA;AACpD,QAAS,QAAA,CAAA,WAAA,CAAY,OAAQ,CAAA,CAAC,IAAiB,KAAA;AAC7C,UAAA,MAAM,YAAe,GAAA,IAAA,CAAK,QAAS,CAAA,QAAA,CAAS,QAAQ,IAAI,CAAA;AACxD,UAAA,IAAI,QAAQ,QAAU,EAAA;AACpB,YAAI,IAAA;AACF,cAAM,MAAA,KAAA,GAAQ,EAAG,CAAA,QAAA,CAAS,IAAI,CAAA;AAC9B,cAAK,IAAA,CAAA,GAAA;AAAA,gBACH,CAAK,EAAA,EAAA,YAAY,CAAK,EAAA,EAAA,IAAA,CAAK,UAAW,CAAA,KAAA,CAAM,IAAI,CAAC,CAAoB,iBAAA,EAAA,KAAA,CAAM,KAAM,CAAA,WAAA,EAAa,CAAA,CAAA;AAAA,eAChG;AAAA,aACM,CAAA,MAAA;AACN,cAAK,IAAA,CAAA,GAAA,CAAI,CAAK,EAAA,EAAA,YAAY,CAAiB,eAAA,CAAA,CAAA;AAAA;AAC7C,WACK,MAAA;AACL,YAAK,IAAA,CAAA,GAAA,CAAI,CAAK,EAAA,EAAA,YAAY,CAAE,CAAA,CAAA;AAAA;AAC9B,SACD,CAAA;AAAA;AACH;AACF;AACF,EAEQ,WAAW,KAAuB,EAAA;AACxC,IAAA,MAAM,QAAQ,CAAC,GAAA,EAAK,IAAM,EAAA,IAAA,EAAM,MAAM,IAAI,CAAA;AAC1C,IAAA,IAAI,IAAO,GAAA,KAAA;AACX,IAAA,IAAI,SAAY,GAAA,CAAA;AAEhB,IAAA,OAAO,IAAQ,IAAA,IAAA,IAAQ,SAAY,GAAA,KAAA,CAAM,SAAS,CAAG,EAAA;AACnD,MAAQ,IAAA,IAAA,IAAA;AACR,MAAA,SAAA,EAAA;AAAA;AAGF,IAAO,OAAA,CAAA,EAAG,KAAK,OAAQ,CAAA,CAAC,CAAC,CAAI,CAAA,EAAA,KAAA,CAAM,SAAS,CAAC,CAAA,CAAA;AAAA;AAEjD","file":"copy.mjs","sourcesContent":["import {confirm} from '@inquirer/prompts';\nimport {Args, Flags} from '@oclif/core';\nimport fs from 'fs';\nimport path from 'path';\n\nimport {BaseCommand} from '../command';\nimport {CopyOptions, FileCopier} from '../core/file-copier';\nimport {colors} from '../utils/colors';\n\nexport default class CopyCommand extends BaseCommand {\n  static id = 'copy';\n  static description = 'Copy files to iCloud Drive';\n\n  static examples = [\n    '$ icloudy copy file.txt Word                # Copy file to Word app data',\n    '$ icloudy copy folder Word -r               # Copy folder recursively',\n    '$ icloudy copy *.txt Word -p \"*.txt\"        # Copy only .txt files',\n    '$ icloudy copy folder Word -r -f            # Force overwrite existing files',\n    '$ icloudy copy folder Word -r --dry-run     # Show what would be copied',\n  ];\n\n  static flags = {\n    ...BaseCommand.flags,\n    recursive: Flags.boolean({\n      char: 'r',\n      description: 'Copy directories recursively',\n      default: false,\n    }),\n    pattern: Flags.string({\n      char: 'p',\n      description: 'File pattern to match (e.g. \"*.txt\")',\n    }),\n    force: Flags.boolean({\n      char: 'f',\n      description: 'Force overwrite existing files',\n      default: false,\n    }),\n    'dry-run': Flags.boolean({\n      description: 'Show what would be copied without actually copying',\n      default: false,\n    }),\n    detailed: Flags.boolean({\n      description: 'Display detailed file information',\n      default: false,\n    }),\n    table: Flags.boolean({\n      description: 'Display file information in table format',\n      default: false,\n    }),\n    yes: Flags.boolean({\n      char: 'y',\n      description: 'Skip confirmation prompt',\n      default: false,\n    }),\n    interactive: Flags.boolean({\n      char: 'i',\n      description: 'Interactive mode with confirmation prompts',\n      default: false,\n    }),\n  };\n\n  static args = {\n    source: Args.string({\n      description: 'Source path to copy from',\n      required: true,\n    }),\n    app: Args.string({\n      description: 'Target app name to copy to',\n      required: true,\n    }),\n  };\n\n  public async run(): Promise<void> {\n    const {args, flags} = await this.parse(CopyCommand);\n    const options = this.getCommandOptions(flags);\n\n    try {\n      // Prepare copy options\n      const copyOptions: Omit<CopyOptions, 'source' | 'app'> = {\n        pattern: flags.pattern,\n        recursive: flags.recursive || false,\n        overwrite: flags.force || false,\n        dryRun: flags['dry-run'] || false,\n        detailed: flags.detailed || false,\n        table: flags.table || false,\n        force: flags.yes || false,\n        interactive: flags.interactive || false,\n      };\n\n      if (!options.silent) {\n        this.log(colors.info('Analyzing files to copy...'));\n      }\n\n      const fileCopier = new FileCopier();\n\n      // Handle interactive mode\n      if (flags.interactive) {\n        const shouldProceed = await confirm({\n          message: 'Do you want to proceed with the copy operation?',\n          default: true,\n        });\n\n        if (!shouldProceed) {\n          this.log(colors.info('Copy operation cancelled by user.'));\n          return;\n        }\n      }\n\n      // Use the new function call method to execute the copy\n      const result = await fileCopier.copy(args.source, args.app, copyOptions);\n\n      if (!options.silent) {\n        if (result && result.success) {\n          this.log(colors.success(`\\nSuccessfully copied ${result.copiedFiles.length} files to ${result.targetPath}`));\n        } else if (result) {\n          this.log(colors.error(`\\nFailed to copy ${result.failedFiles.length} files`));\n          result.errors.forEach(err => {\n            this.log(colors.error(`- ${err.message}`));\n          });\n          this.error('Copy operation failed');\n        }\n      }\n    } catch (error: any) {\n      this.error(error);\n    }\n  }\n\n  private displayAnalysis(analysis: any, options: CopyOptions): void {\n    this.log(colors.bold('\\nCopy Analysis:'));\n    this.log(`Source: ${analysis.source}`);\n    this.log(`Target Paths: ${analysis.targetPaths.map((p: any) => p.path).join(', ')}`);\n    this.log(`Files to Copy: ${analysis.totalFiles}`);\n    this.log(`Total Size: ${this.formatSize(analysis.totalSize)}`);\n\n    if (options.dryRun || options.detailed) {\n      if (options.table) {\n        this.log(colors.dim('\\nFiles to copy (table format):'));\n\n        // Define column widths\n        const pathWidth = 30;\n        const sizeWidth = 10;\n        const dateWidth = 10;\n\n        // Calculate header and separator line\n        const header = `Path${' '.repeat(pathWidth - 4)} Size${' '.repeat(sizeWidth - 4)} Last Modified`;\n        const separatorWidth = pathWidth + sizeWidth + dateWidth + 2; // +2 for spaces between columns\n        const separator = '─'.repeat(separatorWidth);\n\n        this.log(header);\n        this.log(colors.dim(separator));\n\n        analysis.filesToCopy.forEach((file: string) => {\n          try {\n            const stats = fs.statSync(file);\n            const size = this.formatSize(stats.size);\n            const lastModified = stats.mtime.toISOString().split('T')[0];\n            const relativePath = path.relative(analysis.source, file);\n            this.log(`${relativePath.padEnd(pathWidth)} ${size.padEnd(sizeWidth)} ${lastModified}`);\n          } catch {\n            const relativePath = path.relative(analysis.source, file);\n            this.log(`${relativePath.padEnd(pathWidth)} Unknown${' '.repeat(sizeWidth - 7)} Unknown`);\n          }\n        });\n      } else {\n        this.log(colors.dim('\\nFiles that would be copied:'));\n        analysis.filesToCopy.forEach((file: string) => {\n          const relativePath = path.relative(analysis.source, file);\n          if (options.detailed) {\n            try {\n              const stats = fs.statSync(file);\n              this.log(\n                `  ${relativePath} (${this.formatSize(stats.size)}, last modified: ${stats.mtime.toISOString()})`,\n              );\n            } catch {\n              this.log(`  ${relativePath} (size unknown)`);\n            }\n          } else {\n            this.log(`  ${relativePath}`);\n          }\n        });\n      }\n    }\n  }\n\n  private formatSize(bytes: number): string {\n    const units = ['B', 'KB', 'MB', 'GB', 'TB'];\n    let size = bytes;\n    let unitIndex = 0;\n\n    while (size >= 1024 && unitIndex < units.length - 1) {\n      size /= 1024;\n      unitIndex++;\n    }\n\n    return `${size.toFixed(2)} ${units[unitIndex]}`;\n  }\n}\n"]}