{"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 {\n  engine as engineDataTransfer,\n  strapi as strapiDataTransfer,\n  file as fileDataTransfer,\n} from '@strapi/data-transfer';\n\nimport {\n  buildTransferTable,\n  DEFAULT_IGNORED_CONTENT_TYPES,\n  createStrapiInstance,\n  formatDiagnostic,\n  loadersFactory,\n  exitMessageText,\n  abortTransfer,\n  getTransferTelemetryPayload,\n  setSignalHandler,\n  getDiffHandler,\n  parseRestoreFromOptions,\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  throttle?: number;\n}\n\ntype EngineOptions = Parameters<typeof createTransferEngine>[2];\n\n/**\n * Import command.\n *\n * It transfers data from a file 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  /**\n   * From strapi backup file\n   */\n  const sourceOptions = getLocalFileSourceOptions(opts);\n\n  const source = createLocalFileSourceProvider(sourceOptions);\n\n  /**\n   * To local Strapi instance\n   */\n  const strapiInstance = await createStrapiInstance();\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: {\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) => !DEFAULT_IGNORED_CONTENT_TYPES.includes(entity.type),\n        },\n      ],\n    },\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(engineOptions),\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    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 (e) {\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 (e) {\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","sourceOptions","getLocalFileSourceOptions","source","strapiInstance","createStrapiInstance","engineOptions","versionStrategy","schemaStrategy","exclude","only","throttle","transforms","links","filter","link","DEFAULT_IGNORED_CONTENT_TYPES","includes","left","type","right","entities","entity","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","telemetry","send","getTransferTelemetryPayload","results","setSignalHandler","abortTransfer","strapi","transfer","table","buildTransferTable","toString","e","error","destroy","exitMessageText","options","file","path","compression","enabled","decompress","encryption","decrypt","key"],"mappings":"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"}