{"version":3,"file":"action.mjs","sources":["../../../../../src/cli/commands/import/action.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\nimport { isObject } from 'lodash/fp';\nimport chalk from 'chalk';\n\nimport fs from 'fs-extra';\n\nimport {\n  engine as engineDataTransfer,\n  strapi as strapiDataTransfer,\n  file as fileDataTransfer,\n  directory as directoryDataTransfer,\n} from '@strapi/data-transfer';\n\nimport {\n  buildTransferTable,\n  createStrapiInstance,\n  formatDiagnostic,\n  loadersFactory,\n  exitMessageText,\n  abortTransfer,\n  getTransferTelemetryPayload,\n  setSignalHandler,\n  getDiffHandler,\n  parseRestoreFromOptions,\n  buildTransferTransforms,\n  normalizeTransferFilterOptions,\n  validateContentTypeTransferOptionsForStrapi,\n  logTransferFilterSummary,\n} from '../../utils/data-transfer';\nimport { exitWith } from '../../utils/helpers';\n\nconst {\n  providers: { createLocalFileSourceProvider },\n} = fileDataTransfer;\n\nconst {\n  providers: { createLocalStrapiDestinationProvider, DEFAULT_CONFLICT_STRATEGY },\n} = strapiDataTransfer;\n\nconst { createTransferEngine, DEFAULT_VERSION_STRATEGY, DEFAULT_SCHEMA_STRATEGY } =\n  engineDataTransfer;\n\ninterface CmdOptions {\n  file?: string;\n  decompress?: boolean;\n  decrypt?: boolean;\n  verbose?: boolean;\n  key?: string;\n  conflictStrategy?: 'restore';\n  force?: boolean;\n  only?: (keyof engineDataTransfer.TransferGroupFilter)[];\n  exclude?: (keyof engineDataTransfer.TransferGroupFilter)[];\n  excludeContentTypes?: string[];\n  onlyContentTypes?: string[];\n  filesAutoExcluded?: boolean;\n  throttle?: number;\n}\n\ntype EngineOptions = Parameters<typeof createTransferEngine>[2];\n\n/**\n * Import command.\n *\n * It transfers data from a Strapi backup file or unpacked export directory to a local Strapi instance\n */\nexport default async (opts: CmdOptions) => {\n  // validate inputs from Commander\n  if (!isObject(opts)) {\n    exitWith(1, 'Could not parse arguments');\n  }\n\n  normalizeTransferFilterOptions(opts);\n\n  const backupPath = opts.file ?? '';\n  const source = (await fs.stat(backupPath)).isDirectory()\n    ? directoryDataTransfer.providers.createLocalDirectorySourceProvider({\n        directory: { path: backupPath },\n      })\n    : createLocalFileSourceProvider(getLocalFileSourceOptions(opts));\n\n  /**\n   * To local Strapi instance\n   */\n  const strapiInstance = await createStrapiInstance();\n  validateContentTypeTransferOptionsForStrapi(opts, strapiInstance);\n\n  /**\n   * Configure and run the transfer engine\n   */\n  const engineOptions: EngineOptions = {\n    versionStrategy: DEFAULT_VERSION_STRATEGY,\n    schemaStrategy: DEFAULT_SCHEMA_STRATEGY,\n    exclude: opts.exclude,\n    only: opts.only,\n    throttle: opts.throttle,\n    transforms: buildTransferTransforms(opts),\n  };\n\n  const destinationOptions = {\n    async getStrapi() {\n      return strapiInstance;\n    },\n    autoDestroy: false,\n    strategy: opts.conflictStrategy || DEFAULT_CONFLICT_STRATEGY,\n    restore: parseRestoreFromOptions(opts, strapiInstance),\n  };\n\n  const destination = createLocalStrapiDestinationProvider(destinationOptions);\n  destination.onWarning = (message) => console.warn(`\\n${chalk.yellow('warn')}: ${message}`);\n\n  const engine = createTransferEngine(source, destination, engineOptions);\n\n  engine.diagnostics.onDiagnostic(formatDiagnostic('import', opts.verbose));\n\n  const progress = engine.progress.stream;\n\n  const { updateLoader } = loadersFactory();\n\n  engine.onSchemaDiff(getDiffHandler(engine, { force: opts.force, action: 'import' }));\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 import...');\n    logTransferFilterSummary({\n      exclude: opts.exclude,\n      only: opts.only,\n      excludeContentTypes: opts.excludeContentTypes,\n      onlyContentTypes: opts.onlyContentTypes,\n      filesAutoExcluded: opts.filesAutoExcluded,\n    });\n    await strapiInstance.telemetry.send(\n      'didDEITSProcessStart',\n      getTransferTelemetryPayload(engine)\n    );\n  });\n\n  let results: engineDataTransfer.ITransferResults<typeof source, typeof destination>;\n  try {\n    // Abort transfer if user interrupts process\n    setSignalHandler(() => abortTransfer({ engine, strapi: strapi as Core.Strapi }));\n\n    results = await engine.transfer();\n\n    try {\n      const table = buildTransferTable(results.engine);\n      console.log(table?.toString());\n    } catch {\n      console.error('There was an error displaying the results of the transfer.');\n    }\n\n    // Note: we need to await telemetry or else the process ends before it is sent\n    await strapiInstance.telemetry.send(\n      'didDEITSProcessFinish',\n      getTransferTelemetryPayload(engine)\n    );\n    await strapiInstance.destroy();\n\n    exitWith(0, exitMessageText('import'));\n  } catch {\n    await strapiInstance.telemetry.send('didDEITSProcessFail', getTransferTelemetryPayload(engine));\n    exitWith(1, exitMessageText('import', true));\n  }\n};\n\n/**\n * Infer local file source provider options based on a given filename\n */\nconst getLocalFileSourceOptions = (opts: {\n  file?: string;\n  decompress?: boolean;\n  decrypt?: boolean;\n  key?: string;\n}) => {\n  const options: fileDataTransfer.providers.ILocalFileSourceProviderOptions = {\n    file: { path: opts.file ?? '' },\n    compression: { enabled: !!opts.decompress },\n    encryption: { enabled: !!opts.decrypt, key: opts.key },\n  };\n\n  return options;\n};\n"],"names":["providers","createLocalFileSourceProvider","fileDataTransfer","createLocalStrapiDestinationProvider","DEFAULT_CONFLICT_STRATEGY","strapiDataTransfer","createTransferEngine","DEFAULT_VERSION_STRATEGY","DEFAULT_SCHEMA_STRATEGY","engineDataTransfer","opts","isObject","exitWith","normalizeTransferFilterOptions","backupPath","file","source","fs","stat","isDirectory","directoryDataTransfer","createLocalDirectorySourceProvider","directory","path","getLocalFileSourceOptions","strapiInstance","createStrapiInstance","validateContentTypeTransferOptionsForStrapi","engineOptions","versionStrategy","schemaStrategy","exclude","only","throttle","transforms","buildTransferTransforms","destinationOptions","getStrapi","autoDestroy","strategy","conflictStrategy","restore","parseRestoreFromOptions","destination","onWarning","message","console","warn","chalk","yellow","engine","diagnostics","onDiagnostic","formatDiagnostic","verbose","progress","stream","updateLoader","loadersFactory","onSchemaDiff","getDiffHandler","force","action","on","stage","data","start","succeed","log","logTransferFilterSummary","excludeContentTypes","onlyContentTypes","filesAutoExcluded","telemetry","send","getTransferTelemetryPayload","results","setSignalHandler","abortTransfer","strapi","transfer","table","buildTransferTable","toString","error","destroy","exitMessageText","options","compression","enabled","decompress","encryption","decrypt","key"],"mappings":"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"}