{"version":3,"file":"command.mjs","sources":["../../../../../src/cli/commands/import/command.ts"],"sourcesContent":["import { statSync } from 'fs';\nimport path from 'path';\nimport { createCommand, Option } from 'commander';\nimport {\n  excludeOption,\n  onlyOption,\n  throttleOption,\n  validateExcludeOnly,\n} from '../../utils/data-transfer';\nimport { getCommanderConfirmMessage, forceOption } from '../../utils/commander';\nimport { exitWith } from '../../utils/helpers';\nimport { getInquirer } from '../../utils/get-inquirer';\nimport action from './action';\n\n/**\n * `$ strapi import`\n */\nconst command = () => {\n  return (\n    createCommand('import')\n      .description('Import data from file to Strapi')\n      .allowExcessArguments(false)\n      .requiredOption(\n        '-f, --file <file>',\n        'path to a Strapi export (.tar[.gz][.enc]) or to an unpacked export directory'\n      )\n      .addOption(\n        new Option(\n          '-k, --key <string>',\n          'Provide encryption key in command instead of using the prompt'\n        )\n      )\n      .addOption(new Option('--verbose', 'Enable verbose logs'))\n      .addOption(forceOption)\n      .addOption(excludeOption)\n      .addOption(onlyOption)\n      .addOption(throttleOption)\n      .hook('preAction', validateExcludeOnly)\n      .hook('preAction', async (thisCommand) => {\n        const opts = thisCommand.opts();\n        const ext = path.extname(String(opts.file));\n\n        // check extension to guess if we should prompt for key\n        if (ext === '.enc') {\n          if (!opts.key) {\n            const inquirer = await getInquirer();\n            const answers = await inquirer.prompt([\n              {\n                type: 'password',\n                message: 'Please enter your decryption key',\n                name: 'key',\n              },\n            ]);\n            if (!answers.key?.length) {\n              exitWith(1, 'No key entered, aborting import.');\n            }\n            opts.key = answers.key;\n          }\n        }\n      })\n      // set decrypt and decompress options based on filename (archive only)\n      .hook('preAction', (thisCommand) => {\n        const opts = thisCommand.opts();\n        const filePath = String(opts.file);\n\n        let isDirectory = false;\n        try {\n          isDirectory = statSync(filePath).isDirectory();\n        } catch {\n          // missing path or unreadable — let the transfer fail later with a clear error\n        }\n\n        if (isDirectory) {\n          thisCommand.opts().decrypt = false;\n          thisCommand.opts().decompress = false;\n          return;\n        }\n\n        const { extname, parse } = path;\n\n        let file = filePath;\n\n        if (extname(file) === '.enc') {\n          file = parse(file).name; // trim the .enc extension\n          thisCommand.opts().decrypt = true;\n        } else {\n          thisCommand.opts().decrypt = false;\n        }\n\n        if (extname(file) === '.gz') {\n          file = parse(file).name; // trim the .gz extension\n          thisCommand.opts().decompress = true;\n        } else {\n          thisCommand.opts().decompress = false;\n        }\n\n        if (extname(file) !== '.tar') {\n          exitWith(\n            1,\n            `The file '${opts.file}' does not appear to be a valid Strapi data file. Use a path ending in .tar[.gz][.enc], or an existing directory that contains an unpacked export (e.g. metadata.json).`\n          );\n        }\n      })\n      .hook(\n        'preAction',\n        getCommanderConfirmMessage(\n          'The import will delete your existing data! Are you sure you want to proceed?',\n          { failMessage: 'Import process aborted' }\n        )\n      )\n      .action(action)\n  );\n};\n\nexport default command;\n"],"names":["command","createCommand","description","allowExcessArguments","requiredOption","addOption","Option","forceOption","excludeOption","onlyOption","throttleOption","hook","validateExcludeOnly","thisCommand","opts","ext","path","extname","String","file","key","inquirer","getInquirer","answers","prompt","type","message","name","length","exitWith","filePath","isDirectory","statSync","decrypt","decompress","parse","getCommanderConfirmMessage","failMessage","action"],"mappings":";;;;;;;;;AAcA;;AAEC,UACKA,OAAAA,GAAU,IAAA;AACd,IAAA,OACEC,cAAc,QAAA,CAAA,CACXC,WAAW,CAAC,iCAAA,CAAA,CACZC,oBAAoB,CAAC,KAAA,CAAA,CACrBC,cAAc,CACb,mBAAA,EACA,8EAAA,CAAA,CAEDC,SAAS,CACR,IAAIC,OACF,oBAAA,EACA,+DAAA,CAAA,CAAA,CAGHD,SAAS,CAAC,IAAIC,OAAO,WAAA,EAAa,qBAAA,CAAA,CAAA,CAClCD,SAAS,CAACE,WAAAA,CAAAA,CACVF,SAAS,CAACG,aAAAA,CAAAA,CACVH,SAAS,CAACI,UAAAA,CAAAA,CACVJ,SAAS,CAACK,cAAAA,CAAAA,CACVC,IAAI,CAAC,WAAA,EAAaC,qBAClBD,IAAI,CAAC,aAAa,OAAOE,WAAAA,GAAAA;QACxB,MAAMC,IAAAA,GAAOD,YAAYC,IAAI,EAAA;AAC7B,QAAA,MAAMC,MAAMC,IAAAA,CAAKC,OAAO,CAACC,MAAAA,CAAOJ,KAAKK,IAAI,CAAA,CAAA;;AAGzC,QAAA,IAAIJ,QAAQ,MAAA,EAAQ;YAClB,IAAI,CAACD,IAAAA,CAAKM,GAAG,EAAE;AACb,gBAAA,MAAMC,WAAW,MAAMC,WAAAA,EAAAA;AACvB,gBAAA,MAAMC,OAAAA,GAAU,MAAMF,QAAAA,CAASG,MAAM,CAAC;AACpC,oBAAA;wBACEC,IAAAA,EAAM,UAAA;wBACNC,OAAAA,EAAS,kCAAA;wBACTC,IAAAA,EAAM;AACR;AACD,iBAAA,CAAA;AACD,gBAAA,IAAI,CAACJ,OAAAA,CAAQH,GAAG,EAAEQ,MAAAA,EAAQ;AACxBC,oBAAAA,QAAAA,CAAS,CAAA,EAAG,kCAAA,CAAA;AACd,gBAAA;gBACAf,IAAAA,CAAKM,GAAG,GAAGG,OAAAA,CAAQH,GAAG;AACxB,YAAA;AACF,QAAA;AACF,IAAA,CAAA,CACA;KACCT,IAAI,CAAC,aAAa,CAACE,WAAAA,GAAAA;QAClB,MAAMC,IAAAA,GAAOD,YAAYC,IAAI,EAAA;QAC7B,MAAMgB,QAAAA,GAAWZ,MAAAA,CAAOJ,IAAAA,CAAKK,IAAI,CAAA;AAEjC,QAAA,IAAIY,WAAAA,GAAc,KAAA;QAClB,IAAI;YACFA,WAAAA,GAAcC,QAAAA,CAASF,UAAUC,WAAW,EAAA;AAC9C,QAAA,CAAA,CAAE,OAAM;;AAER,QAAA;AAEA,QAAA,IAAIA,WAAAA,EAAa;YACflB,WAAAA,CAAYC,IAAI,EAAA,CAAGmB,OAAO,GAAG,KAAA;YAC7BpB,WAAAA,CAAYC,IAAI,EAAA,CAAGoB,UAAU,GAAG,KAAA;AAChC,YAAA;AACF,QAAA;AAEA,QAAA,MAAM,EAAEjB,OAAO,EAAEkB,KAAK,EAAE,GAAGnB,IAAAA;AAE3B,QAAA,IAAIG,IAAAA,GAAOW,QAAAA;QAEX,IAAIb,OAAAA,CAAQE,UAAU,MAAA,EAAQ;AAC5BA,YAAAA,IAAAA,GAAOgB,KAAAA,CAAMhB,IAAAA,CAAAA,CAAMQ,IAAI,CAAA;YACvBd,WAAAA,CAAYC,IAAI,EAAA,CAAGmB,OAAO,GAAG,IAAA;QAC/B,CAAA,MAAO;YACLpB,WAAAA,CAAYC,IAAI,EAAA,CAAGmB,OAAO,GAAG,KAAA;AAC/B,QAAA;QAEA,IAAIhB,OAAAA,CAAQE,UAAU,KAAA,EAAO;AAC3BA,YAAAA,IAAAA,GAAOgB,KAAAA,CAAMhB,IAAAA,CAAAA,CAAMQ,IAAI,CAAA;YACvBd,WAAAA,CAAYC,IAAI,EAAA,CAAGoB,UAAU,GAAG,IAAA;QAClC,CAAA,MAAO;YACLrB,WAAAA,CAAYC,IAAI,EAAA,CAAGoB,UAAU,GAAG,KAAA;AAClC,QAAA;QAEA,IAAIjB,OAAAA,CAAQE,UAAU,MAAA,EAAQ;YAC5BU,QAAAA,CACE,CAAA,EACA,CAAC,UAAU,EAAEf,KAAKK,IAAI,CAAC,uKAAuK,CAAC,CAAA;AAEnM,QAAA;AACF,IAAA,CAAA,CAAA,CACCR,IAAI,CACH,WAAA,EACAyB,0BAAAA,CACE,8EAAA,EACA;QAAEC,WAAAA,EAAa;AAAyB,KAAA,CAAA,CAAA,CAG3CC,MAAM,CAACA,MAAAA,CAAAA;AAEd;;;;"}