{"version":3,"file":"action.mjs","sources":["../../../../../src/cli/commands/export/action.ts"],"sourcesContent":["import { isObject, isString, isFinite, toNumber } from 'lodash/fp';\nimport fs from 'fs-extra';\nimport chalk from 'chalk';\nimport type { Core } from '@strapi/types';\n\nimport {\n  engine as engineDataTransfer,\n  strapi as strapiDataTransfer,\n  file as fileDataTransfer,\n} from '@strapi/data-transfer';\n\nimport {\n  getDefaultExportName,\n  buildTransferTable,\n  DEFAULT_IGNORED_CONTENT_TYPES,\n  createStrapiInstance,\n  formatDiagnostic,\n  loadersFactory,\n  exitMessageText,\n  abortTransfer,\n  getTransferTelemetryPayload,\n  setSignalHandler,\n} from '../../utils/data-transfer';\nimport { exitWith } from '../../utils/helpers';\n\nconst {\n  providers: { createLocalFileDestinationProvider },\n} = fileDataTransfer;\nconst {\n  providers: { createLocalStrapiSourceProvider },\n} = strapiDataTransfer;\n\nconst BYTES_IN_MB = 1024 * 1024;\n\ninterface CmdOptions {\n  file?: string;\n  encrypt?: boolean;\n  verbose?: boolean;\n  key?: string;\n  compress?: boolean;\n  only?: (keyof engineDataTransfer.TransferGroupFilter)[];\n  exclude?: (keyof engineDataTransfer.TransferGroupFilter)[];\n  throttle?: number;\n  maxSizeJsonl?: number;\n}\n\n/**\n * Export command.\n *\n * It transfers data from a local Strapi instance to a file\n *\n * @param {ExportCommandOptions} opts\n */\nexport default async (opts: CmdOptions) => {\n  // Validate inputs from Commander\n  if (!isObject(opts)) {\n    exitWith(1, 'Could not parse command arguments');\n  }\n\n  const strapi = await createStrapiInstance();\n\n  const source = createSourceProvider(strapi);\n  const destination = createDestinationProvider(opts);\n\n  const engine = engineDataTransfer.createTransferEngine(source, destination, {\n    versionStrategy: 'ignore', // for an export to file, versionStrategy will always be skipped\n    schemaStrategy: 'ignore', // for an export to file, schemaStrategy will always be skipped\n    exclude: opts.exclude,\n    only: opts.only,\n    throttle: opts.throttle,\n    transforms: {\n      links: [\n        {\n          filter(link) {\n            return (\n              !DEFAULT_IGNORED_CONTENT_TYPES.includes(link.left.type) &&\n              !DEFAULT_IGNORED_CONTENT_TYPES.includes(link.right.type)\n            );\n          },\n        },\n      ],\n      entities: [\n        {\n          filter(entity) {\n            return !DEFAULT_IGNORED_CONTENT_TYPES.includes(entity.type);\n          },\n        },\n      ],\n    },\n  });\n\n  engine.diagnostics.onDiagnostic(formatDiagnostic('export', opts.verbose));\n\n  const progress = engine.progress.stream;\n\n  const { updateLoader } = loadersFactory();\n\n  progress.on(`stage::start`, ({ stage, data }) => {\n    updateLoader(stage, data).start();\n  });\n\n  progress.on('stage::finish', ({ stage, data }) => {\n    updateLoader(stage, data).succeed();\n  });\n\n  progress.on('stage::progress', ({ stage, data }) => {\n    updateLoader(stage, data);\n  });\n\n  progress.on('transfer::start', async () => {\n    console.log(`Starting export...`);\n\n    await strapi.telemetry.send('didDEITSProcessStart', getTransferTelemetryPayload(engine));\n  });\n\n  let results: engineDataTransfer.ITransferResults<typeof source, typeof destination>;\n  let outFile: string;\n  try {\n    // Abort transfer if user interrupts process\n    setSignalHandler(() => abortTransfer({ engine, strapi }));\n\n    results = await engine.transfer();\n    outFile = results.destination?.file?.path ?? '';\n    const outFileExists = await fs.pathExists(outFile);\n    if (!outFileExists) {\n      throw new engineDataTransfer.errors.TransferEngineTransferError(\n        `Export file not created \"${outFile}\"`\n      );\n    }\n\n    // Note: we need to await telemetry or else the process ends before it is sent\n    await strapi.telemetry.send('didDEITSProcessFinish', getTransferTelemetryPayload(engine));\n\n    try {\n      const table = buildTransferTable(results.engine);\n      console.log(table?.toString());\n    } catch (e) {\n      console.error('There was an error displaying the results of the transfer.');\n    }\n\n    console.log(`Export archive is in ${chalk.green(outFile)}`);\n    exitWith(0, exitMessageText('export'));\n  } catch {\n    await strapi.telemetry.send('didDEITSProcessFail', getTransferTelemetryPayload(engine));\n    exitWith(1, exitMessageText('export', true));\n  }\n};\n\n/**\n * It creates a local strapi destination provider\n */\nconst createSourceProvider = (strapi: Core.Strapi) => {\n  return createLocalStrapiSourceProvider({\n    async getStrapi() {\n      return strapi;\n    },\n  });\n};\n\n/**\n * It creates a local file destination provider based on the given options\n */\nconst createDestinationProvider = (opts: CmdOptions) => {\n  const { file, compress, encrypt, key, maxSizeJsonl } = opts;\n\n  const filepath = isString(file) && file.length > 0 ? file : getDefaultExportName();\n\n  const maxSizeJsonlInMb = isFinite(toNumber(maxSizeJsonl))\n    ? toNumber(maxSizeJsonl) * BYTES_IN_MB\n    : undefined;\n\n  return createLocalFileDestinationProvider({\n    file: {\n      path: filepath,\n      maxSizeJsonl: maxSizeJsonlInMb,\n    },\n    encryption: {\n      enabled: encrypt ?? false,\n      key: encrypt ? key : undefined,\n    },\n    compression: {\n      enabled: compress ?? false,\n    },\n  });\n};\n"],"names":["providers","createLocalFileDestinationProvider","fileDataTransfer","createLocalStrapiSourceProvider","strapiDataTransfer","BYTES_IN_MB","opts","isObject","exitWith","strapi","createStrapiInstance","source","createSourceProvider","destination","createDestinationProvider","engine","engineDataTransfer","createTransferEngine","versionStrategy","schemaStrategy","exclude","only","throttle","transforms","links","filter","link","DEFAULT_IGNORED_CONTENT_TYPES","includes","left","type","right","entities","entity","diagnostics","onDiagnostic","formatDiagnostic","verbose","progress","stream","updateLoader","loadersFactory","on","stage","data","start","succeed","console","log","telemetry","send","getTransferTelemetryPayload","results","outFile","setSignalHandler","abortTransfer","transfer","file","path","outFileExists","fs","pathExists","errors","TransferEngineTransferError","table","buildTransferTable","toString","e","error","chalk","green","exitMessageText","getStrapi","compress","encrypt","key","maxSizeJsonl","filepath","isString","length","getDefaultExportName","maxSizeJsonlInMb","isFinite","toNumber","undefined","encryption","enabled","compression"],"mappings":";;;;;;;AAyBA,MAAM,EACJA,SAAAA,EAAW,EAAEC,kCAAkC,EAAE,EAClD,GAAGC,IAAAA;AACJ,MAAM,EACJF,SAAAA,EAAW,EAAEG,+BAA+B,EAAE,EAC/C,GAAGC,MAAAA;AAEJ,MAAMC,cAAc,IAAA,GAAO,IAAA;AAc3B;;;;;;IAOA,aAAe,CAAA,OAAOC,IAAAA,GAAAA;;IAEpB,IAAI,CAACC,SAASD,IAAAA,CAAAA,EAAO;AACnBE,QAAAA,QAAAA,CAAS,CAAA,EAAG,mCAAA,CAAA;AACd,IAAA;AAEA,IAAA,MAAMC,SAAS,MAAMC,oBAAAA,EAAAA;AAErB,IAAA,MAAMC,SAASC,oBAAAA,CAAqBH,MAAAA,CAAAA;AACpC,IAAA,MAAMI,cAAcC,yBAAAA,CAA0BR,IAAAA,CAAAA;AAE9C,IAAA,MAAMS,QAAAA,GAASC,MAAAA,CAAmBC,oBAAoB,CAACN,QAAQE,WAAAA,EAAa;QAC1EK,eAAAA,EAAiB,QAAA;QACjBC,cAAAA,EAAgB,QAAA;AAChBC,QAAAA,OAAAA,EAASd,KAAKc,OAAO;AACrBC,QAAAA,IAAAA,EAAMf,KAAKe,IAAI;AACfC,QAAAA,QAAAA,EAAUhB,KAAKgB,QAAQ;QACvBC,UAAAA,EAAY;YACVC,KAAAA,EAAO;AACL,gBAAA;AACEC,oBAAAA,MAAAA,CAAAA,CAAOC,IAAI,EAAA;AACT,wBAAA,OACE,CAACC,6BAAAA,CAA8BC,QAAQ,CAACF,IAAAA,CAAKG,IAAI,CAACC,IAAI,CAAA,IACtD,CAACH,8BAA8BC,QAAQ,CAACF,IAAAA,CAAKK,KAAK,CAACD,IAAI,CAAA;AAE3D,oBAAA;AACF;AACD,aAAA;YACDE,QAAAA,EAAU;AACR,gBAAA;AACEP,oBAAAA,MAAAA,CAAAA,CAAOQ,MAAM,EAAA;AACX,wBAAA,OAAO,CAACN,6BAAAA,CAA8BC,QAAQ,CAACK,OAAOH,IAAI,CAAA;AAC5D,oBAAA;AACF;AACD;AACH;AACF,KAAA,CAAA;AAEAf,IAAAA,QAAAA,CAAOmB,WAAW,CAACC,YAAY,CAACC,gBAAAA,CAAiB,QAAA,EAAU9B,KAAK+B,OAAO,CAAA,CAAA;AAEvE,IAAA,MAAMC,QAAAA,GAAWvB,QAAAA,CAAOuB,QAAQ,CAACC,MAAM;IAEvC,MAAM,EAAEC,YAAY,EAAE,GAAGC,cAAAA,EAAAA;IAEzBH,QAAAA,CAASI,EAAE,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,EAAEC,KAAK,EAAEC,IAAI,EAAE,GAAA;QAC1CJ,YAAAA,CAAaG,KAAAA,EAAOC,MAAMC,KAAK,EAAA;AACjC,IAAA,CAAA,CAAA;IAEAP,QAAAA,CAASI,EAAE,CAAC,eAAA,EAAiB,CAAC,EAAEC,KAAK,EAAEC,IAAI,EAAE,GAAA;QAC3CJ,YAAAA,CAAaG,KAAAA,EAAOC,MAAME,OAAO,EAAA;AACnC,IAAA,CAAA,CAAA;IAEAR,QAAAA,CAASI,EAAE,CAAC,iBAAA,EAAmB,CAAC,EAAEC,KAAK,EAAEC,IAAI,EAAE,GAAA;AAC7CJ,QAAAA,YAAAA,CAAaG,KAAAA,EAAOC,IAAAA,CAAAA;AACtB,IAAA,CAAA,CAAA;IAEAN,QAAAA,CAASI,EAAE,CAAC,iBAAA,EAAmB,UAAA;AAC7BK,QAAAA,OAAAA,CAAQC,GAAG,CAAC,CAAC,kBAAkB,CAAC,CAAA;AAEhC,QAAA,MAAMvC,OAAOwC,SAAS,CAACC,IAAI,CAAC,wBAAwBC,2BAAAA,CAA4BpC,QAAAA,CAAAA,CAAAA;AAClF,IAAA,CAAA,CAAA;IAEA,IAAIqC,OAAAA;IACJ,IAAIC,OAAAA;IACJ,IAAI;;AAEFC,QAAAA,gBAAAA,CAAiB,IAAMC,aAAAA,CAAc;AAAExC,wBAAAA,QAAAA;AAAQN,gBAAAA;AAAO,aAAA,CAAA,CAAA;QAEtD2C,OAAAA,GAAU,MAAMrC,SAAOyC,QAAQ,EAAA;AAC/BH,QAAAA,OAAAA,GAAUD,OAAAA,CAAQvC,WAAW,EAAE4C,IAAAA,EAAMC,IAAAA,IAAQ,EAAA;AAC7C,QAAA,MAAMC,aAAAA,GAAgB,MAAMC,GAAAA,CAAGC,UAAU,CAACR,OAAAA,CAAAA;AAC1C,QAAA,IAAI,CAACM,aAAAA,EAAe;YAClB,MAAM,IAAI3C,MAAAA,CAAmB8C,MAAM,CAACC,2BAA2B,CAC7D,CAAC,yBAAyB,EAAEV,OAAAA,CAAQ,CAAC,CAAC,CAAA;AAE1C,QAAA;;AAGA,QAAA,MAAM5C,OAAOwC,SAAS,CAACC,IAAI,CAAC,yBAAyBC,2BAAAA,CAA4BpC,QAAAA,CAAAA,CAAAA;QAEjF,IAAI;YACF,MAAMiD,KAAAA,GAAQC,kBAAAA,CAAmBb,OAAAA,CAAQrC,MAAM,CAAA;YAC/CgC,OAAAA,CAAQC,GAAG,CAACgB,KAAAA,EAAOE,QAAAA,EAAAA,CAAAA;AACrB,QAAA,CAAA,CAAE,OAAOC,CAAAA,EAAG;AACVpB,YAAAA,OAAAA,CAAQqB,KAAK,CAAC,4DAAA,CAAA;AAChB,QAAA;QAEArB,OAAAA,CAAQC,GAAG,CAAC,CAAC,qBAAqB,EAAEqB,KAAAA,CAAMC,KAAK,CAACjB,OAAAA,CAAAA,CAAAA,CAAU,CAAA;AAC1D7C,QAAAA,QAAAA,CAAS,GAAG+D,eAAAA,CAAgB,QAAA,CAAA,CAAA;AAC9B,IAAA,CAAA,CAAE,OAAM;AACN,QAAA,MAAM9D,OAAOwC,SAAS,CAACC,IAAI,CAAC,uBAAuBC,2BAAAA,CAA4BpC,QAAAA,CAAAA,CAAAA;QAC/EP,QAAAA,CAAS,CAAA,EAAG+D,gBAAgB,QAAA,EAAU,IAAA,CAAA,CAAA;AACxC,IAAA;AACF,CAAA;AAEA;;IAGA,MAAM3D,uBAAuB,CAACH,MAAAA,GAAAA;AAC5B,IAAA,OAAON,+BAAAA,CAAgC;QACrC,MAAMqE,SAAAA,CAAAA,GAAAA;YACJ,OAAO/D,MAAAA;AACT,QAAA;AACF,KAAA,CAAA;AACF,CAAA;AAEA;;IAGA,MAAMK,4BAA4B,CAACR,IAAAA,GAAAA;IACjC,MAAM,EAAEmD,IAAI,EAAEgB,QAAQ,EAAEC,OAAO,EAAEC,GAAG,EAAEC,YAAY,EAAE,GAAGtE,IAAAA;AAEvD,IAAA,MAAMuE,WAAWC,QAAAA,CAASrB,IAAAA,CAAAA,IAASA,KAAKsB,MAAM,GAAG,IAAItB,IAAAA,GAAOuB,oBAAAA,EAAAA;AAE5D,IAAA,MAAMC,mBAAmBC,QAAAA,CAASC,QAAAA,CAASP,YAAAA,CAAAA,CAAAA,GACvCO,QAAAA,CAASP,gBAAgBvE,WAAAA,GACzB+E,SAAAA;AAEJ,IAAA,OAAOnF,kCAAAA,CAAmC;QACxCwD,IAAAA,EAAM;YACJC,IAAAA,EAAMmB,QAAAA;YACND,YAAAA,EAAcK;AAChB,SAAA;QACAI,UAAAA,EAAY;AACVC,YAAAA,OAAAA,EAASZ,OAAAA,IAAW,KAAA;AACpBC,YAAAA,GAAAA,EAAKD,UAAUC,GAAAA,GAAMS;AACvB,SAAA;QACAG,WAAAA,EAAa;AACXD,YAAAA,OAAAA,EAASb,QAAAA,IAAY;AACvB;AACF,KAAA,CAAA;AACF,CAAA;;;;"}