{"version":3,"file":"data-transfer.mjs","sources":["../../../../src/cli/utils/data-transfer.ts"],"sourcesContent":["import chalk from 'chalk';\nimport path from 'node:path';\nimport Table from 'cli-table3';\nimport { Command, Option } from 'commander';\nimport { configs, createLogger, type winston, formats } from '@strapi/logger';\nimport { createStrapi, compileStrapi } from '@strapi/core';\nimport ora from 'ora';\nimport { merge } from 'lodash/fp';\nimport type { Core } from '@strapi/types';\nimport { engine as engineDataTransfer, strapi as strapiDataTransfer } from '@strapi/data-transfer';\n\nimport {\n  readableBytes,\n  formatElapsedAndMaybeRemainingLabel,\n  TRANSFER_PROGRESS_FIELD_SEP,\n  exitWith,\n} from './helpers';\nimport { getParseListWithChoices, parseInteger, parseList, confirmMessage } from './commander';\n\nconst {\n  errors: { TransferEngineInitializationError },\n} = engineDataTransfer;\n\nconst exitMessageText = (process: string, error = false) => {\n  const processCapitalized = process[0].toUpperCase() + process.slice(1);\n\n  if (!error) {\n    return chalk.bold(\n      chalk.green(`${processCapitalized} process has been completed successfully!`)\n    );\n  }\n\n  return chalk.bold(chalk.red(`${processCapitalized} process failed.`));\n};\n\nconst pad = (n: number) => {\n  return (n < 10 ? '0' : '') + String(n);\n};\n\nconst yyyymmddHHMMSS = () => {\n  const date = new Date();\n\n  return (\n    date.getFullYear() +\n    pad(date.getMonth() + 1) +\n    pad(date.getDate()) +\n    pad(date.getHours()) +\n    pad(date.getMinutes()) +\n    pad(date.getSeconds())\n  );\n};\n\nconst getDefaultExportName = () => {\n  return `export_${yyyymmddHHMMSS()}`;\n};\n\ntype ResultData = engineDataTransfer.ITransferResults<\n  engineDataTransfer.ISourceProvider,\n  engineDataTransfer.IDestinationProvider\n>['engine'];\n\nconst buildTransferTable = (resultData: ResultData) => {\n  if (!resultData) {\n    return;\n  }\n\n  // Build pretty table\n  const table = new Table({\n    head: ['Type', 'Count', 'Size'].map((text) => chalk.bold.blue(text)),\n  });\n\n  let totalBytes = 0;\n  let totalItems = 0;\n  (Object.keys(resultData) as engineDataTransfer.TransferStage[]).forEach((stage) => {\n    const item = resultData[stage];\n\n    if (!item) {\n      return;\n    }\n\n    table.push([\n      { hAlign: 'left', content: chalk.bold(stage) },\n      { hAlign: 'right', content: item.count },\n      { hAlign: 'right', content: `${readableBytes(item.bytes, 1, 11)} ` },\n    ]);\n    totalBytes += item.bytes;\n    totalItems += item.count;\n\n    if (item.aggregates) {\n      (Object.keys(item.aggregates) as (keyof typeof item.aggregates)[])\n        .sort()\n        .forEach((subkey) => {\n          if (!item.aggregates) {\n            return;\n          }\n\n          const subitem = item.aggregates[subkey];\n\n          table.push([\n            { hAlign: 'left', content: `-- ${chalk.bold.grey(subkey)}` },\n            { hAlign: 'right', content: chalk.grey(subitem.count) },\n            { hAlign: 'right', content: chalk.grey(`(${readableBytes(subitem.bytes, 1, 11)})`) },\n          ]);\n        });\n    }\n  });\n  table.push([\n    { hAlign: 'left', content: chalk.bold.green('Total') },\n    { hAlign: 'right', content: chalk.bold.green(totalItems) },\n    { hAlign: 'right', content: `${chalk.bold.green(readableBytes(totalBytes, 1, 11))} ` },\n  ]);\n\n  return table;\n};\n\nconst IGNORED_CONTENT_TYPE_PREFIXES = ['admin::'];\n\nconst IGNORED_CONTENT_TYPES = [\n  'plugin::content-releases.release',\n  'plugin::content-releases.release-action',\n];\n\n/** Media library content types — common target for `--exclude-content-types` (see issue #25008). */\nconst UPLOAD_CONTENT_TYPE_UIDS = ['plugin::upload.file', 'plugin::upload.folder'] as const;\n\nconst isIgnoredContentType = (type: string) =>\n  IGNORED_CONTENT_TYPE_PREFIXES.some((prefix) => type.startsWith(prefix)) ||\n  IGNORED_CONTENT_TYPES.includes(type);\n\nconst abortTransfer = async ({\n  engine,\n  strapi,\n}: {\n  engine: engineDataTransfer.TransferEngine;\n  strapi: Core.Strapi;\n}) => {\n  try {\n    await engine.abortTransfer();\n    await strapi.destroy();\n  } catch {\n    // ignore because there's not much else we can do\n    return false;\n  }\n  return true;\n};\n\nconst setSignalHandler = async (\n  handler: (...args: unknown[]) => void,\n  signals = ['SIGINT', 'SIGTERM', 'SIGQUIT']\n) => {\n  signals.forEach((signal) => {\n    // We specifically remove ALL listeners because we have to clear the one added in Strapi bootstrap that has a process.exit\n    // TODO: Ideally Strapi bootstrap would not add that listener, and then this could be more flexible and add/remove only what it needs to\n    process.removeAllListeners(signal);\n    process.on(signal, handler);\n  });\n};\n\nconst createStrapiInstance = async (opts: { logLevel?: string } = {}): Promise<Core.Strapi> => {\n  try {\n    const appContext = await compileStrapi();\n    const app = createStrapi({ ...opts, ...appContext });\n\n    app.log.level = opts.logLevel || 'error';\n    return await app.load();\n  } catch (error) {\n    if (error instanceof Error && 'code' in error && error.code === 'ECONNREFUSED') {\n      throw new Error('Process failed. Check the database connection with your Strapi project.');\n    }\n\n    throw error;\n  }\n};\n\nconst transferDataTypes = Object.keys(engineDataTransfer.TransferGroupPresets);\n\nconst MEDIA_LIBRARY_PRESET = 'media-library';\n\nconst TRANSFER_FILTER_PRESET_DESCRIPTIONS: Record<\n  engineDataTransfer.TransferFilterPreset | typeof MEDIA_LIBRARY_PRESET,\n  string\n> = {\n  content: 'entities and links (incl. media library DB records)',\n  files: 'upload binaries in public/uploads (not media library DB records)',\n  config: 'core store and webhooks',\n  [MEDIA_LIBRARY_PRESET]:\n    'upload binaries and media library DB records (files + plugin::upload.file, plugin::upload.folder)',\n};\n\nconst transferExcludePresetChoices = [...transferDataTypes, MEDIA_LIBRARY_PRESET];\n\nconst formatTransferPresetHelp = (types: string[]) =>\n  types\n    .map(\n      (type) =>\n        `${type} (${TRANSFER_FILTER_PRESET_DESCRIPTIONS[type as keyof typeof TRANSFER_FILTER_PRESET_DESCRIPTIONS]})`\n    )\n    .join('; ');\n\nconst transferExcludePresetsHelp = formatTransferPresetHelp(transferExcludePresetChoices);\nconst transferOnlyPresetsHelp = formatTransferPresetHelp(transferDataTypes);\n\nconst throttleOption = new Option(\n  '--throttle <delay after each entity>',\n  `Add a delay in milliseconds between each transferred entity`\n)\n  .argParser(parseInteger)\n  .hideHelp(); // This option is not publicly documented\n\nconst excludeOption = new Option(\n  '--exclude <comma-separated data types>',\n  `Exclude data: ${transferExcludePresetsHelp}`\n).argParser(getParseListWithChoices(transferExcludePresetChoices, 'Invalid options for \"exclude\"'));\n\nconst onlyOption = new Option(\n  '--only <command-separated data types>',\n  `Include only these types (plus schemas): ${transferOnlyPresetsHelp}`\n).argParser(getParseListWithChoices(transferDataTypes, 'Invalid options for \"only\"'));\n\nconst excludeContentTypesOption = new Option(\n  '--exclude-content-types <comma-separated UIDs>',\n  `Exclude content types from entities and links (e.g. ${UPLOAD_CONTENT_TYPE_UIDS.join(',')} to omit the media library; or use --exclude media-library to skip binaries and upload records — see issue #25008)`\n).argParser(parseList);\n\nconst onlyContentTypesOption = new Option(\n  '--only-content-types <comma-separated UIDs>',\n  'Transfer only these content types in entities and links (e.g. api::article.article)'\n).argParser(parseList);\n\ntype ContentTypeTransferOptions = {\n  excludeContentTypes?: string[];\n  onlyContentTypes?: string[];\n};\n\ntype TransferExcludePreset = engineDataTransfer.TransferFilterPreset | typeof MEDIA_LIBRARY_PRESET;\n\ntype TransferCliFilterOptions = Partial<\n  Omit<engineDataTransfer.ITransferEngineOptions, 'exclude' | 'only'>\n> & {\n  exclude?: TransferExcludePreset[];\n  only?: engineDataTransfer.TransferFilterPreset[];\n} & ContentTypeTransferOptions & {\n    /** Set when the files stage is auto-skipped because upload types are out of scope. */\n    filesAutoExcluded?: boolean;\n  };\n\nconst validateExcludeOnly = (command: Command) => {\n  const { exclude, only } = command.opts();\n  if (!only || !exclude) {\n    return;\n  }\n\n  const choicesInBoth = only.filter((n: string) => {\n    return exclude.indexOf(n) !== -1;\n  });\n  if (choicesInBoth.length > 0) {\n    exitWith(\n      1,\n      `Data types may not be used in both \"exclude\" and \"only\" in the same command. Found in both: ${choicesInBoth.join(\n        ','\n      )}`\n    );\n  }\n};\n\nconst validateContentTypeTransferOptions = (command: Command) => {\n  const { excludeContentTypes, onlyContentTypes } = command.opts();\n\n  if (!excludeContentTypes?.length || !onlyContentTypes?.length) {\n    return;\n  }\n\n  const overlap = excludeContentTypes.filter((uid: string) => onlyContentTypes.includes(uid));\n  if (overlap.length > 0) {\n    exitWith(\n      1,\n      `Content types may not be used in both \"--exclude-content-types\" and \"--only-content-types\". Found in both: ${overlap.join(\n        ','\n      )}`\n    );\n  }\n};\n\nconst assertKnownContentTypes = (uids: string[], strapi: Core.Strapi, flag: string) => {\n  const known = new Set(Object.keys(strapi.contentTypes));\n  const unknown = uids.filter((uid) => !known.has(uid));\n\n  if (unknown.length > 0) {\n    exitWith(1, `Unknown content type(s) for ${flag}: ${unknown.join(', ')}`);\n  }\n};\n\nconst validateContentTypeTransferOptionsForStrapi = (\n  opts: ContentTypeTransferOptions,\n  strapi: Core.Strapi\n) => {\n  if (opts.excludeContentTypes?.length) {\n    assertKnownContentTypes(opts.excludeContentTypes, strapi, '--exclude-content-types');\n  }\n\n  if (opts.onlyContentTypes?.length) {\n    assertKnownContentTypes(opts.onlyContentTypes, strapi, '--only-content-types');\n  }\n};\n\nconst shouldIncludeContentTypeInTransfer = (\n  uid: string,\n  opts: TransferCliFilterOptions\n): boolean => {\n  if (isIgnoredContentType(uid)) {\n    return false;\n  }\n\n  if (opts.excludeContentTypes?.includes(uid)) {\n    return false;\n  }\n\n  if (opts.onlyContentTypes?.length) {\n    return opts.onlyContentTypes.includes(uid);\n  }\n\n  return true;\n};\n\nconst createEntityFilter = (opts: TransferCliFilterOptions) => {\n  return (entity: { type: string }) => shouldIncludeContentTypeInTransfer(entity.type, opts);\n};\n\nconst createLinkFilter = (opts: TransferCliFilterOptions) => {\n  return (link: { left: { type: string }; right: { type: string } }) =>\n    shouldIncludeContentTypeInTransfer(link.left.type, opts) &&\n    shouldIncludeContentTypeInTransfer(link.right.type, opts);\n};\n\nconst buildTransferTransforms = (opts: TransferCliFilterOptions) => ({\n  links: [{ filter: createLinkFilter(opts) }],\n  entities: [{ filter: createEntityFilter(opts) }],\n});\n\nconst errorColors = {\n  fatal: chalk.red,\n  error: chalk.red,\n  silly: chalk.yellow,\n} as const;\n\nconst formatDiagnostic = (\n  operation: string,\n  verbose?: boolean\n): Parameters<engineDataTransfer.TransferEngine['diagnostics']['onDiagnostic']>[0] => {\n  let logger: undefined | winston.Logger;\n  let logFileBasename: string | undefined;\n\n  const getLogger = () => {\n    if (!logger) {\n      logFileBasename = `${operation}_${Date.now()}.log`;\n      const absoluteLogPath = path.resolve(process.cwd(), logFileBasename);\n\n      logger = createLogger(\n        configs.createOutputFileConfiguration(\n          logFileBasename,\n          {\n            level: 'info',\n            format: formats?.detailedLogs,\n          },\n          {\n            consoleLevel: verbose ? 'info' : 'warn',\n          }\n        )\n      );\n\n      logger.info(\n        `[${operation}] Diagnostic log file: ${absoluteLogPath} (info-level messages are written here even without --verbose)`\n      );\n    }\n    return logger;\n  };\n\n  return ({ details, kind }) => {\n    try {\n      if (kind === 'error') {\n        const { message, severity = 'fatal' } = details;\n\n        const colorizeError = errorColors[severity];\n        const errorMessage = colorizeError(`[${severity.toUpperCase()}] ${message}`);\n\n        getLogger().error(errorMessage);\n      }\n      if (kind === 'info') {\n        const { message, params, origin } = details;\n\n        const msg = `[${origin ?? 'transfer'}] ${message}\\n${params ? JSON.stringify(params, null, 2) : ''}`;\n\n        getLogger().info(msg);\n      }\n      if (kind === 'warning') {\n        const { origin, message } = details;\n\n        getLogger().warn(`(${origin ?? 'transfer'}) ${message}`);\n      }\n    } catch (err) {\n      getLogger().error(err);\n    }\n  };\n};\n\ntype Loaders = {\n  [key in engineDataTransfer.TransferStage]: ora.Ora;\n};\n\ntype Data = {\n  [key in engineDataTransfer.TransferStage]?: {\n    startTime?: number;\n    endTime?: number;\n    bytes?: number;\n    count?: number;\n    totalBytes?: number;\n    totalCount?: number;\n  };\n};\n\n/** Stages where throughput is dominated by DB work; items/s is more meaningful than JSON byte rate. */\nconst STAGES_WITH_ITEM_THROUGHPUT = new Set<engineDataTransfer.TransferStage>([\n  'entities',\n  'links',\n]);\n\nconst MAX_ETA_MS = 86_400_000;\n\n/**\n * Linear ETA from completed amount vs total, using average rate so far (done / elapsedMs).\n * Returns null when progress or totals are not usable yet.\n */\nconst estimateEtaMs = (elapsedMs: number, done: number, total: number): number | null => {\n  if (elapsedMs < 500 || done <= 0 || total <= 0 || done >= total) {\n    return null;\n  }\n  const ratePerMs = done / elapsedMs;\n  const remaining = total - done;\n  const etaMs = remaining / ratePerMs;\n  if (!Number.isFinite(etaMs) || etaMs <= 0 || etaMs >= MAX_ETA_MS) {\n    return null;\n  }\n  return etaMs;\n};\n\nconst loadersFactory = (defaultLoaders: Loaders = {} as Loaders) => {\n  const loaders = defaultLoaders;\n  const updateLoader = (stage: engineDataTransfer.TransferStage, data: Data) => {\n    if (!(stage in loaders)) {\n      createLoader(stage);\n    }\n\n    const stageData = data[stage];\n    const elapsedTime = stageData?.startTime\n      ? (stageData?.endTime || Date.now()) - stageData.startTime\n      : 0;\n    const bytes = stageData?.bytes ?? 0;\n    const count = stageData?.count ?? 0;\n    const totalBytes = stageData?.totalBytes;\n    const totalCount = stageData?.totalCount;\n\n    const countLabel =\n      totalCount != null && totalCount > 0 ? `${count} / ${totalCount}` : String(count);\n    const sizeCompact =\n      totalBytes != null && totalBytes > 0\n        ? `${readableBytes(bytes)} / ${readableBytes(totalBytes)}`\n        : readableBytes(bytes);\n\n    const parts: string[] = [`${stage}: ${countLabel} transferred`, sizeCompact];\n\n    if (elapsedTime > 0 && !stageData?.endTime) {\n      if (STAGES_WITH_ITEM_THROUGHPUT.has(stage)) {\n        const itemsPerSec = (count * 1000) / elapsedTime;\n        parts.push(`${itemsPerSec.toFixed(1)} items/s`);\n      } else {\n        parts.push(`${readableBytes((bytes * 1000) / elapsedTime)}/s`);\n      }\n    }\n\n    let etaMs: number | null = null;\n    if (!stageData?.endTime) {\n      if (STAGES_WITH_ITEM_THROUGHPUT.has(stage) && totalCount != null) {\n        etaMs = estimateEtaMs(elapsedTime, count, totalCount);\n      } else if (totalBytes != null) {\n        etaMs = estimateEtaMs(elapsedTime, bytes, totalBytes);\n      }\n    }\n    parts.push(formatElapsedAndMaybeRemainingLabel(elapsedTime ?? 0, etaMs));\n\n    loaders[stage].text = parts.join(TRANSFER_PROGRESS_FIELD_SEP);\n\n    return loaders[stage];\n  };\n\n  const createLoader = (stage: engineDataTransfer.TransferStage) => {\n    Object.assign(loaders, { [stage]: ora() });\n    return loaders[stage];\n  };\n\n  const getLoader = (stage: engineDataTransfer.TransferStage) => {\n    return loaders[stage];\n  };\n\n  return {\n    updateLoader,\n    createLoader,\n    getLoader,\n  };\n};\n\n/**\n * Get the telemetry data to be sent for a didDEITSProcess* event from an initialized transfer engine object\n */\nconst getTransferTelemetryPayload = (engine: engineDataTransfer.TransferEngine) => {\n  return {\n    eventProperties: {\n      source: engine?.sourceProvider?.name,\n      destination: engine?.destinationProvider?.name,\n    },\n  };\n};\n\n/**\n * Get a transfer engine schema diff handler that confirms with the user before bypassing a schema check\n */\nconst getDiffHandler = (\n  engine: engineDataTransfer.TransferEngine,\n  {\n    force,\n    action,\n  }: {\n    force?: boolean;\n    action: string;\n  }\n) => {\n  return async (\n    context: engineDataTransfer.SchemaDiffHandlerContext,\n    next: (ctx: engineDataTransfer.SchemaDiffHandlerContext) => void\n  ) => {\n    // if we abort here, we need to actually exit the process because of conflict with inquirer prompt\n    setSignalHandler(async () => {\n      await abortTransfer({ engine, strapi: strapi as Core.Strapi });\n      exitWith(1, exitMessageText(action, true));\n    });\n\n    let workflowsStatus;\n    const source = 'Schema Integrity';\n\n    Object.entries(context.diffs).forEach(([uid, diffs]) => {\n      for (const diff of diffs) {\n        const path = [uid].concat(diff.path).join('.');\n        const endPath = diff.path[diff.path.length - 1];\n\n        // Catch known features\n        if (\n          uid === 'plugin::review-workflows.workflow' ||\n          uid === 'plugin::review-workflows.workflow-stage' ||\n          endPath?.startsWith('strapi_stage') ||\n          endPath?.startsWith('strapi_assignee')\n        ) {\n          workflowsStatus = diff.kind;\n        }\n        // handle generic cases\n        else if (diff.kind === 'added') {\n          engine.reportWarning(chalk.red(`${chalk.bold(path)} does not exist on source`), source);\n        } else if (diff.kind === 'deleted') {\n          engine.reportWarning(\n            chalk.red(`${chalk.bold(path)} does not exist on destination`),\n            source\n          );\n        } else if (diff.kind === 'modified') {\n          engine.reportWarning(chalk.red(`${chalk.bold(path)} has a different data type`), source);\n        }\n      }\n    });\n\n    // output the known feature warnings\n    if (workflowsStatus === 'added') {\n      engine.reportWarning(chalk.red(`Review workflows feature does not exist on source`), source);\n    } else if (workflowsStatus === 'deleted') {\n      engine.reportWarning(\n        chalk.red(`Review workflows feature does not exist on destination`),\n        source\n      );\n    } else if (workflowsStatus === 'modified') {\n      engine.panic(\n        new TransferEngineInitializationError('Unresolved differences in schema [review workflows]')\n      );\n    }\n\n    const confirmed = await confirmMessage(\n      'There are differences in schema between the source and destination, and the data listed above will be lost. Are you sure you want to continue?',\n      {\n        force,\n      }\n    );\n\n    // reset handler back to normal\n    setSignalHandler(() => abortTransfer({ engine, strapi: strapi as Core.Strapi }));\n\n    if (confirmed) {\n      context.ignoredDiffs = merge(context.diffs, context.ignoredDiffs);\n    }\n\n    return next(context);\n  };\n};\n\nconst getAssetsBackupHandler = (\n  engine: engineDataTransfer.TransferEngine,\n  {\n    force,\n    action,\n  }: {\n    force?: boolean;\n    action: string;\n  }\n) => {\n  return async (\n    context: engineDataTransfer.ErrorHandlerContext,\n    next: (ctx: engineDataTransfer.ErrorHandlerContext) => void\n  ) => {\n    // if we abort here, we need to actually exit the process because of conflict with inquirer prompt\n    setSignalHandler(async () => {\n      await abortTransfer({ engine, strapi: strapi as Core.Strapi });\n      exitWith(1, exitMessageText(action, true));\n    });\n\n    console.warn(\n      'The backup for the assets could not be created inside the public directory. Ensure Strapi has write permissions on the public directory.'\n    );\n    const confirmed = await confirmMessage(\n      'Do you want to continue without backing up your public/uploads files?',\n      {\n        force,\n      }\n    );\n\n    if (confirmed) {\n      context.ignore = true;\n    }\n\n    // reset handler back to normal\n    setSignalHandler(() => abortTransfer({ engine, strapi: strapi as Core.Strapi }));\n    return next(context);\n  };\n};\n\nconst shouldSkipStage = (\n  opts: Pick<TransferCliFilterOptions, 'exclude' | 'only'>,\n  dataKind: engineDataTransfer.TransferFilterPreset\n) => {\n  if (opts.exclude?.includes(dataKind)) {\n    return true;\n  }\n  if (opts.only) {\n    return !opts.only.includes(dataKind);\n  }\n\n  return false;\n};\n\nconst areUploadContentTypesInTransferScope = (opts: TransferCliFilterOptions): boolean =>\n  UPLOAD_CONTENT_TYPE_UIDS.every((uid) => shouldIncludeContentTypeInTransfer(uid, opts));\n\nconst areAllUploadContentTypesOutOfTransferScope = (opts: TransferCliFilterOptions): boolean =>\n  UPLOAD_CONTENT_TYPE_UIDS.every((uid) => !shouldIncludeContentTypeInTransfer(uid, opts));\n\nconst isContentStageActive = (opts: TransferCliFilterOptions): boolean =>\n  !shouldSkipStage(opts, 'content');\n\nconst expandMediaLibraryPreset = (opts: TransferCliFilterOptions) => {\n  if (!opts.exclude?.includes(MEDIA_LIBRARY_PRESET)) {\n    return;\n  }\n\n  const exclude = opts.exclude.filter(\n    (item) => item !== MEDIA_LIBRARY_PRESET\n  ) as engineDataTransfer.TransferFilterPreset[];\n\n  opts.exclude = exclude;\n\n  if (!opts.exclude.includes('files')) {\n    opts.exclude.push('files');\n  }\n\n  const excludeContentTypes = new Set(opts.excludeContentTypes ?? []);\n  for (const uid of UPLOAD_CONTENT_TYPE_UIDS) {\n    excludeContentTypes.add(uid);\n  }\n  opts.excludeContentTypes = [...excludeContentTypes];\n};\n\nconst autoExcludeFilesWhenUploadTypesOutOfScope = (opts: TransferCliFilterOptions) => {\n  if (\n    opts.filesAutoExcluded ||\n    !isContentStageActive(opts) ||\n    opts.only?.includes('files') ||\n    shouldSkipStage(opts, 'files') ||\n    !areAllUploadContentTypesOutOfTransferScope(opts)\n  ) {\n    return;\n  }\n\n  opts.exclude = [...(opts.exclude ?? []), 'files'] as engineDataTransfer.TransferFilterPreset[];\n  opts.filesAutoExcluded = true;\n};\n\nconst normalizeTransferFilterOptions = (opts: TransferCliFilterOptions) => {\n  expandMediaLibraryPreset(opts);\n  autoExcludeFilesWhenUploadTypesOutOfScope(opts);\n  return opts;\n};\n\nconst normalizeTransferFilterOptionsHook = (command: Command) => {\n  normalizeTransferFilterOptions(command.opts() as TransferCliFilterOptions);\n};\n\nconst logTransferFilterSummary = (opts: Partial<TransferCliFilterOptions>) => {\n  const { exclude, only, excludeContentTypes, onlyContentTypes } = opts;\n  if (\n    !exclude?.length &&\n    !only?.length &&\n    !excludeContentTypes?.length &&\n    !onlyContentTypes?.length\n  ) {\n    return;\n  }\n\n  const parts: string[] = [];\n  if (exclude?.length) {\n    parts.push(`excluding ${exclude.join(', ')}`);\n  }\n  if (only?.length) {\n    parts.push(`only ${only.join(', ')}`);\n  }\n\n  if (parts.length) {\n    console.log(chalk.dim(`Transfer filters: ${parts.join('; ')}.`));\n  }\n\n  const contentTypeParts: string[] = [];\n  if (excludeContentTypes?.length) {\n    contentTypeParts.push(`excluding ${excludeContentTypes.join(', ')}`);\n  }\n  if (onlyContentTypes?.length) {\n    contentTypeParts.push(`only ${onlyContentTypes.join(', ')}`);\n  }\n\n  if (contentTypeParts.length) {\n    console.log(chalk.dim(`Content type filters: ${contentTypeParts.join('; ')}.`));\n  }\n\n  if (opts.filesAutoExcluded) {\n    console.log(\n      chalk.dim(\n        'Skipping files stage: upload content types are not in transfer scope (plugin::upload.file, plugin::upload.folder).'\n      )\n    );\n  }\n\n  if (\n    shouldSkipStage(opts, 'files') &&\n    !shouldSkipStage(opts, 'content') &&\n    areUploadContentTypesInTransferScope(opts) &&\n    !opts.filesAutoExcluded\n  ) {\n    console.log(\n      chalk.dim(\n        'Note: Media library records (plugin::upload.file, plugin::upload.folder) are still transferred with the rest of your content (the entities stage). Sync upload binaries separately (e.g. rsync public/uploads).'\n      )\n    );\n  }\n};\n\ntype RestoreConfig = NonNullable<\n  strapiDataTransfer.providers.ILocalStrapiDestinationProviderOptions['restore']\n>;\n\n// Based on exclude/only from options, create the restore object to match\nconst parseRestoreFromOptions = (opts: TransferCliFilterOptions, strapi: Core.Strapi) => {\n  const entitiesOptions: RestoreConfig['entities'] = {\n    exclude: [\n      ...Object.keys(strapi.contentTypes).filter(isIgnoredContentType),\n      ...IGNORED_CONTENT_TYPES,\n      ...(opts.excludeContentTypes ?? []),\n    ],\n    include: undefined,\n  };\n\n  const contentInScope = !(\n    (opts.only && !opts.only.includes('content')) ||\n    opts.exclude?.includes('content')\n  );\n\n  if (!contentInScope) {\n    // Nothing from the entities stage is transferred; do not delete any records beforehand.\n    entitiesOptions.include = [];\n  } else if (opts.onlyContentTypes?.length) {\n    // Only wipe content types that are being replaced by this transfer.\n    entitiesOptions.include = opts.onlyContentTypes;\n  } else if (shouldSkipStage(opts, 'config')) {\n    // When config is excluded, scope pre-transfer deletion to user content types only.\n    // Internal models (e.g. strapi::core-store) must not be wiped via the entities path.\n    entitiesOptions.include = Object.keys(strapi.contentTypes).filter(\n      (uid) => !isIgnoredContentType(uid) && !opts.excludeContentTypes?.includes(uid)\n    );\n  }\n\n  const restoreConfig: strapiDataTransfer.providers.ILocalStrapiDestinationProviderOptions['restore'] =\n    {\n      entities: entitiesOptions,\n      assets: !shouldSkipStage(opts, 'files'),\n      configuration: {\n        webhook: !shouldSkipStage(opts, 'config'),\n        coreStore: !shouldSkipStage(opts, 'config'),\n      },\n    };\n\n  return restoreConfig;\n};\n\nexport {\n  loadersFactory,\n  buildTransferTable,\n  getDefaultExportName,\n  getTransferTelemetryPayload,\n  isIgnoredContentType,\n  createStrapiInstance,\n  excludeOption,\n  excludeContentTypesOption,\n  onlyContentTypesOption,\n  exitMessageText,\n  onlyOption,\n  throttleOption,\n  validateExcludeOnly,\n  validateContentTypeTransferOptions,\n  validateContentTypeTransferOptionsForStrapi,\n  normalizeTransferFilterOptions,\n  normalizeTransferFilterOptionsHook,\n  areUploadContentTypesInTransferScope,\n  areAllUploadContentTypesOutOfTransferScope,\n  buildTransferTransforms,\n  createEntityFilter,\n  createLinkFilter,\n  formatDiagnostic,\n  abortTransfer,\n  setSignalHandler,\n  getDiffHandler,\n  getAssetsBackupHandler,\n  shouldSkipStage,\n  parseRestoreFromOptions,\n  UPLOAD_CONTENT_TYPE_UIDS,\n  logTransferFilterSummary,\n};\n\nexport type { ContentTypeTransferOptions, TransferCliFilterOptions };\n"],"names":["errors","TransferEngineInitializationError","engineDataTransfer","exitMessageText","process","error","processCapitalized","toUpperCase","slice","chalk","bold","green","red","pad","n","String","yyyymmddHHMMSS","date","Date","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","getDefaultExportName","buildTransferTable","resultData","table","Table","head","map","text","blue","totalBytes","totalItems","Object","keys","forEach","stage","item","push","hAlign","content","count","readableBytes","bytes","aggregates","sort","subkey","subitem","grey","IGNORED_CONTENT_TYPE_PREFIXES","IGNORED_CONTENT_TYPES","UPLOAD_CONTENT_TYPE_UIDS","isIgnoredContentType","type","some","prefix","startsWith","includes","abortTransfer","engine","strapi","destroy","setSignalHandler","handler","signals","signal","removeAllListeners","on","createStrapiInstance","opts","appContext","compileStrapi","app","createStrapi","log","level","logLevel","load","Error","code","transferDataTypes","TransferGroupPresets","MEDIA_LIBRARY_PRESET","TRANSFER_FILTER_PRESET_DESCRIPTIONS","files","config","transferExcludePresetChoices","formatTransferPresetHelp","types","join","transferExcludePresetsHelp","transferOnlyPresetsHelp","throttleOption","Option","argParser","parseInteger","hideHelp","excludeOption","getParseListWithChoices","onlyOption","excludeContentTypesOption","parseList","onlyContentTypesOption","validateExcludeOnly","command","exclude","only","choicesInBoth","filter","indexOf","length","exitWith","validateContentTypeTransferOptions","excludeContentTypes","onlyContentTypes","overlap","uid","assertKnownContentTypes","uids","flag","known","Set","contentTypes","unknown","has","validateContentTypeTransferOptionsForStrapi","shouldIncludeContentTypeInTransfer","createEntityFilter","entity","createLinkFilter","link","left","right","buildTransferTransforms","links","entities","errorColors","fatal","silly","yellow","formatDiagnostic","operation","verbose","logger","logFileBasename","getLogger","now","absoluteLogPath","path","resolve","cwd","createLogger","configs","createOutputFileConfiguration","format","formats","detailedLogs","consoleLevel","info","details","kind","message","severity","colorizeError","errorMessage","params","origin","msg","JSON","stringify","warn","err","STAGES_WITH_ITEM_THROUGHPUT","MAX_ETA_MS","estimateEtaMs","elapsedMs","done","total","ratePerMs","remaining","etaMs","Number","isFinite","loadersFactory","defaultLoaders","loaders","updateLoader","data","createLoader","stageData","elapsedTime","startTime","endTime","totalCount","countLabel","sizeCompact","parts","itemsPerSec","toFixed","formatElapsedAndMaybeRemainingLabel","TRANSFER_PROGRESS_FIELD_SEP","assign","ora","getLoader","getTransferTelemetryPayload","eventProperties","source","sourceProvider","name","destination","destinationProvider","getDiffHandler","force","action","context","next","workflowsStatus","entries","diffs","diff","concat","endPath","reportWarning","panic","confirmed","confirmMessage","ignoredDiffs","merge","getAssetsBackupHandler","console","ignore","shouldSkipStage","dataKind","areUploadContentTypesInTransferScope","every","areAllUploadContentTypesOutOfTransferScope","isContentStageActive","expandMediaLibraryPreset","add","autoExcludeFilesWhenUploadTypesOutOfScope","filesAutoExcluded","normalizeTransferFilterOptions","normalizeTransferFilterOptionsHook","logTransferFilterSummary","dim","contentTypeParts","parseRestoreFromOptions","entitiesOptions","include","undefined","contentInScope","restoreConfig","assets","configuration","webhook","coreStore"],"mappings":"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"}