{"version":3,"file":"5.0.0-discard-drafts.mjs","sources":["../../../src/migrations/database/5.0.0-discard-drafts.ts"],"sourcesContent":["/**\n * Migration overview\n * ===================\n * 1. Create bare draft rows for every published entry, cloning only scalar fields (no relations/components yet).\n *    We do this with a single INSERT … SELECT per content type to avoid touching the document service for every single v4 entry.\n *\n * 2. Rewire all relations so the newly created drafts behave exactly like calling `documentService.discardDraft()`\n *    on every published entry:\n *      - Join-table relations (self, manyToMany, etc.) are copied in bulk.\n *      - Foreign keys (joinColumn relations) are updated so draft rows point to draft targets.\n *      - Component relations are copied while respecting the discard logic: each draft gets its own component instance,\n *        and the component’s relations (including nested components) are remapped to draft targets.\n *\n * 3. Components are duplicated at the database layer (new component rows + join-table rows). We deliberately clone\n *    instead of sharing component IDs so that draft edits don’t mutate published data.\n *\n * Why we do it this way\n * ----------------------\n * • Efficiency: calling the document service per entry would issue several queries per relation/component. The SQL\n *   batches mirror the service’s behavior but execute in O(content types × batches), so the migration scales to\n *   millions of entries.\n\n * • Memory safety: any caches that track per-record information (component parent lookups, clone maps) are scoped to\n *   a single batch of 1,000 entries. Schema-level caches (component metadata, join table names) remain global because\n *   they’re tiny and reused.\n */\n\n/* eslint-disable no-continue */\nimport type { UID } from '@strapi/types';\nimport type { Database, Migration } from '@strapi/database';\nimport { createId } from '@paralleldrive/cuid2';\nimport { contentTypes } from '@strapi/utils';\nimport createDebug from 'debug';\nimport {\n  getComponentJoinTableName,\n  getComponentJoinColumnEntityName,\n  getComponentJoinColumnInverseName,\n  getComponentTypeColumn,\n  getDzJoinTableName,\n} from '../../utils/transform-content-types-to-models';\n\ntype DocumentVersion = { documentId: string; locale: string };\ntype Knex = Parameters<Migration['up']>[0];\n\ntype MetadataWithOptionalPrimaryKey = {\n  primaryKey?: string | { columnName?: string; name?: string };\n  attributes?: Record<string, unknown>;\n};\n\nconst resolveComponentMetadataUidCandidates = (componentUid: string) => {\n  if (componentUid.startsWith('component::')) {\n    return [componentUid, componentUid.slice('component::'.length)];\n  }\n\n  return [componentUid, `component::${componentUid}`];\n};\n\nconst getComponentMetadataByUid = (componentUid: string) => {\n  for (const candidate of resolveComponentMetadataUidCandidates(componentUid)) {\n    try {\n      const meta = strapi.db.metadata.get(candidate);\n      if (meta) {\n        return meta;\n      }\n    } catch {\n      continue;\n    }\n  }\n\n  return null;\n};\n\nconst DEFAULT_PRIMARY_KEY_COLUMN = 'id';\n\ntype AttributeWithPrimaryFlag = {\n  columnName?: string;\n  column?: {\n    primary?: boolean;\n  };\n};\n\n/**\n * Determines the primary-key column name for a schema, handling the various shapes\n * metadata can take (string, object, attribute flag) and defaulting to `id`.\n */\nconst resolvePrimaryKeyColumn = (meta: MetadataWithOptionalPrimaryKey): string => {\n  const { primaryKey } = meta;\n\n  if (typeof primaryKey === 'string' && primaryKey) {\n    return primaryKey;\n  }\n\n  if (primaryKey && typeof primaryKey === 'object') {\n    const pkObject = primaryKey as { columnName?: string; name?: string };\n\n    const columnName = pkObject.columnName;\n    if (typeof columnName === 'string' && columnName) {\n      return columnName;\n    }\n\n    const name = pkObject.name;\n    if (typeof name === 'string' && name) {\n      return name;\n    }\n  }\n\n  const attributes = meta.attributes ?? {};\n  for (const [attributeName, attribute] of Object.entries(attributes)) {\n    const normalizedAttribute = attribute as AttributeWithPrimaryFlag | undefined;\n\n    if (!normalizedAttribute) {\n      continue;\n    }\n\n    const { column } = normalizedAttribute;\n    if (column?.primary === true) {\n      if (typeof normalizedAttribute.columnName === 'string' && normalizedAttribute.columnName) {\n        return normalizedAttribute.columnName;\n      }\n\n      return attributeName;\n    }\n  }\n\n  return DEFAULT_PRIMARY_KEY_COLUMN;\n};\n\n/**\n * Check if the model has draft and publish enabled.\n */\nconst hasDraftAndPublish = async (trx: Knex, meta: any) => {\n  const hasTable = await trx.schema.hasTable(meta.tableName);\n\n  if (!hasTable) {\n    return false;\n  }\n\n  const uid = meta.uid as UID.ContentType;\n  const model = strapi.getModel(uid);\n  const hasDP = contentTypes.hasDraftAndPublish(model);\n  if (!hasDP) {\n    return false;\n  }\n\n  return true;\n};\n\n/**\n * Copy all the published entries to draft entries, without it's components, dynamic zones or relations.\n * This ensures all necessary draft's exist before copying it's relations.\n */\nasync function copyPublishedEntriesToDraft({\n  db,\n  trx,\n  uid,\n}: {\n  db: Database;\n  trx: Knex;\n  uid: string;\n}) {\n  // Extract all scalar attributes to use in the insert query\n  const meta = db.metadata.get(uid);\n\n  // Get scalar attributes that will be copied over the new draft\n  const scalarAttributes = Object.values(meta.attributes).reduce((acc, attribute: any) => {\n    if (['id'].includes(attribute.columnName)) {\n      return acc;\n    }\n\n    if (contentTypes.isScalarAttribute(attribute)) {\n      acc.push(attribute.columnName);\n    }\n\n    return acc;\n  }, [] as string[]);\n\n  /**\n   * Query to copy the published entries into draft entries.\n   *\n   * INSERT INTO tableName (columnName1, columnName2, columnName3, ...)\n   * SELECT columnName1, columnName2, columnName3, ...\n   * FROM tableName\n   */\n  await trx\n    // INSERT INTO tableName (columnName1, columnName2, columnName3, ...)\n    .into(\n      trx.raw(`?? (${scalarAttributes.map(() => `??`).join(', ')})`, [\n        meta.tableName,\n        ...scalarAttributes,\n      ])\n    )\n    .insert((subQb: typeof trx) => {\n      // SELECT columnName1, columnName2, columnName3, ...\n      subQb\n        .select(\n          ...scalarAttributes.map((att: string) => {\n            // NOTE: these literals reference Strapi's built-in system columns. They never get shortened by\n            // the identifier migration (5.0.0-01-convert-identifiers-long-than-max-length) so we can safely\n            // compare/use them directly here.\n            if (att === 'published_at') {\n              return trx.raw('NULL as ??', 'published_at');\n            }\n\n            return att;\n          })\n        )\n        .from(meta.tableName)\n        // Only select entries that were published\n        .whereNotNull('published_at');\n    });\n}\n\n/**\n * Orchestrates the relation cloning pipeline for a single content type. We duplicate\n * every category of relation (self, inbound, outbound, components) using direct SQL so\n * the migration can scale without calling `discardDraft` entry by entry.\n */\nasync function copyRelationsToDrafts({ db, trx, uid }: { db: Database; trx: Knex; uid: string }) {\n  const meta = db.metadata.get(uid);\n  if (!meta) {\n    return;\n  }\n\n  // Create mapping from published entry ID to draft entry ID\n  const publishedToDraftMap = await buildPublishedToDraftMap({ trx, uid, meta });\n\n  if (!publishedToDraftMap || publishedToDraftMap.size === 0) {\n    return;\n  }\n\n  // Copy relations for this content type\n  await copyRelationsForContentType({\n    trx,\n    uid,\n    publishedToDraftMap,\n  });\n\n  // Copy relations from other content types that target this content type\n  await copyRelationsFromOtherContentTypes({\n    trx,\n    uid,\n    publishedToDraftMap,\n  });\n\n  // Copy relations from this content type that target other content types (category 3)\n  await copyRelationsToOtherContentTypes({\n    trx,\n    uid,\n    publishedToDraftMap,\n  });\n\n  // Copy component relations from published entries to draft entries\n  await copyComponentRelations({\n    trx,\n    uid,\n    publishedToDraftMap,\n  });\n\n  // (1) Media: one shared table owned by upload plugin; we are the \"related\" side (related_id).\n  //    Copy rows so draft entity ids get the same file links as their published pair.\n  await copyMediaMorphToDraftsForContentType({ trx, uid, publishedToDraftMap });\n\n  // (2) Other morph: per-attribute tables where we are the \"source\" side (join column = our entity id).\n  //    Copy rows so draft entity ids get the same polymorphic links. Skips upload table by name.\n  await copySourceSideMorphRelationsForContentType({ trx, uid, publishedToDraftMap });\n}\n\n/**\n * Returns the upload plugin's morph join table info (e.g. files_related_morphs) if present.\n * This is the single table used by all media fields across content types and components.\n */\nfunction getUploadMorphTableInfo(): {\n  tableName: string;\n  joinColumnName: string;\n  relatedIdColumnName: string;\n  relatedTypeColumnName: string;\n} | null {\n  const fileMeta = strapi.db.metadata.get('plugin::upload.file');\n  if (!fileMeta?.attributes) {\n    return null;\n  }\n  const relatedAttr = (fileMeta.attributes as Record<string, any>).related;\n  const joinTable = relatedAttr?.joinTable;\n  const morphColumn = joinTable?.morphColumn ?? relatedAttr?.morphColumn;\n\n  if (!joinTable?.name || !joinTable?.joinColumn?.name || !morphColumn) {\n    return null;\n  }\n\n  return {\n    tableName: joinTable.name,\n    joinColumnName: joinTable.joinColumn.name,\n    relatedIdColumnName: morphColumn.idColumn.name,\n    relatedTypeColumnName: morphColumn.typeColumn.name,\n  };\n}\n\n/**\n * Unified morph copy: duplicate rows in a morph join table, rewriting one column from original ids to draft ids.\n * Used for both (1) media: upload table, we are \"related\" side, filter by related_type; (2) other morph: we are \"source\" side, no filter.\n * @param columnToRewrite - the column that holds our entity id (related_id in upload table, entity_id in source-side tables).\n * @param filter - optional: only copy rows where filter.column = filter.value (e.g. related_type = uid for media).\n */\nasync function copyMorphRowsByIdMap({\n  trx,\n  tableName,\n  columnToRewrite,\n  idMap,\n  filter,\n  contextReason,\n}: {\n  trx: Knex;\n  tableName: string;\n  columnToRewrite: string;\n  idMap: Map<number, number>;\n  filter?: { column: string; value: string };\n  contextReason: string;\n}) {\n  if (idMap.size === 0) return;\n  const hasTable = await ensureTableExists(trx, tableName);\n  if (!hasTable) return;\n  const originalIds = Array.from(idMap.keys());\n  const chunks = chunkArray(originalIds, getBatchSize(trx, 500));\n  for (const chunk of chunks) {\n    let q = trx(tableName).select('*').whereIn(columnToRewrite, chunk);\n    if (filter) {\n      q = q.where(filter.column, filter.value);\n    }\n    const rows = await q;\n    if (rows.length === 0) continue;\n    const toInsert: Array<Record<string, any>> = [];\n    for (const row of rows) {\n      const originalId = normalizeId(row[columnToRewrite]);\n      if (originalId == null) continue;\n      const newId = idMap.get(originalId);\n      if (newId == null) continue;\n      const { id, ...rest } = row;\n      toInsert.push({ ...rest, [columnToRewrite]: newId });\n    }\n    if (toInsert.length > 0) {\n      await insertRelationsWithDuplicateHandling({\n        trx,\n        tableName,\n        relations: toInsert,\n        context: { reason: contextReason, tableName },\n      });\n    }\n  }\n}\n\n/**\n * Same as copyMorphRowsByIdMap but for (originalId, draftId) pairs when one original can map to multiple drafts (e.g. cloned components).\n */\nasync function copyMorphRowsByPairs({\n  trx,\n  tableName,\n  columnToRewrite,\n  pairs,\n  filter,\n  contextReason,\n}: {\n  trx: Knex;\n  tableName: string;\n  columnToRewrite: string;\n  pairs: Array<{ originalId: number; draftId: number }>;\n  filter?: { column: string; value: string };\n  contextReason: string;\n}) {\n  if (pairs.length === 0) return;\n  const hasTable = await ensureTableExists(trx, tableName);\n  if (!hasTable) return;\n  const originalIds = [...new Set(pairs.map((p) => p.originalId))];\n  const chunks = chunkArray(originalIds, getBatchSize(trx, 500));\n  for (const chunk of chunks) {\n    let q = trx(tableName).select('*').whereIn(columnToRewrite, chunk);\n    if (filter) {\n      q = q.where(filter.column, filter.value);\n    }\n    const rows = await q;\n    if (rows.length === 0) continue;\n    const toInsert: Array<Record<string, any>> = [];\n    for (const row of rows) {\n      const originalId = normalizeId(row[columnToRewrite]);\n      if (originalId == null) continue;\n      const draftIds = pairs.filter((p) => p.originalId === originalId).map((p) => p.draftId);\n      for (const draftId of draftIds) {\n        const { id, ...rest } = row;\n        toInsert.push({ ...rest, [columnToRewrite]: draftId });\n      }\n    }\n    if (toInsert.length > 0) {\n      await insertRelationsWithDuplicateHandling({\n        trx,\n        tableName,\n        relations: toInsert,\n        context: { reason: contextReason, tableName },\n      });\n    }\n  }\n}\n\ntype ClonedComponentPairsCache = Map<string, Map<string, number>>;\n\nconst recordClonedComponentPair = (\n  clonedComponentPairsCache: ClonedComponentPairsCache | undefined,\n  componentUid: string,\n  originalId: number,\n  draftId: number\n) => {\n  if (!clonedComponentPairsCache) {\n    return;\n  }\n\n  let pairMap = clonedComponentPairsCache.get(componentUid);\n  if (!pairMap) {\n    pairMap = new Map();\n    clonedComponentPairsCache.set(componentUid, pairMap);\n  }\n\n  pairMap.set(`${originalId}:${draftId}`, draftId);\n};\n\n/** Copy media morph rows for this content type (upload table; we are the \"related\" side). */\nasync function copyMediaMorphToDraftsForContentType({\n  trx,\n  uid,\n  publishedToDraftMap,\n}: {\n  trx: Knex;\n  uid: string;\n  publishedToDraftMap: Map<number, number>;\n}) {\n  const morphInfo = getUploadMorphTableInfo();\n  if (!morphInfo) return;\n  await copyMorphRowsByIdMap({\n    trx,\n    tableName: morphInfo.tableName,\n    columnToRewrite: morphInfo.relatedIdColumnName,\n    idMap: publishedToDraftMap,\n    filter: {\n      column: morphInfo.relatedTypeColumnName,\n      value: uid,\n    },\n    contextReason: 'media-morph-draft',\n  });\n}\n\n/** Copy source-side morph rows for this content type (per-attribute tables; we are the \"source\" side). */\nasync function copySourceSideMorphRelationsForContentType({\n  trx,\n  uid,\n  publishedToDraftMap,\n}: {\n  trx: Knex;\n  uid: string;\n  publishedToDraftMap: Map<number, number>;\n}) {\n  const meta = strapi.db.metadata.get(uid);\n  if (!meta) return;\n  const uploadMorph = getUploadMorphTableInfo();\n  const uploadTableName = uploadMorph?.tableName ?? null;\n\n  for (const attribute of Object.values(meta.attributes) as any[]) {\n    if (attribute.type !== 'relation' || !attribute.joinTable?.morphColumn) continue;\n    const joinTable = attribute.joinTable;\n    if (joinTable.name === uploadTableName) continue;\n    // Dynamic zones are represented as morph relations in DB metadata, but their rows live in\n    // the shared component join table (`*_cmps`) and are already handled by copyComponentRelations.\n    if (joinTable.name.includes('_cmps')) continue;\n    const sourceColumnName = joinTable.joinColumn?.name;\n    if (!sourceColumnName) continue;\n\n    await copyMorphRowsByIdMap({\n      trx,\n      tableName: joinTable.name,\n      columnToRewrite: sourceColumnName,\n      idMap: publishedToDraftMap,\n      contextReason: 'source-side-morph-draft',\n    });\n  }\n}\n\n/**\n * Copy source-side morph relations for cloned components (each component type's morph attributes).\n */\nasync function copySourceSideMorphRelationsForClonedComponents({\n  trx,\n  clonedComponentPairsCache,\n}: {\n  trx: Knex;\n  clonedComponentPairsCache: ClonedComponentPairsCache;\n}) {\n  const uploadMorph = getUploadMorphTableInfo();\n  const uploadTableName = uploadMorph?.tableName ?? null;\n\n  for (const [componentType, cloneMap] of clonedComponentPairsCache.entries()) {\n    let componentMeta: any;\n    try {\n      componentMeta = getComponentMetadataByUid(componentType);\n    } catch {\n      continue;\n    }\n    for (const attribute of Object.values(componentMeta.attributes || {}) as any[]) {\n      if (attribute.type !== 'relation' || !attribute.joinTable?.morphColumn) continue;\n      const joinTable = attribute.joinTable;\n      if (joinTable.name === uploadTableName) continue;\n      // Component dynamic zones also use `*_cmps` join tables and are cloned recursively.\n      // Copying them here would reinsert original component ids and create shared draft/published rows.\n      if (joinTable.name.includes('_cmps')) continue;\n      const sourceColumnName = joinTable.joinColumn?.name;\n      if (!sourceColumnName) continue;\n\n      const pairs: Array<{ originalId: number; draftId: number }> = [];\n      for (const [key, newComponentId] of cloneMap.entries()) {\n        const originalId = Number(key.split(':')[0]);\n        if (!Number.isNaN(originalId)) {\n          pairs.push({ originalId, draftId: newComponentId });\n        }\n      }\n      if (pairs.length > 0) {\n        await copyMorphRowsByPairs({\n          trx,\n          tableName: joinTable.name,\n          columnToRewrite: sourceColumnName,\n          pairs,\n          contextReason: 'source-side-morph-draft-pairs',\n        });\n      }\n    }\n  }\n}\n\n/**\n * Splits large input arrays into smaller batches so we can run SQL queries without\n * hitting parameter limits (SQLite) or payload limits (MySQL/Postgres).\n */\nfunction chunkArray<T>(array: T[], chunkSize: number): T[][] {\n  const chunks: T[][] = [];\n  for (let i = 0; i < array.length; i += chunkSize) {\n    chunks.push(array.slice(i, i + chunkSize));\n  }\n  return chunks;\n}\n\n/**\n * Bulk-load existing relation rows for (sourceId, newTargetId) pairs so we can avoid\n * per-row SELECTs when deciding update vs delete.\n */\nasync function buildExistingRelationMap({\n  trx,\n  tableName,\n  sourceColumnName,\n  targetColumnName,\n  updates,\n  batchSize,\n}: {\n  trx: Knex;\n  tableName: string;\n  sourceColumnName: string;\n  targetColumnName: string;\n  updates: Array<{ sourceId: number; newTargetId: number }>;\n  batchSize: number;\n}): Promise<Map<string, number>> {\n  const existingMap = new Map<string, number>();\n  if (updates.length === 0) {\n    return existingMap;\n  }\n\n  const queryChunks = chunkArray(updates, batchSize);\n  for (const chunk of queryChunks) {\n    const rows = await trx(tableName)\n      .select(['id', sourceColumnName, targetColumnName])\n      .where((qb) => {\n        for (const update of chunk) {\n          qb.orWhere((subQb) => {\n            subQb\n              .where(sourceColumnName, update.sourceId)\n              .where(targetColumnName, update.newTargetId);\n          });\n        }\n      });\n\n    for (const row of rows) {\n      const key = `${row[sourceColumnName]}_${row[targetColumnName]}`;\n      existingMap.set(key, row.id);\n    }\n  }\n\n  return existingMap;\n}\n\n/**\n * Chooses a safe batch size for bulk operations depending on the database engine,\n * falling back to smaller units on engines (notably SQLite) that have low limits.\n */\nfunction getBatchSize(trx: Knex, defaultSize: number = 1000): number {\n  const client = trx.client.config.client;\n  const isSQLite =\n    typeof client === 'string' && ['sqlite', 'sqlite3', 'better-sqlite3'].includes(client);\n\n  // SQLite documentation states that the maximum number of terms in a\n  // compound SELECT statement is 500 by default.\n  // See: https://www.sqlite.org/limits.html\n  // We use 250 to be safe and account for other query complexity.\n  return isSQLite ? Math.min(defaultSize, 250) : defaultSize;\n}\n\n/**\n * Applies stable ordering to join-table queries so cloning work is deterministic and\n * matches the ordering logic used by the entity service (important for tests and DZ order).\n */\nconst applyJoinTableOrdering = (qb: any, joinTable: any, sourceColumnName: string) => {\n  const seenColumns = new Set<string>();\n\n  const enqueueColumn = (column?: string, direction: 'asc' | 'desc' = 'asc') => {\n    if (!column || seenColumns.has(column)) {\n      return;\n    }\n\n    seenColumns.add(column);\n    qb.orderBy(column, direction);\n  };\n\n  enqueueColumn(sourceColumnName, 'asc');\n\n  if (Array.isArray(joinTable?.orderBy)) {\n    for (const clause of joinTable.orderBy) {\n      if (!clause || typeof clause !== 'object') {\n        continue;\n      }\n\n      const [column, direction] = Object.entries(clause)[0] ?? [];\n      if (!column) {\n        continue;\n      }\n\n      const normalizedDirection =\n        typeof direction === 'string' && direction.toLowerCase() === 'desc' ? 'desc' : 'asc';\n      enqueueColumn(column, normalizedDirection as 'asc' | 'desc');\n    }\n  }\n\n  enqueueColumn(joinTable?.orderColumnName, 'asc');\n  enqueueColumn(joinTable?.orderColumn, 'asc');\n  enqueueColumn('id', 'asc');\n};\n\n/**\n * Builds a stable key for join-table relations to detect duplicates.\n * Key format: sourceId::targetId::field::componentType\n */\nconst buildRelationKey = (\n  relation: Record<string, any>,\n  sourceColumnName: string,\n  targetId: number | string | null\n): string => {\n  const sourceId = normalizeId(relation[sourceColumnName]) ?? relation[sourceColumnName];\n  const fieldValue = 'field' in relation ? (relation.field ?? '') : '';\n  const componentTypeValue = 'component_type' in relation ? (relation.component_type ?? '') : '';\n\n  return `${sourceId ?? 'null'}::${targetId ?? 'null'}::${fieldValue}::${componentTypeValue}`;\n};\n\n/**\n * Queries existing relations from a join table and builds a set of keys for duplicate detection.\n */\nasync function getExistingRelationKeys({\n  trx,\n  joinTable,\n  sourceColumnName,\n  targetColumnName,\n  sourceIds,\n}: {\n  trx: Knex;\n  joinTable: any;\n  sourceColumnName: string;\n  targetColumnName: string;\n  sourceIds: number[];\n}): Promise<Set<string>> {\n  const existingKeys = new Set<string>();\n\n  if (sourceIds.length === 0) {\n    return existingKeys;\n  }\n\n  const idChunks = chunkArray(sourceIds, getBatchSize(trx, 1000));\n  for (const chunk of idChunks) {\n    const existingRelationsQuery = trx(joinTable.name).select('*').whereIn(sourceColumnName, chunk);\n\n    applyJoinTableOrdering(existingRelationsQuery, joinTable, sourceColumnName);\n\n    const existingRelations = await existingRelationsQuery;\n\n    for (const relation of existingRelations) {\n      const targetId = normalizeId(relation[targetColumnName]) ?? relation[targetColumnName];\n      const key = buildRelationKey(relation, sourceColumnName, targetId);\n      existingKeys.add(key);\n    }\n  }\n\n  return existingKeys;\n}\n\n/**\n * Inserts relations into a join table with database-specific duplicate handling.\n * Tries batch insert first, then falls back to individual inserts with conflict handling.\n */\nasync function insertRelationsWithDuplicateHandling({\n  trx,\n  tableName,\n  relations,\n  context = {},\n}: {\n  trx: Knex;\n  tableName: string;\n  relations: Array<Record<string, any>>;\n  context?: Record<string, any>;\n}): Promise<void> {\n  if (relations.length === 0) {\n    return;\n  }\n\n  try {\n    await trx.batchInsert(tableName, relations, getBatchSize(trx, 1000));\n  } catch (error: any) {\n    // If batch insert fails due to duplicates, try with conflict handling\n    if (!isDuplicateEntryError(error)) {\n      throw error;\n    }\n\n    const client = trx.client.config.client;\n    if (client === 'postgres' || client === 'pg') {\n      for (const relation of relations) {\n        try {\n          await trx(tableName).insert(relation).onConflict().ignore();\n        } catch (err: any) {\n          if (err.code !== '23505' && !err.message?.includes('duplicate key')) {\n            throw err;\n          }\n        }\n      }\n    } else {\n      // MySQL and SQLite: use insertRowWithDuplicateHandling\n      for (const relation of relations) {\n        await insertRowWithDuplicateHandling(trx, tableName, relation, context);\n      }\n    }\n  }\n}\n\ntype ParentSchemaInfo = { uid: string; collectionName?: string };\ntype ComponentParentInstance = { uid: string; parentId: number | string };\n\nconst componentParentSchemasCache = new Map<string, ParentSchemaInfo[]>();\nconst joinTableExistsCache = new Map<string, boolean>();\nconst componentMetaCache = new Map<string, any>();\n\nconst SKIPPED_RELATION_SAMPLE_LIMIT = 5;\n\nconst supportsReturning = (trx: Knex) => {\n  const client = trx.client.config.client;\n  if (typeof client !== 'string') {\n    return false;\n  }\n\n  return ['postgres', 'pg'].includes(client.toLowerCase());\n};\n\ntype SkippedRelationContext = {\n  sourceUid: string;\n  attributeName: string;\n  targetUid?: string;\n  joinTable?: string;\n};\n\ntype SkippedRelationStatsEntry = SkippedRelationContext & {\n  count: number;\n  samples: Set<string>;\n};\n\nconst skippedRelationStats = new Map<string, SkippedRelationStatsEntry>();\n\nconst DUPLICATE_ERROR_CODES = new Set(['23505', 'ER_DUP_ENTRY', 'SQLITE_CONSTRAINT_UNIQUE']);\n\nconst debug = createDebug('strapi::migration::discard-drafts');\n\n/**\n * Converts arbitrary id values into numbers when possible so we can safely index into\n * mapping tables without worrying about string/number mismatches.\n */\nconst normalizeId = (value: any): number | null => {\n  if (value == null) {\n    return null;\n  }\n\n  const num = Number(value);\n\n  if (Number.isNaN(num)) {\n    return null;\n  }\n\n  return num;\n};\n\n/**\n * Wrapper around map lookups that first normalizes the provided identifier.\n */\nconst getMappedValue = <T>(map: Map<number, T> | null | undefined, key: any): T | undefined => {\n  if (!map) {\n    return undefined;\n  }\n\n  const normalized = normalizeId(key);\n\n  if (normalized == null) {\n    return undefined;\n  }\n\n  return map.get(normalized);\n};\n\n/**\n * Extracts the inserted row identifier across the various shapes returned by different\n * clients/drivers (numbers, objects, arrays). Falls back to `null` if nothing usable.\n */\nconst resolveInsertedId = (insertResult: any): number | null => {\n  if (insertResult == null) {\n    return null;\n  }\n\n  if (typeof insertResult === 'number') {\n    return insertResult;\n  }\n\n  if (Array.isArray(insertResult)) {\n    if (insertResult.length === 0) {\n      return null;\n    }\n\n    const first = insertResult[0];\n    if (first == null) {\n      return null;\n    }\n\n    if (typeof first === 'number') {\n      return first;\n    }\n\n    if (typeof first === 'object') {\n      if ('id' in first) {\n        return Number(first.id);\n      }\n\n      const idKey = Object.keys(first).find((key) => key.toLowerCase() === 'id');\n      if (idKey) {\n        return Number((first as Record<string, any>)[idKey]);\n      }\n    }\n  }\n\n  if (typeof insertResult === 'object' && 'id' in insertResult) {\n    return Number(insertResult.id);\n  }\n\n  return null;\n};\n\n/**\n * Detects vendor-specific duplicate key errors so we can safely ignore them when our\n * goal is to insert-or-ignore without branching on the client everywhere.\n */\nconst isDuplicateEntryError = (error: any): boolean => {\n  if (!error) {\n    return false;\n  }\n\n  if (DUPLICATE_ERROR_CODES.has(error.code)) {\n    return true;\n  }\n\n  const message = typeof error.message === 'string' ? error.message : '';\n  return message.includes('duplicate key') || message.includes('UNIQUE constraint failed');\n};\n\n/**\n * Inserts a row while tolerating duplicates across all supported clients. Used when\n * bulk operations fall back to single inserts to resolve constraint conflicts.\n */\nconst insertRowWithDuplicateHandling = async (\n  trx: Knex,\n  tableName: string,\n  row: Record<string, any>,\n  context: Record<string, any> = {}\n) => {\n  try {\n    const client = trx.client.config.client;\n\n    if (\n      client === 'postgres' ||\n      client === 'pg' ||\n      client === 'sqlite3' ||\n      client === 'better-sqlite3'\n    ) {\n      await trx(tableName).insert(row).onConflict().ignore();\n      return;\n    }\n\n    if (client === 'mysql' || client === 'mysql2') {\n      await trx.raw(`INSERT IGNORE INTO ?? SET ?`, [tableName, row]);\n      return;\n    }\n\n    await trx(tableName).insert(row);\n  } catch (error: any) {\n    if (!isDuplicateEntryError(error)) {\n      const details = JSON.stringify(context);\n      const wrapped = new Error(\n        `Failed to insert row into ${tableName}: ${error.message} | context=${details}`\n      );\n      (wrapped as any).cause = error;\n      throw wrapped;\n    }\n  }\n};\n\n/**\n * Normalizes identifiers into a comparable string so we can dedupe target ids\n * regardless of whether they come in as numbers, strings, or objects.\n */\nconst toComparisonKey = (value: any): string => {\n  if (value === null || value === undefined) {\n    return 'null';\n  }\n\n  if (typeof value === 'object') {\n    try {\n      return JSON.stringify(value);\n    } catch {\n      return String(value);\n    }\n  }\n\n  return String(value);\n};\n\n/**\n * Formats ids for log output while keeping the log lightweight and JSON-safe.\n */\nconst toDisplayValue = (value: any): string => {\n  if (value === null || value === undefined) {\n    return 'null';\n  }\n\n  if (typeof value === 'string' || typeof value === 'number' || typeof value === 'bigint') {\n    return String(value);\n  }\n\n  try {\n    return JSON.stringify(value);\n  } catch {\n    return String(value);\n  }\n};\n\n/**\n * Tracks how many relation rows we skipped because their targets are missing, so we\n * can emit a consolidated warning once the migration finishes copying relations.\n */\nfunction recordSkippedRelations(context: SkippedRelationContext, skippedIds: any[]) {\n  if (!skippedIds.length) {\n    return;\n  }\n\n  const key = `${context.sourceUid}::${context.attributeName}::${context.joinTable ?? 'NO_JOIN_TABLE'}`;\n  let stats = skippedRelationStats.get(key);\n\n  if (!stats) {\n    stats = {\n      ...context,\n      count: 0,\n      samples: new Set<string>(),\n    };\n  }\n\n  stats.count += skippedIds.length;\n\n  for (const id of skippedIds) {\n    if (stats.samples.size >= SKIPPED_RELATION_SAMPLE_LIMIT) {\n      break;\n    }\n\n    stats.samples.add(toDisplayValue(id));\n  }\n\n  skippedRelationStats.set(key, stats);\n}\n\n/**\n * Emits aggregated warnings for all skipped relations and resets the counters.\n * This keeps the log readable even when millions of orphaned rows exist.\n */\nfunction flushSkippedRelationLogs() {\n  if (skippedRelationStats.size === 0) {\n    return;\n  }\n\n  for (const stats of skippedRelationStats.values()) {\n    const sampleArray = Array.from(stats.samples);\n    const sampleText = sampleArray.length > 0 ? sampleArray.join(', ') : 'n/a';\n    const targetInfo = stats.targetUid ? `target=${stats.targetUid}` : 'target=unknown';\n    const joinTableInfo = stats.joinTable ? `joinTable=${stats.joinTable}` : 'joinTable=n/a';\n    const ellipsis = stats.count > sampleArray.length ? ', ...' : '';\n\n    strapi.log.warn(\n      `[discard-drafts] Skipped ${stats.count} relation(s) for ${stats.sourceUid}.${stats.attributeName} (${targetInfo}, ${joinTableInfo}). Example target ids: ${sampleText}${ellipsis}`\n    );\n  }\n\n  strapi.log.warn(\n    '[discard-drafts] Some join-table relations referenced missing targets and were skipped. Review these warnings and clean up orphaned relations before rerunning the migration if needed.'\n  );\n\n  skippedRelationStats.clear();\n}\n\n/**\n * Returns every schema (content type or component) that can embed the provided component.\n * Cached because we consult it repeatedly while remapping nested components.\n */\nfunction listComponentParentSchemas(componentUid: string): ParentSchemaInfo[] {\n  if (!componentParentSchemasCache.has(componentUid)) {\n    const schemas = [\n      ...Object.values(strapi.contentTypes),\n      ...Object.values(strapi.components),\n    ] as any[];\n\n    const parents = schemas\n      .filter((schema) => {\n        if (!schema?.attributes) {\n          return false;\n        }\n\n        return Object.values(schema.attributes).some((attr: any) => {\n          if (attr.type === 'component') {\n            return attr.component === componentUid;\n          }\n\n          if (attr.type === 'dynamiczone') {\n            return attr.components?.includes(componentUid);\n          }\n\n          return false;\n        });\n      })\n      .map((schema) => ({ uid: schema.uid, collectionName: schema.collectionName }));\n\n    componentParentSchemasCache.set(componentUid, parents);\n  }\n\n  return componentParentSchemasCache.get(componentUid)!;\n}\n\n/**\n * Memoized helper for checking whether a table exists. Avoids repeating expensive\n * information_schema queries when we touch the same join table many times.\n */\nasync function ensureTableExists(trx: Knex, tableName: string): Promise<boolean> {\n  if (!joinTableExistsCache.has(tableName)) {\n    const exists = await trx.schema.hasTable(tableName);\n    joinTableExistsCache.set(tableName, exists);\n  }\n\n  return joinTableExistsCache.get(tableName)!;\n}\n\ntype FilterRelationsWithExistingTargetsParams<T> = {\n  trx: Knex;\n  targetUid?: string;\n  relations: T[];\n  getTargetId: (relation: T) => any;\n};\n\n/**\n * Filters out relation rows whose target entity no longer exists, returning the safe\n * rows along with a list of skipped ids so we can log them later.\n */\nasync function filterRelationsWithExistingTargets<T>({\n  trx,\n  targetUid,\n  relations,\n  getTargetId,\n}: FilterRelationsWithExistingTargetsParams<T>): Promise<{ relations: T[]; skippedIds: any[] }> {\n  if (!relations.length) {\n    return { relations, skippedIds: [] };\n  }\n\n  if (!targetUid) {\n    return { relations, skippedIds: [] };\n  }\n\n  const targetMeta = strapi.db.metadata.get(targetUid);\n  if (!targetMeta) {\n    return { relations, skippedIds: [] };\n  }\n\n  const tableName = targetMeta.tableName;\n  const primaryKeyColumn = resolvePrimaryKeyColumn(targetMeta);\n\n  if (!tableName) {\n    return { relations, skippedIds: [] };\n  }\n\n  const uniqueIdMap = new Map<string, any>();\n\n  for (const relation of relations) {\n    const targetId = getTargetId(relation);\n\n    if (targetId == null) {\n      continue;\n    }\n\n    const key = toComparisonKey(targetId);\n    if (!uniqueIdMap.has(key)) {\n      uniqueIdMap.set(key, targetId);\n    }\n  }\n\n  if (uniqueIdMap.size === 0) {\n    return { relations, skippedIds: [] };\n  }\n\n  const hasTable = await ensureTableExists(trx, tableName);\n  if (!hasTable) {\n    return { relations: [], skippedIds: Array.from(uniqueIdMap.values()) };\n  }\n\n  const existingKeys = new Set<string>();\n  const uniqueIds = Array.from(uniqueIdMap.values());\n  const idChunks = chunkArray(uniqueIds, getBatchSize(trx, 1000));\n\n  for (const chunk of idChunks) {\n    const rows = await trx(tableName).select(primaryKeyColumn).whereIn(primaryKeyColumn, chunk);\n    for (const row of rows) {\n      const value = row[primaryKeyColumn];\n      existingKeys.add(toComparisonKey(value));\n    }\n  }\n\n  const filteredRelations: T[] = [];\n  const skippedIds: any[] = [];\n\n  for (const relation of relations) {\n    const targetId = getTargetId(relation);\n\n    if (targetId == null) {\n      skippedIds.push(targetId);\n      continue;\n    }\n\n    if (existingKeys.has(toComparisonKey(targetId))) {\n      filteredRelations.push(relation);\n    } else {\n      skippedIds.push(targetId);\n    }\n  }\n\n  return { relations: filteredRelations, skippedIds };\n}\n\ntype ComponentHierarchyCaches = {\n  parentInstanceCache: Map<string, ComponentParentInstance | null>;\n  ancestorDpCache: Map<string, boolean>;\n  parentDpCache: Map<string, boolean>;\n};\n\n/**\n * Locates the owning entity (content type or component) for a given component instance.\n * This mirrors the document service logic we need in order to decide whether a relation\n * should propagate to drafts, and is cached for performance.\n */\nasync function findComponentParentInstance(\n  trx: Knex,\n  identifiers: any,\n  componentUid: string,\n  componentId: number | string,\n  excludeUid: string | undefined,\n  caches: ComponentHierarchyCaches\n): Promise<ComponentParentInstance | null> {\n  const cacheKey = `${componentUid}:${componentId}:${excludeUid ?? 'ALL'}`;\n  if (caches.parentInstanceCache.has(cacheKey)) {\n    return caches.parentInstanceCache.get(cacheKey)!;\n  }\n\n  const parentComponentIdColumn = getComponentJoinColumnInverseName(identifiers);\n  const parentComponentTypeColumn = getComponentTypeColumn(identifiers);\n  const parentEntityIdColumn = getComponentJoinColumnEntityName(identifiers);\n\n  const potentialParents = listComponentParentSchemas(componentUid).filter(\n    (schema) => schema.uid !== excludeUid\n  );\n\n  for (const parentSchema of potentialParents) {\n    if (!parentSchema.collectionName) {\n      continue;\n    }\n\n    const parentJoinTableName = getComponentJoinTableName(parentSchema.collectionName, identifiers);\n\n    try {\n      if (!(await ensureTableExists(trx, parentJoinTableName))) {\n        continue;\n      }\n\n      const parentRow = await trx(parentJoinTableName)\n        .where({\n          [parentComponentIdColumn]: componentId,\n          [parentComponentTypeColumn]: componentUid,\n        })\n        .first(parentEntityIdColumn);\n\n      if (parentRow) {\n        const parentInstance: ComponentParentInstance = {\n          uid: parentSchema.uid,\n          parentId: parentRow[parentEntityIdColumn],\n        };\n\n        caches.parentInstanceCache.set(cacheKey, parentInstance);\n        return parentInstance;\n      }\n    } catch {\n      continue;\n    }\n  }\n\n  caches.parentInstanceCache.set(cacheKey, null);\n  return null;\n}\n\n/**\n * Fetches and caches database metadata for a component uid. Saves repeated lookups while\n * cloning the same component type thousands of times.\n */\nconst getComponentMeta = (componentUid: string) => {\n  if (!componentMetaCache.has(componentUid)) {\n    const meta = getComponentMetadataByUid(componentUid);\n    componentMetaCache.set(componentUid, meta ?? null);\n  }\n\n  return componentMetaCache.get(componentUid);\n};\n\n/**\n * Determines whether a component's parent entity participates in draft/publish,\n * short-circuiting a lot of recursion when deciding relation propagation rules.\n */\nasync function hasDraftPublishAncestorForParent(\n  trx: Knex,\n  identifiers: any,\n  parent: ComponentParentInstance,\n  caches: ComponentHierarchyCaches\n): Promise<boolean> {\n  const cacheKey = `${parent.uid}:${parent.parentId}`;\n  if (caches.parentDpCache.has(cacheKey)) {\n    return caches.parentDpCache.get(cacheKey)!;\n  }\n\n  const parentContentType = strapi.contentTypes[\n    parent.uid as keyof typeof strapi.contentTypes\n  ] as any;\n  if (parentContentType) {\n    const result = !!parentContentType?.options?.draftAndPublish;\n    caches.parentDpCache.set(cacheKey, result);\n    return result;\n  }\n\n  const parentComponent = strapi.components[parent.uid as keyof typeof strapi.components] as any;\n  if (!parentComponent) {\n    caches.parentDpCache.set(cacheKey, false);\n    return false;\n  }\n\n  const result = await hasDraftPublishAncestorForComponent(\n    trx,\n    identifiers,\n    parent.uid,\n    parent.parentId,\n    undefined,\n    caches\n  );\n  caches.parentDpCache.set(cacheKey, result);\n  return result;\n}\n\n/**\n * Recursively checks whether a component lies beneath a draft/publish-enabled parent\n * component or content type. We mirror discardDraft's propagation guard.\n */\nasync function hasDraftPublishAncestorForComponent(\n  trx: Knex,\n  identifiers: any,\n  componentUid: string,\n  componentId: number | string,\n  excludeUid: string | undefined,\n  caches: ComponentHierarchyCaches\n): Promise<boolean> {\n  const cacheKey = `${componentUid}:${componentId}:${excludeUid ?? 'ALL'}`;\n  if (caches.ancestorDpCache.has(cacheKey)) {\n    return caches.ancestorDpCache.get(cacheKey)!;\n  }\n\n  const parent = await findComponentParentInstance(\n    trx,\n    identifiers,\n    componentUid,\n    componentId,\n    excludeUid,\n    caches\n  );\n\n  if (!parent) {\n    caches.ancestorDpCache.set(cacheKey, false);\n    return false;\n  }\n\n  const result = await hasDraftPublishAncestorForParent(trx, identifiers, parent, caches);\n  caches.ancestorDpCache.set(cacheKey, result);\n  return result;\n}\n\n/**\n * Abstracts `NOW()` handling so that timestamps stay consistent across databases—\n * using Knex's native function when available and falling back to JS dates otherwise.\n */\nconst resolveNowValue = (trx: Knex) => {\n  if (typeof trx.fn?.now === 'function') {\n    return trx.fn.now();\n  }\n\n  return new Date();\n};\n\n/**\n * Builds or retrieves the published→draft id map for a target content type, caching\n * the result so nested relation remapping can reuse the work.\n */\nasync function getDraftMapForTarget(\n  trx: Knex,\n  targetUid: string,\n  draftMapCache: Map<string, Map<number, number> | null>\n): Promise<Map<number, number> | null> {\n  if (draftMapCache.has(targetUid)) {\n    return draftMapCache.get(targetUid) ?? null;\n  }\n\n  const targetMeta = strapi.db.metadata.get(targetUid);\n  if (!targetMeta) {\n    draftMapCache.set(targetUid, null);\n    return null;\n  }\n\n  const map = await buildPublishedToDraftMap({\n    trx,\n    uid: targetUid,\n    meta: targetMeta,\n    options: { requireDraftAndPublish: true },\n  });\n\n  draftMapCache.set(targetUid, map ?? null);\n  return map ?? null;\n}\n\n/**\n * Builds a reverse map from draft IDs to published IDs for a target content type.\n * This is needed to check if a target ID is already a draft and find its published version.\n */\nasync function getDraftToPublishedMap(\n  trx: Knex,\n  targetUid: string,\n  reverseMapCache: Map<string, Map<number, number> | null>\n): Promise<Map<number, number> | null> {\n  if (reverseMapCache.has(targetUid)) {\n    return reverseMapCache.get(targetUid) ?? null;\n  }\n\n  const targetMeta = strapi.db.metadata.get(targetUid);\n  if (!targetMeta) {\n    reverseMapCache.set(targetUid, null);\n    return null;\n  }\n\n  const draftToPublishedMap = new Map<number, number>();\n  const draftMap = await getDraftMapForTarget(trx, targetUid, new Map());\n  if (draftMap) {\n    // Reverse the published->draft map to get draft->published\n    for (const [publishedId, draftId] of draftMap.entries()) {\n      draftToPublishedMap.set(draftId, publishedId);\n    }\n    debug(\n      `[getDraftToPublishedMap] ${targetUid}: Built reverse map with ${draftToPublishedMap.size} entries (draft->published)`\n    );\n  } else {\n    debug(`[getDraftToPublishedMap] ${targetUid}: No draft map found, returning null`);\n  }\n\n  reverseMapCache.set(targetUid, draftToPublishedMap.size > 0 ? draftToPublishedMap : null);\n  return draftToPublishedMap.size > 0 ? draftToPublishedMap : null;\n}\n\n/**\n * Checks if a target ID is published or draft by querying the database.\n */\nasync function getTargetPublicationState(\n  trx: Knex,\n  targetId: number | string,\n  targetUid: string\n): Promise<'published' | 'draft' | null> {\n  const targetMeta = strapi.db.metadata.get(targetUid);\n  if (!targetMeta) {\n    return null;\n  }\n\n  const target = await trx(targetMeta.tableName)\n    .select('published_at')\n    .where('id', targetId)\n    .first();\n\n  if (!target) {\n    return null;\n  }\n\n  return target.published_at !== null ? 'published' : 'draft';\n}\n\n/**\n * Maps relation foreign keys so that draft entities reference draft targets when those\n * targets exist; otherwise we preserve the original reference (matching discardDraft).\n *\n * When mapping for a draft component: maps published targets → draft targets\n * When mapping for a published component: maps draft targets → published targets (if needed)\n */\nasync function mapTargetId(\n  trx: Knex,\n  originalId: number | string | null,\n  targetUid: string | undefined,\n  parentUid: string,\n  parentPublishedToDraftMap: Map<number, number>,\n  draftMapCache: Map<string, Map<number, number> | null>,\n  isForDraftEntity: boolean = true,\n  reverseMapCache?: Map<string, Map<number, number> | null>\n) {\n  if (originalId == null || !targetUid) {\n    return originalId;\n  }\n\n  if (targetUid === parentUid) {\n    if (isForDraftEntity) {\n      return parentPublishedToDraftMap.get(Number(originalId)) ?? originalId;\n    }\n    // For published entity, if we got a draft ID, find the published version\n    const effectiveReverseCache = reverseMapCache ?? new Map();\n    const reverseMap = await getDraftToPublishedMap(trx, targetUid, effectiveReverseCache);\n    if (reverseMap) {\n      return reverseMap.get(Number(originalId)) ?? originalId;\n    }\n    return originalId;\n  }\n\n  const targetMap = await getDraftMapForTarget(trx, targetUid, draftMapCache);\n  if (!targetMap) {\n    return originalId;\n  }\n\n  // Check if the original ID is already a draft or published\n  const targetState = await getTargetPublicationState(trx, Number(originalId), targetUid);\n\n  if (isForDraftEntity) {\n    // For draft entities: map published targets to draft targets\n    if (targetState === 'published') {\n      return targetMap.get(Number(originalId)) ?? originalId;\n    }\n    if (targetState === 'draft') {\n      // Already a draft, keep it\n      return originalId;\n    }\n    // If we can't determine state, try the map lookup\n    return targetMap.get(Number(originalId)) ?? originalId;\n  }\n  // For published entities: map draft targets to published targets\n  if (targetState === 'draft') {\n    const effectiveReverseCache = reverseMapCache ?? new Map();\n    const reverseMap = await getDraftToPublishedMap(trx, targetUid, effectiveReverseCache);\n    if (reverseMap) {\n      return reverseMap.get(Number(originalId)) ?? originalId;\n    }\n    return originalId;\n  }\n  if (targetState === 'published') {\n    // Already published, keep it\n    return originalId;\n  }\n  // If we can't determine state, assume it's published\n  return originalId;\n}\n\n/**\n * Clones a database row and strips the `id` column so it can be reinserted as a new row.\n */\nconst ensureObjectWithoutId = (row: Record<string, any>) => {\n  const cloned = { ...row };\n  if ('id' in cloned) {\n    delete cloned.id;\n  }\n  return cloned;\n};\n\n/**\n * Duplicates join-table relations for a component instance while remapping any foreign\n * keys to draft targets. Mirrors the runtime clone logic but operates entirely in SQL.\n */\nasync function cloneComponentRelationJoinTables(\n  trx: Knex,\n  componentMeta: any,\n  componentUid: string,\n  originalComponentId: number,\n  newComponentId: number,\n  parentUid: string,\n  parentPublishedToDraftMap: Map<number, number>,\n  draftMapCache: Map<string, Map<number, number> | null>,\n  isForDraftEntity: boolean = true,\n  reverseMapCache?: Map<string, Map<number, number> | null>\n) {\n  for (const [attributeName, attribute] of Object.entries(componentMeta.attributes) as Array<\n    [string, any]\n  >) {\n    if (attribute.type !== 'relation' || !attribute.joinTable) {\n      continue;\n    }\n\n    const rawComponentAttribute = (\n      strapi.components[componentUid as keyof typeof strapi.components] as any\n    )?.attributes?.[attributeName];\n\n    // Component and dynamic zone links need deep cloning of target component rows.\n    // Skip the generic join-table copier so the recursive clone path can handle them.\n    if (\n      rawComponentAttribute?.type === 'component' ||\n      rawComponentAttribute?.type === 'dynamiczone'\n    ) {\n      continue;\n    }\n\n    const joinTable = attribute.joinTable;\n    const sourceColumnName = joinTable.joinColumn.name;\n    const targetColumnName = joinTable.inverseJoinColumn.name;\n\n    if (!componentMeta.relationsLogPrinted) {\n      debug(\n        `[cloneComponentRelationJoinTables] Inspecting join table ${joinTable.name} for component ${componentUid}`\n      );\n      componentMeta.relationsLogPrinted = true;\n    }\n\n    const relations = await trx(joinTable.name)\n      .select('*')\n      .where(sourceColumnName, originalComponentId);\n\n    if (relations.length === 0) {\n      continue;\n    }\n\n    const preparedRelations: Array<Record<string, any>> = [];\n\n    for (const relation of relations) {\n      const clonedRelation = ensureObjectWithoutId(relation);\n      clonedRelation[sourceColumnName] = newComponentId;\n\n      if (targetColumnName in clonedRelation) {\n        const originalTargetId = clonedRelation[targetColumnName];\n        clonedRelation[targetColumnName] = await mapTargetId(\n          trx,\n          clonedRelation[targetColumnName],\n          attribute.target,\n          parentUid,\n          parentPublishedToDraftMap,\n          draftMapCache,\n          isForDraftEntity,\n          reverseMapCache\n        );\n\n        debug(\n          `[cloneComponentRelationJoinTables] ${componentUid} join ${joinTable.name}: mapped ${targetColumnName} from ${originalTargetId} to ${clonedRelation[targetColumnName]} (target=${attribute.target})`\n        );\n      }\n\n      preparedRelations.push(clonedRelation);\n    }\n\n    let relationsToInsert = preparedRelations;\n\n    if (preparedRelations.some((relation) => targetColumnName in relation)) {\n      const { relations: safeRelations, skippedIds } = await filterRelationsWithExistingTargets({\n        trx,\n        targetUid: attribute.target,\n        relations: preparedRelations,\n        getTargetId: (relation) => relation[targetColumnName],\n      });\n\n      recordSkippedRelations(\n        {\n          sourceUid: componentUid,\n          attributeName,\n          targetUid: attribute.target,\n          joinTable: joinTable.name,\n        },\n        skippedIds\n      );\n\n      relationsToInsert = safeRelations;\n    }\n\n    if (relationsToInsert.length === 0) {\n      continue;\n    }\n\n    for (const relation of relationsToInsert) {\n      // Ensure we're only creating relations for the NEW component, not the original\n      // The sourceColumnName must be newComponentId to ensure we don't accidentally modify\n      // the original published component's relations\n      if (relation[sourceColumnName] !== newComponentId) {\n        debug(\n          `[cloneComponentRelationJoinTables] ERROR: Relation source ${relation[sourceColumnName]} does not match newComponentId ${newComponentId} - skipping to prevent modifying original component relations`\n        );\n        continue;\n      }\n\n      debug(\n        `[cloneComponentRelationJoinTables] inserting relation into ${joinTable.name} (component=${componentUid}, source=${relation[sourceColumnName]}, target=${relation[targetColumnName]})`\n      );\n\n      await insertRowWithDuplicateHandling(trx, joinTable.name, relation, {\n        componentUid,\n        originalComponentId,\n        newComponentId,\n        joinTable: joinTable.name,\n        sourceColumnName,\n        targetColumnName,\n        targetUid: attribute.target,\n        parentUid,\n      });\n    }\n  }\n}\n\n/**\n * Clones a component row (including nested relations) so the newly created draft entity\n * owns its own copy, matching what the document service would have produced.\n */\nasync function cloneComponentInstance({\n  trx,\n  componentUid,\n  componentId,\n  parentUid,\n  parentPublishedToDraftMap,\n  draftMapCache,\n  clonedComponentPairsCache,\n  isForDraftEntity = true,\n  reverseMapCache,\n}: {\n  trx: Knex;\n  componentUid: string;\n  componentId: number;\n  parentUid: string;\n  parentPublishedToDraftMap: Map<number, number>;\n  draftMapCache: Map<string, Map<number, number> | null>;\n  clonedComponentPairsCache?: ClonedComponentPairsCache;\n  isForDraftEntity?: boolean;\n  reverseMapCache?: Map<string, Map<number, number> | null>;\n}): Promise<number> {\n  const componentMeta = getComponentMeta(componentUid);\n  if (!componentMeta) {\n    return componentId;\n  }\n\n  const componentTableName = componentMeta.tableName;\n  const componentPrimaryKey = Number.isNaN(Number(componentId)) ? componentId : Number(componentId);\n  const componentRow = await trx(componentTableName)\n    .select('*')\n    .where('id', componentPrimaryKey)\n    .first();\n\n  if (!componentRow) {\n    return componentId;\n  }\n\n  const newComponentRow: Record<string, any> = ensureObjectWithoutId(componentRow);\n\n  // `document_id`, `created_at`, `updated_at` are Strapi system columns whose names remain stable across the\n  // identifier-shortening migration, so it’s safe to check them directly here.\n  if ('document_id' in newComponentRow) {\n    newComponentRow.document_id = createId();\n  }\n\n  if ('updated_at' in newComponentRow) {\n    newComponentRow.updated_at = resolveNowValue(trx);\n  }\n\n  if ('created_at' in newComponentRow && newComponentRow.created_at == null) {\n    newComponentRow.created_at = resolveNowValue(trx);\n  }\n\n  for (const attribute of Object.values(componentMeta.attributes) as any) {\n    if (attribute.type !== 'relation') {\n      continue;\n    }\n\n    const joinColumn = attribute.joinColumn;\n    if (!joinColumn) {\n      continue;\n    }\n\n    const columnName = joinColumn.name;\n    if (!columnName || !(columnName in newComponentRow)) {\n      continue;\n    }\n\n    newComponentRow[columnName] = await mapTargetId(\n      trx,\n      newComponentRow[columnName],\n      attribute.target,\n      parentUid,\n      parentPublishedToDraftMap,\n      draftMapCache,\n      isForDraftEntity,\n      reverseMapCache\n    );\n  }\n\n  let insertResult;\n  if (supportsReturning(trx)) {\n    try {\n      insertResult = await trx(componentTableName).insert(newComponentRow, ['id']);\n    } catch (error: any) {\n      insertResult = await trx(componentTableName).insert(newComponentRow);\n    }\n  } else {\n    insertResult = await trx(componentTableName).insert(newComponentRow);\n  }\n\n  let newComponentId = resolveInsertedId(insertResult);\n\n  if (!newComponentId) {\n    if ('document_id' in newComponentRow && newComponentRow.document_id) {\n      const insertedRow = await trx(componentTableName)\n        .select('id')\n        .where('document_id', newComponentRow.document_id)\n        .orderBy('id', 'desc')\n        .first();\n      newComponentId = insertedRow?.id ?? null;\n    }\n\n    if (!newComponentId) {\n      const insertedRow = await trx(componentTableName).select('id').orderBy('id', 'desc').first();\n      newComponentId = insertedRow?.id ?? null;\n    }\n  }\n\n  if (!newComponentId) {\n    throw new Error(`Failed to clone component ${componentUid} (id: ${componentId})`);\n  }\n\n  newComponentId = Number(newComponentId);\n\n  if (Number.isNaN(newComponentId)) {\n    throw new Error(`Invalid cloned component identifier for ${componentUid} (id: ${componentId})`);\n  }\n\n  recordClonedComponentPair(\n    clonedComponentPairsCache,\n    componentUid,\n    Number(componentPrimaryKey),\n    newComponentId\n  );\n\n  await cloneComponentRelationJoinTables(\n    trx,\n    componentMeta,\n    componentUid,\n    Number(componentPrimaryKey),\n    newComponentId,\n    parentUid,\n    parentPublishedToDraftMap,\n    draftMapCache,\n    isForDraftEntity,\n    reverseMapCache\n  );\n\n  // Clone nested components (component and dynamiczone attributes) so draft has its own copy\n  const componentSchema = strapi.components[componentUid as keyof typeof strapi.components] as any;\n  const collectionName = componentSchema?.collectionName;\n  if (collectionName && componentSchema?.attributes) {\n    const identifiers = strapi.db.metadata.identifiers;\n    const entityIdCol = getComponentJoinColumnEntityName(identifiers);\n    const componentIdCol = getComponentJoinColumnInverseName(identifiers);\n    const componentTypeCol = getComponentTypeColumn(identifiers);\n    const fieldCol = identifiers.FIELD_COLUMN;\n\n    // Use the raw component schema here: DB metadata transforms component/DZ attrs into relations,\n    // so their original `type` values are only available on the schema definition.\n    for (const [attrName, attr] of Object.entries(componentSchema.attributes || {}) as Array<\n      [string, any]\n    >) {\n      if (attr.type === 'component') {\n        const nestedJoinTableName = getComponentJoinTableName(collectionName, identifiers);\n        if (!(await ensureTableExists(trx, nestedJoinTableName))) continue;\n        const nestedRows = await trx(nestedJoinTableName)\n          .select('*')\n          .where(entityIdCol, componentPrimaryKey)\n          .where(componentTypeCol, attr.component)\n          .where(fieldCol, attrName);\n        for (const row of nestedRows) {\n          const nestedId = Number(row[componentIdCol]);\n          if (Number.isNaN(nestedId)) continue;\n          const newNestedId = await cloneComponentInstance({\n            trx,\n            componentUid: attr.component,\n            componentId: nestedId,\n            parentUid: componentUid,\n            parentPublishedToDraftMap,\n            draftMapCache,\n            clonedComponentPairsCache,\n            isForDraftEntity,\n            reverseMapCache,\n          });\n          const { id, ...rest } = row;\n          await insertRowWithDuplicateHandling(trx, nestedJoinTableName, {\n            ...rest,\n            [entityIdCol]: newComponentId,\n            [componentIdCol]: newNestedId,\n          });\n        }\n      } else if (attr.type === 'dynamiczone' && Array.isArray(attr.components)) {\n        const dzJoinTableName = getDzJoinTableName(collectionName, identifiers);\n        if (!(await ensureTableExists(trx, dzJoinTableName))) continue;\n        const dzRows = await trx(dzJoinTableName)\n          .select('*')\n          .where(entityIdCol, componentPrimaryKey)\n          .where(fieldCol, attrName);\n        for (const row of dzRows) {\n          const nestedType = row[componentTypeCol];\n          const nestedId = Number(row[componentIdCol]);\n          if (!nestedType || Number.isNaN(nestedId)) continue;\n          const newNestedId = await cloneComponentInstance({\n            trx,\n            componentUid: nestedType,\n            componentId: nestedId,\n            parentUid: componentUid,\n            parentPublishedToDraftMap,\n            draftMapCache,\n            clonedComponentPairsCache,\n            isForDraftEntity,\n            reverseMapCache,\n          });\n          const { id, ...rest } = row;\n          await insertRowWithDuplicateHandling(trx, dzJoinTableName, {\n            ...rest,\n            [entityIdCol]: newComponentId,\n            [componentIdCol]: newNestedId,\n          });\n        }\n      }\n    }\n  }\n\n  return newComponentId;\n}\n\ntype DraftMapOptions = {\n  requireDraftAndPublish?: boolean;\n};\n\n/**\n * Generates a map between published row ids and their corresponding draft ids so we can\n * rewire relations in bulk. Handles localization nuances and caches the newest draft.\n */\nasync function buildPublishedToDraftMap({\n  trx,\n  uid,\n  meta,\n  options = {},\n}: {\n  trx: Knex;\n  uid: string;\n  meta: any;\n  options?: DraftMapOptions;\n}): Promise<Map<number, number> | null> {\n  if (!meta) {\n    return null;\n  }\n\n  const model = strapi.getModel(uid as UID.ContentType);\n  const hasDraftAndPublishEnabled = contentTypes.hasDraftAndPublish(model);\n\n  if (options.requireDraftAndPublish && !hasDraftAndPublishEnabled) {\n    return null;\n  }\n\n  const [publishedEntries, draftEntries] = await Promise.all([\n    // `document_id`, `locale`, and `published_at` are core columns that keep their exact names after the\n    // identifier-shortening migration, so selecting them by literal is safe.\n    trx(meta.tableName).select(['id', 'document_id', 'locale']).whereNotNull('published_at') as any,\n    trx(meta.tableName).select(['id', 'document_id', 'locale']).whereNull('published_at') as any,\n  ]);\n\n  if (publishedEntries.length === 0 || draftEntries.length === 0) {\n    return null;\n  }\n\n  const i18nService = strapi.plugin('i18n')?.service('content-types');\n  const contentType = strapi.contentTypes[uid as keyof typeof strapi.contentTypes] as any;\n  const isLocalized = i18nService?.isLocalizedContentType(contentType) ?? false;\n\n  const draftByDocumentId = new Map<string, (typeof draftEntries)[0]>();\n  for (const draft of draftEntries) {\n    if (!draft.document_id) {\n      continue;\n    }\n\n    const key = isLocalized ? `${draft.document_id}:${draft.locale || ''}` : draft.document_id;\n    const existing = draftByDocumentId.get(key);\n    if (!existing) {\n      draftByDocumentId.set(key, draft);\n      continue;\n    }\n\n    const existingId = Number(existing.id);\n    const draftId = Number(draft.id);\n\n    if (Number.isNaN(existingId) || Number.isNaN(draftId)) {\n      draftByDocumentId.set(key, draft);\n      continue;\n    }\n\n    if (draftId > existingId) {\n      draftByDocumentId.set(key, draft);\n    }\n  }\n\n  const publishedToDraftMap = new Map<number, number>();\n  for (const published of publishedEntries) {\n    if (!published.document_id) {\n      continue;\n    }\n\n    const key = isLocalized\n      ? `${published.document_id}:${published.locale || ''}`\n      : published.document_id;\n\n    const draft = draftByDocumentId.get(key);\n    if (draft) {\n      const publishedId = normalizeId(published.id);\n      const draftId = normalizeId(draft.id);\n\n      if (publishedId == null || draftId == null) {\n        continue;\n      }\n\n      publishedToDraftMap.set(publishedId, draftId);\n    }\n  }\n\n  return publishedToDraftMap.size > 0 ? publishedToDraftMap : null;\n}\n\n/**\n * Copy relations within the same content type (self-referential relations)\n */\nasync function copyRelationsForContentType({\n  trx,\n  uid,\n  publishedToDraftMap,\n}: {\n  trx: Knex;\n  uid: string;\n  publishedToDraftMap: Map<number, number>;\n}) {\n  const meta = strapi.db.metadata.get(uid);\n  if (!meta) return;\n\n  const publishedIds = Array.from(publishedToDraftMap.keys());\n\n  for (const attribute of Object.values(meta.attributes) as any) {\n    if (attribute.type !== 'relation' || attribute.target !== uid) {\n      continue;\n    }\n\n    const joinTable = attribute.joinTable;\n    if (!joinTable) {\n      continue;\n    }\n\n    // Skip component join tables - they are handled by copyComponentRelations\n    if (joinTable.name.includes('_cmps')) {\n      continue;\n    }\n\n    const { name: sourceColumnName } = joinTable.joinColumn;\n    const { name: targetColumnName } = joinTable.inverseJoinColumn;\n\n    // Process in batches to avoid MySQL query size limits and SQLite expression tree limits\n    const publishedIdsChunks = chunkArray(publishedIds, getBatchSize(trx, 1000));\n\n    for (const publishedIdsChunk of publishedIdsChunks) {\n      const draftSourceIds = publishedIdsChunk\n        .map((value) => getMappedValue(publishedToDraftMap, value))\n        .filter((value): value is number => value != null) as number[];\n\n      // Get relations where the source is a published entry (in batches)\n      const relationsQuery = trx(joinTable.name)\n        .select('*')\n        .whereIn(sourceColumnName, publishedIdsChunk);\n\n      applyJoinTableOrdering(relationsQuery, joinTable, sourceColumnName);\n\n      const relations = await relationsQuery;\n\n      if (relations.length === 0) {\n        continue;\n      }\n\n      // Create new relations pointing to draft entries\n      // Remove the 'id' field to avoid duplicate key errors\n      const newRelations = relations\n        .map((relation) => {\n          const newSourceId = getMappedValue(publishedToDraftMap, relation[sourceColumnName]);\n          const newTargetId = getMappedValue(publishedToDraftMap, relation[targetColumnName]);\n\n          if (!newSourceId || !newTargetId) {\n            // Skip if no mapping found\n            return null;\n          }\n\n          // Create new relation object without the 'id' field\n          const { id, ...relationWithoutId } = relation;\n          return {\n            ...relationWithoutId,\n            [sourceColumnName]: newSourceId,\n            [targetColumnName]: newTargetId,\n          };\n        })\n        .filter(Boolean);\n\n      if (newRelations.length === 0) {\n        continue;\n      }\n\n      const existingKeys = await getExistingRelationKeys({\n        trx,\n        joinTable,\n        sourceColumnName,\n        targetColumnName,\n        sourceIds: draftSourceIds,\n      });\n\n      const relationsToInsert = newRelations.filter((relation) => {\n        const targetId = normalizeId(relation[targetColumnName]) ?? relation[targetColumnName];\n        const key = buildRelationKey(relation, sourceColumnName, targetId);\n        return !existingKeys.has(key);\n      });\n\n      if (relationsToInsert.length === 0) {\n        continue;\n      }\n\n      await insertRelationsWithDuplicateHandling({\n        trx,\n        tableName: joinTable.name,\n        relations: relationsToInsert,\n        context: {\n          reason: 'duplicate-self-relation-check',\n          sourceUid: uid,\n          targetUid: uid,\n        },\n      });\n    }\n  }\n}\n\n/**\n * Copy relations from other content types that target this content type\n */\nasync function copyRelationsFromOtherContentTypes({\n  trx,\n  uid,\n  publishedToDraftMap,\n}: {\n  trx: Knex;\n  uid: string;\n  publishedToDraftMap: Map<number, number>;\n}) {\n  const targetMeta = strapi.db.metadata.get(uid);\n  if (!targetMeta) {\n    return;\n  }\n\n  const publishedTargetIds = Array.from(publishedToDraftMap.keys())\n    .map((value) => normalizeId(value))\n    .filter((value): value is number => value != null);\n\n  if (publishedTargetIds.length === 0) {\n    return;\n  }\n\n  const draftTargetIds = Array.from(publishedToDraftMap.values())\n    .map((value) => normalizeId(value))\n    .filter((value): value is number => value != null);\n\n  const models = [\n    ...(Object.values(strapi.contentTypes) as any[]),\n    ...(Object.values(strapi.components) as any[]),\n  ];\n\n  for (const model of models) {\n    const dbModel = strapi.db.metadata.get(model.uid);\n    if (!dbModel) {\n      continue;\n    }\n\n    const sourceHasDraftAndPublish = Boolean(model.options?.draftAndPublish);\n\n    for (const attribute of Object.values(dbModel.attributes) as any) {\n      if (attribute.type !== 'relation' || attribute.target !== uid) {\n        continue;\n      }\n\n      const joinTable = attribute.joinTable;\n      if (!joinTable) {\n        continue;\n      }\n\n      // Component join tables are handled separately when cloning components.\n      if (joinTable.name.includes('_cmps')) {\n        continue;\n      }\n\n      // If the source content type also has draft/publish, its own cloning routine will recreate its relations.\n      if (sourceHasDraftAndPublish) {\n        continue;\n      }\n\n      const { name: sourceColumnName } = joinTable.joinColumn;\n      const { name: targetColumnName } = joinTable.inverseJoinColumn;\n\n      // Query existing relations by target IDs to avoid duplicates\n      const existingKeys = await getExistingRelationKeys({\n        trx,\n        joinTable,\n        sourceColumnName,\n        targetColumnName,\n        sourceIds: draftTargetIds,\n      });\n\n      const publishedIdChunks = chunkArray(publishedTargetIds, getBatchSize(trx, 1000));\n\n      for (const chunk of publishedIdChunks) {\n        const relationsQuery = trx(joinTable.name).select('*').whereIn(targetColumnName, chunk);\n\n        applyJoinTableOrdering(relationsQuery, joinTable, sourceColumnName);\n\n        const relations = await relationsQuery;\n        if (relations.length === 0) {\n          continue;\n        }\n\n        const newRelations: Array<Record<string, any>> = [];\n\n        for (const relation of relations) {\n          const newTargetId = getMappedValue(publishedToDraftMap, relation[targetColumnName]);\n          if (!newTargetId) {\n            continue;\n          }\n\n          const key = buildRelationKey(relation, sourceColumnName, newTargetId);\n          if (existingKeys.has(key)) {\n            continue;\n          }\n\n          existingKeys.add(key);\n\n          const { id, ...relationWithoutId } = relation;\n          newRelations.push({\n            ...relationWithoutId,\n            [targetColumnName]: newTargetId,\n          });\n        }\n\n        if (newRelations.length === 0) {\n          continue;\n        }\n\n        await insertRelationsWithDuplicateHandling({\n          trx,\n          tableName: joinTable.name,\n          relations: newRelations,\n          context: {\n            reason: 'duplicate-draft-target-relation',\n            sourceUid: model.uid,\n            targetUid: uid,\n          },\n        });\n      }\n    }\n  }\n}\n\n/**\n * Copy relations from this content type that target other content types (category 3)\n * Example: Article -> Categories/Tags\n */\nasync function copyRelationsToOtherContentTypes({\n  trx,\n  uid,\n  publishedToDraftMap,\n}: {\n  trx: Knex;\n  uid: string;\n  publishedToDraftMap: Map<number, number>;\n}) {\n  const meta = strapi.db.metadata.get(uid);\n  if (!meta) return;\n\n  const publishedIds = Array.from(publishedToDraftMap.keys());\n\n  // Cache target publishedToDraftMap to avoid duplicate calls for same target\n  const targetMapCache = new Map<string, Map<number, number> | null>();\n\n  for (const [attributeName, attribute] of Object.entries(meta.attributes) as Array<\n    [string, any]\n  >) {\n    if (attribute.type !== 'relation' || attribute.target === uid) {\n      // Skip self-referential relations (handled by copyRelationsForContentType)\n      continue;\n    }\n\n    const joinTable = attribute.joinTable;\n    if (!joinTable) {\n      continue;\n    }\n\n    // Skip component join tables - they are handled by copyComponentRelations\n    if (joinTable.name.includes('_cmps')) {\n      continue;\n    }\n\n    const { name: sourceColumnName } = joinTable.joinColumn;\n    const { name: targetColumnName } = joinTable.inverseJoinColumn;\n\n    // Get target content type's publishedToDraftMap if it has draft/publish (cached)\n    const targetUid = attribute.target;\n    if (!targetMapCache.has(targetUid)) {\n      const targetMeta = strapi.db.metadata.get(targetUid);\n      const targetMap = await buildPublishedToDraftMap({\n        trx,\n        uid: targetUid,\n        meta: targetMeta,\n        options: { requireDraftAndPublish: true },\n      });\n      targetMapCache.set(targetUid, targetMap);\n    }\n    const targetPublishedToDraftMap = targetMapCache.get(targetUid);\n\n    // Process in batches to avoid MySQL query size limits and SQLite expression tree limits\n    const publishedIdsChunks = chunkArray(publishedIds, getBatchSize(trx, 1000));\n\n    for (const publishedIdsChunk of publishedIdsChunks) {\n      // Get relations where the source is a published entry of our content type (in batches)\n      const relationsQuery = trx(joinTable.name)\n        .select('*')\n        .whereIn(sourceColumnName, publishedIdsChunk);\n\n      applyJoinTableOrdering(relationsQuery, joinTable, sourceColumnName);\n\n      const relations = await relationsQuery;\n\n      if (relations.length === 0) {\n        continue;\n      }\n\n      // Create new relations pointing to draft entries\n      // Remove the 'id' field to avoid duplicate key errors\n      const newRelations = relations\n        .map((relation) => {\n          const newSourceId = getMappedValue(publishedToDraftMap, relation[sourceColumnName]);\n\n          if (!newSourceId) {\n            return null;\n          }\n\n          // Map target ID to draft if target has draft/publish enabled\n          // This matches discard() behavior: drafts relate to drafts\n          let newTargetId = relation[targetColumnName];\n          if (targetPublishedToDraftMap) {\n            const mappedTargetId = getMappedValue(\n              targetPublishedToDraftMap,\n              relation[targetColumnName]\n            );\n            if (mappedTargetId !== undefined) {\n              newTargetId = mappedTargetId;\n            }\n            // If no draft mapping, keep published target (target might not have DP or was deleted)\n            // This will be fixed by fixExistingDraftRelations if needed\n          }\n\n          // Create new relation object without the 'id' field\n          const { id, ...relationWithoutId } = relation;\n          return {\n            ...relationWithoutId,\n            [sourceColumnName]: newSourceId,\n            [targetColumnName]: newTargetId,\n          };\n        })\n        .filter(Boolean);\n\n      const { relations: safeRelations, skippedIds } = await filterRelationsWithExistingTargets({\n        trx,\n        targetUid,\n        relations: newRelations as Array<Record<string, any>>,\n        getTargetId: (relation) => relation[targetColumnName],\n      });\n\n      recordSkippedRelations(\n        {\n          sourceUid: uid,\n          attributeName,\n          targetUid,\n          joinTable: joinTable.name,\n        },\n        skippedIds\n      );\n\n      if (safeRelations.length === 0) {\n        continue;\n      }\n\n      // Check for existing relations to avoid duplicates (similar to copyRelationsFromOtherContentTypes)\n      // This is important when the target doesn't have D&P, as copyRelationsFromOtherContentTypes\n      // may have already created some relations\n      const draftSourceIds = Array.from(publishedToDraftMap.values())\n        .map((value) => normalizeId(value))\n        .filter((value): value is number => value != null);\n\n      const existingKeys = await getExistingRelationKeys({\n        trx,\n        joinTable,\n        sourceColumnName,\n        targetColumnName,\n        sourceIds: draftSourceIds,\n      });\n\n      // Filter out relations that already exist\n      const relationsToInsert = safeRelations.filter((relation) => {\n        const targetId = normalizeId(relation[targetColumnName]) ?? relation[targetColumnName];\n        const key = buildRelationKey(relation, sourceColumnName, targetId);\n        return !existingKeys.has(key);\n      });\n\n      if (relationsToInsert.length > 0) {\n        await insertRelationsWithDuplicateHandling({\n          trx,\n          tableName: joinTable.name,\n          relations: relationsToInsert,\n          context: {\n            reason: 'duplicate-relation-check',\n            sourceUid: uid,\n            targetUid,\n          },\n        });\n      }\n    }\n  }\n}\n\n/**\n * Update JoinColumn relations (oneToOne, manyToOne foreign keys) to point to draft versions\n * This matches discard() behavior: when creating drafts, foreign keys should point to draft targets\n */\nasync function updateJoinColumnRelations({\n  db,\n  trx,\n  uid,\n}: {\n  db: Database;\n  trx: Knex;\n  uid: string;\n}) {\n  const meta = db.metadata.get(uid);\n  if (!meta) {\n    return;\n  }\n\n  // Create mapping from published entry ID to draft entry ID\n  const publishedToDraftMap = await buildPublishedToDraftMap({ trx, uid, meta });\n\n  if (!publishedToDraftMap || publishedToDraftMap.size === 0) {\n    return;\n  }\n\n  // Cache target publishedToDraftMap to avoid duplicate calls for same target\n  const targetMapCache = new Map<string, Map<number, number> | null>();\n\n  // Find all JoinColumn relations (oneToOne, manyToOne without joinTable)\n  for (const attribute of Object.values(meta.attributes) as any) {\n    if (attribute.type !== 'relation') {\n      continue;\n    }\n\n    // Skip relations with joinTable (handled by copyRelationsToOtherContentTypes)\n    if (attribute.joinTable) {\n      continue;\n    }\n\n    // Only handle oneToOne and manyToOne relations that use joinColumn\n    const joinColumn = attribute.joinColumn;\n    if (!joinColumn) {\n      continue;\n    }\n\n    const targetUid = attribute.target;\n    const foreignKeyColumn = joinColumn.name;\n\n    // Get target content type's publishedToDraftMap if it has draft/publish (cached)\n    if (!targetMapCache.has(targetUid)) {\n      const targetMeta = strapi.db.metadata.get(targetUid);\n      const targetMap = await buildPublishedToDraftMap({\n        trx,\n        uid: targetUid,\n        meta: targetMeta,\n        options: { requireDraftAndPublish: true },\n      });\n      targetMapCache.set(targetUid, targetMap);\n    }\n    const targetPublishedToDraftMap = targetMapCache.get(targetUid);\n\n    if (!targetPublishedToDraftMap) {\n      // Target doesn't have draft/publish, foreign keys are fine as-is\n      continue;\n    }\n\n    const draftIds = Array.from(publishedToDraftMap.values());\n    if (draftIds.length === 0) {\n      continue;\n    }\n\n    const draftIdsChunks = chunkArray(draftIds, getBatchSize(trx, 1000));\n\n    for (const draftIdsChunk of draftIdsChunks) {\n      // Get draft entries with their foreign key values\n      const draftEntriesWithFk = await trx(meta.tableName)\n        .select(['id', foreignKeyColumn])\n        .whereIn('id', draftIdsChunk)\n        .whereNotNull(foreignKeyColumn);\n\n      const updates = draftEntriesWithFk.reduce<\n        Array<{ id: number | string; draftTargetId: number | string }>\n      >((acc, draftEntry) => {\n        const publishedTargetIdRaw = draftEntry[foreignKeyColumn];\n        const normalizedPublishedTargetId = normalizeId(publishedTargetIdRaw);\n        const draftTargetId =\n          normalizedPublishedTargetId == null\n            ? undefined\n            : targetPublishedToDraftMap.get(normalizedPublishedTargetId);\n\n        if (draftTargetId != null && normalizeId(draftTargetId) !== normalizedPublishedTargetId) {\n          acc.push({ id: draftEntry.id as number | string, draftTargetId });\n        }\n\n        return acc;\n      }, []);\n\n      if (updates.length === 0) {\n        continue;\n      }\n\n      const caseFragments = updates.map(() => 'WHEN ? THEN ?').join(' ');\n      const idsPlaceholders = updates.map(() => '?').join(', ');\n\n      await trx.raw(\n        `UPDATE ?? SET ?? = CASE ?? ${caseFragments} ELSE ?? END WHERE ?? IN (${idsPlaceholders})`,\n        [\n          meta.tableName,\n          foreignKeyColumn,\n          'id',\n          ...updates.flatMap(({ id, draftTargetId }) => [id, draftTargetId]),\n          foreignKeyColumn,\n          'id',\n          ...updates.map(({ id }) => id),\n        ]\n      );\n    }\n  }\n}\n\n/**\n * Fixes existing v4 draft entries' join table relations by converting published targets to draft targets.\n * This ensures that draft entries point to draft targets, not published ones.\n */\nasync function fixExistingDraftRelations({ trx, uid }: { trx: Knex; uid: string }) {\n  const meta = strapi.db.metadata.get(uid);\n  if (!meta) {\n    return;\n  }\n\n  // Get all draft entity IDs (including existing v4 drafts, not just newly created ones)\n  const draftEntities = await trx(meta.tableName).select('id').whereNull('published_at');\n\n  if (draftEntities.length === 0) {\n    return;\n  }\n\n  const draftIds = draftEntities.map((e) => Number(e.id));\n  const draftIdsChunks = chunkArray(draftIds, getBatchSize(trx, 1000));\n  const draftMapCache = new Map<string, Map<number, number> | null>();\n\n  for (const [attributeName, attribute] of Object.entries(meta.attributes) as Array<\n    [string, any]\n  >) {\n    if (attribute.type !== 'relation') {\n      continue;\n    }\n\n    const joinTable = attribute.joinTable;\n    if (!joinTable) {\n      continue;\n    }\n\n    // Skip component join tables - they are handled by fixExistingDraftComponentRelations\n    if (joinTable.name.includes('_cmps')) {\n      continue;\n    }\n\n    // Skip self-referential relations - they're handled by copyRelationsForContentType\n    if (attribute.target === uid) {\n      continue;\n    }\n\n    const targetUid = attribute.target;\n    if (!targetUid) {\n      continue;\n    }\n\n    const targetContentType = strapi.contentTypes[targetUid];\n    const targetHasDP = targetContentType?.options?.draftAndPublish;\n    if (!targetHasDP) {\n      continue;\n    }\n\n    const { name: sourceColumnName } = joinTable.joinColumn;\n    const { name: targetColumnName } = joinTable.inverseJoinColumn;\n\n    // Get draft map for target to convert published targets to draft targets\n    const targetDraftMap = await getDraftMapForTarget(trx, targetUid, draftMapCache);\n    if (!targetDraftMap || targetDraftMap.size === 0) {\n      continue;\n    }\n\n    // Get target publication states\n    const targetMeta = strapi.db.metadata.get(targetUid);\n    if (!targetMeta) {\n      continue;\n    }\n\n    for (const draftIdsChunk of draftIdsChunks) {\n      // Get all relations for these draft entries\n      const relations = await trx(joinTable.name)\n        .whereIn(sourceColumnName, draftIdsChunk)\n        .select('id', sourceColumnName, targetColumnName);\n\n      if (relations.length === 0) {\n        continue;\n      }\n\n      const targetIds = [...new Set(relations.map((r) => r[targetColumnName]).filter(Boolean))];\n      if (targetIds.length === 0) {\n        continue;\n      }\n\n      const targets = await trx(targetMeta.tableName)\n        .whereIn('id', targetIds)\n        .select('id', 'published_at');\n\n      const targetPublicationState = new Map(\n        targets.map((t) => [Number(t.id), t.published_at !== null ? 'published' : 'draft'])\n      );\n\n      // Find relations from draft entries to published targets and convert them\n      const relationsToUpdate: Array<{\n        relationId: number;\n        sourceId: number;\n        oldTargetId: number;\n        newTargetId: number;\n      }> = [];\n\n      for (const relation of relations) {\n        const targetId = Number(relation[targetColumnName]);\n        const targetState = targetPublicationState.get(targetId);\n\n        if (targetState === 'published') {\n          // This is a relation from a draft entry to a published target - convert to draft target\n          const draftTargetId = targetDraftMap.get(targetId);\n          if (draftTargetId != null) {\n            relationsToUpdate.push({\n              relationId: relation.id,\n              sourceId: Number(relation[sourceColumnName]),\n              oldTargetId: targetId,\n              newTargetId: draftTargetId,\n            });\n          }\n        }\n      }\n\n      if (relationsToUpdate.length > 0) {\n        debug(\n          `[fixExistingDraftRelations] ${uid}: Converting ${relationsToUpdate.length} relations from draft entries to published targets -> draft targets (attribute: ${attributeName}, target: ${targetUid})`\n        );\n\n        const updateChunks = chunkArray(relationsToUpdate, getBatchSize(trx, 1000));\n        for (const updateChunk of updateChunks) {\n          // Preload existing relations for this chunk to avoid N+1 lookups.\n          const existingRelationMap = await buildExistingRelationMap({\n            trx,\n            tableName: joinTable.name,\n            sourceColumnName,\n            targetColumnName,\n            updates: updateChunk.map((update) => ({\n              sourceId: update.sourceId,\n              newTargetId: update.newTargetId,\n            })),\n            batchSize: getBatchSize(trx, 100),\n          });\n\n          for (const update of updateChunk) {\n            try {\n              // Check if relation to draft target already exists\n              const key = `${update.sourceId}_${update.newTargetId}`;\n              const existingRelationId = existingRelationMap.get(key);\n\n              if (existingRelationId && existingRelationId !== update.relationId) {\n                // If relation to draft target already exists, delete the published target relation\n                await trx(joinTable.name).where('id', update.relationId).delete();\n                debug(\n                  `[fixExistingDraftRelations] ${uid}: Deleted relation ${update.relationId} (entry ${update.sourceId} -> published target ${update.oldTargetId}), draft relation already exists (-> ${update.newTargetId})`\n                );\n              } else {\n                // Update the relation to point to draft target\n                const updated = await trx(joinTable.name)\n                  .where('id', update.relationId)\n                  .update({ [targetColumnName]: update.newTargetId });\n                if (updated > 0) {\n                  debug(\n                    `[fixExistingDraftRelations] ${uid}: Updated relation ${update.relationId} (entry ${update.sourceId} -> published target ${update.oldTargetId} -> draft target ${update.newTargetId})`\n                  );\n                }\n              }\n            } catch (error: any) {\n              // If update fails due to duplicate key, try deleting the published target relation instead\n              if (isDuplicateEntryError(error)) {\n                await trx(joinTable.name).where('id', update.relationId).delete();\n                debug(\n                  `[fixExistingDraftRelations] ${uid}: Deleted relation ${update.relationId} due to duplicate key error (entry ${update.sourceId})`\n                );\n              } else {\n                throw error;\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n}\n\n/**\n * Fixes existing v4 draft entries' component relations by converting published targets to draft targets.\n * This ensures that draft components point to draft targets, not published ones.\n */\nasync function fixExistingDraftComponentRelations({ trx, uid }: { trx: Knex; uid: string }) {\n  const meta = strapi.db.metadata.get(uid);\n  if (!meta) {\n    return;\n  }\n\n  const contentType = strapi.contentTypes[uid as keyof typeof strapi.contentTypes] as any;\n  const collectionName = contentType?.collectionName;\n  if (!collectionName) {\n    return;\n  }\n\n  const identifiers = strapi.db.metadata.identifiers;\n  const joinTableName = getComponentJoinTableName(collectionName, identifiers);\n  const entityIdColumn = getComponentJoinColumnEntityName(identifiers);\n  const componentIdColumn = getComponentJoinColumnInverseName(identifiers);\n  const componentTypeColumn = getComponentTypeColumn(identifiers);\n\n  const hasTable = await trx.schema.hasTable(joinTableName);\n  if (!hasTable) {\n    return;\n  }\n\n  // Get all draft entity IDs (including existing v4 drafts, not just newly created ones)\n  const draftEntities = await trx(meta.tableName).select('id').whereNull('published_at');\n\n  if (draftEntities.length === 0) {\n    return;\n  }\n\n  const draftIds = draftEntities.map((e) => Number(e.id));\n  const draftIdsChunks = chunkArray(draftIds, getBatchSize(trx, 1000));\n\n  for (const draftIdsChunk of draftIdsChunks) {\n    // Get components that belong to draft entities\n    const componentRelations = await trx(joinTableName)\n      .select('*')\n      .whereIn(entityIdColumn, draftIdsChunk);\n\n    if (componentRelations.length === 0) {\n      continue;\n    }\n\n    const componentTypes = [...new Set(componentRelations.map((r) => r[componentTypeColumn]))];\n    const draftMapCache = new Map<string, Map<number, number> | null>();\n\n    for (const componentType of componentTypes) {\n      const componentMeta = getComponentMetadataByUid(componentType);\n      if (!componentMeta) continue;\n\n      for (const [, attr] of Object.entries(componentMeta.attributes || {}) as Array<\n        [string, any]\n      >) {\n        if (attr.type !== 'relation' || !attr.joinTable) continue;\n\n        const targetUid = attr.target;\n        if (!targetUid) continue;\n\n        const targetContentType = strapi.contentTypes[targetUid];\n        const targetHasDP = targetContentType?.options?.draftAndPublish;\n        if (!targetHasDP) continue;\n\n        const relationJoinTable = attr.joinTable.name;\n        const sourceColumn = attr.joinTable.joinColumn.name;\n        const targetColumn = attr.joinTable.inverseJoinColumn.name;\n\n        const hasRelationTable = await trx.schema.hasTable(relationJoinTable);\n        if (!hasRelationTable) continue;\n\n        // Get component IDs that belong to draft entities\n        const componentIds = componentRelations\n          .filter((r) => r[componentTypeColumn] === componentType)\n          .map((r) => Number(r[componentIdColumn]));\n\n        if (componentIds.length === 0) continue;\n\n        // Get all relations for these components\n        const relations = await trx(relationJoinTable)\n          .whereIn(sourceColumn, componentIds)\n          .select('id', sourceColumn, targetColumn);\n\n        if (relations.length === 0) continue;\n\n        // Get target publication states\n        const targetMeta = strapi.db.metadata.get(targetUid);\n        if (!targetMeta) continue;\n\n        const targetIds = [...new Set(relations.map((r) => r[targetColumn]).filter(Boolean))];\n        if (targetIds.length === 0) continue;\n\n        const targets = await trx(targetMeta.tableName)\n          .whereIn('id', targetIds)\n          .select('id', 'published_at');\n\n        const targetPublicationState = new Map(\n          targets.map((t) => [Number(t.id), t.published_at !== null ? 'published' : 'draft'])\n        );\n\n        // Get draft map for target to convert published targets to draft targets\n        const targetDraftMap = await getDraftMapForTarget(trx, targetUid, draftMapCache);\n        if (!targetDraftMap || targetDraftMap.size === 0) continue;\n\n        // Find relations from draft components to published targets and convert them\n        const relationsToUpdate: Array<{\n          relationId: number;\n          componentId: number;\n          oldTargetId: number;\n          newTargetId: number;\n        }> = [];\n\n        for (const relation of relations) {\n          const targetId = Number(relation[targetColumn]);\n          const targetState = targetPublicationState.get(targetId);\n\n          if (targetState === 'published') {\n            // This is a relation from a draft component to a published target - convert to draft target\n            const draftTargetId = targetDraftMap.get(targetId);\n            if (draftTargetId != null) {\n              relationsToUpdate.push({\n                relationId: relation.id,\n                componentId: Number(relation[sourceColumn]),\n                oldTargetId: targetId,\n                newTargetId: draftTargetId,\n              });\n            }\n          }\n        }\n\n        if (relationsToUpdate.length > 0) {\n          debug(\n            `[fixExistingDraftComponentRelations] ${uid}: Converting ${relationsToUpdate.length} relations from draft components to published targets -> draft targets (component type: ${componentType}, target: ${targetUid})`\n          );\n\n          const updateChunks = chunkArray(relationsToUpdate, getBatchSize(trx, 1000));\n          for (const updateChunk of updateChunks) {\n            // Preload existing relations for this chunk to avoid N+1 lookups.\n            const existingRelationMap = await buildExistingRelationMap({\n              trx,\n              tableName: relationJoinTable,\n              sourceColumnName: sourceColumn,\n              targetColumnName: targetColumn,\n              updates: updateChunk.map((update) => ({\n                sourceId: update.componentId,\n                newTargetId: update.newTargetId,\n              })),\n              batchSize: getBatchSize(trx, 100),\n            });\n\n            for (const update of updateChunk) {\n              try {\n                // Check if relation to draft target already exists\n                const key = `${update.componentId}_${update.newTargetId}`;\n                const existingRelationId = existingRelationMap.get(key);\n\n                if (existingRelationId && existingRelationId !== update.relationId) {\n                  // If relation to draft target already exists, delete the published target relation\n                  await trx(relationJoinTable).where('id', update.relationId).delete();\n                  debug(\n                    `[fixExistingDraftComponentRelations] ${uid}: Deleted relation ${update.relationId} (component ${update.componentId} -> published target ${update.oldTargetId}), draft relation already exists (-> ${update.newTargetId})`\n                  );\n                } else {\n                  // Update the relation to point to draft target\n                  const updated = await trx(relationJoinTable)\n                    .where('id', update.relationId)\n                    .update({ [targetColumn]: update.newTargetId });\n                  if (updated > 0) {\n                    debug(\n                      `[fixExistingDraftComponentRelations] ${uid}: Updated relation ${update.relationId} (component ${update.componentId} -> published target ${update.oldTargetId} -> draft target ${update.newTargetId})`\n                    );\n                  }\n                }\n              } catch (error: any) {\n                // If update fails due to duplicate key, try deleting the published target relation instead\n                if (isDuplicateEntryError(error)) {\n                  await trx(relationJoinTable).where('id', update.relationId).delete();\n                  debug(\n                    `[fixExistingDraftComponentRelations] ${uid}: Deleted relation ${update.relationId} due to duplicate key error (component ${update.componentId})`\n                  );\n                } else {\n                  throw error;\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n}\n\n/**\n * Fix published entities' component relations so they point to published targets (not draft).\n * After duplicating nested components, the published tree keeps the original components;\n * their relation _lnk rows must point to published targets so the published view resolves them.\n */\nasync function fixPublishedComponentRelationTargets({ trx, uid }: { trx: Knex; uid: string }) {\n  const meta = strapi.db.metadata.get(uid);\n  if (!meta) return;\n\n  const contentType = strapi.contentTypes[uid as keyof typeof strapi.contentTypes] as any;\n  const collectionName = contentType?.collectionName;\n  if (!collectionName) return;\n\n  const identifiers = strapi.db.metadata.identifiers;\n  const joinTableName = getComponentJoinTableName(collectionName, identifiers);\n  const entityIdColumn = getComponentJoinColumnEntityName(identifiers);\n  const componentIdColumn = getComponentJoinColumnInverseName(identifiers);\n  const componentTypeColumn = getComponentTypeColumn(identifiers);\n\n  if (!(await ensureTableExists(trx, joinTableName))) return;\n\n  const publishedIds = (await trx(meta.tableName).select('id').whereNotNull('published_at')).map(\n    (r) => Number(r.id)\n  );\n  if (publishedIds.length === 0) return;\n\n  const reverseMapCache = new Map<string, Map<number, number> | null>();\n\n  const typeToIds = new Map<string, Set<number>>();\n  let currentLevelByType = new Map<string, number[]>();\n  currentLevelByType.set(uid, publishedIds);\n  const maxLevels = 10;\n  for (let level = 0; level < maxLevels; level += 1) {\n    const nextLevelByType = new Map<string, number[]>();\n    if (level === 0) {\n      const chunks = chunkArray(publishedIds, getBatchSize(trx, 1000));\n      for (const chunk of chunks) {\n        const rows = await trx(joinTableName)\n          .select(componentIdColumn, componentTypeColumn)\n          .whereIn(entityIdColumn, chunk);\n        for (const row of rows) {\n          const type = row[componentTypeColumn];\n          const id = Number(row[componentIdColumn]);\n          if (!type || Number.isNaN(id)) continue;\n          if (!typeToIds.has(type)) typeToIds.set(type, new Set());\n          typeToIds.get(type)!.add(id);\n          if (!nextLevelByType.has(type)) nextLevelByType.set(type, []);\n          nextLevelByType.get(type)!.push(id);\n        }\n      }\n    } else {\n      for (const [compType, ids] of currentLevelByType.entries()) {\n        if (compType === uid) continue;\n        const compSchema = strapi.components[compType as keyof typeof strapi.components] as any;\n        if (!compSchema?.collectionName) continue;\n        const nestedTable = getComponentJoinTableName(compSchema.collectionName, identifiers);\n        if (!(await ensureTableExists(trx, nestedTable))) continue;\n        const idChunks = chunkArray(ids, getBatchSize(trx, 1000));\n        for (const idChunk of idChunks) {\n          const rows = await trx(nestedTable)\n            .select(componentIdColumn, componentTypeColumn)\n            .whereIn(entityIdColumn, idChunk);\n          for (const row of rows) {\n            const type = row[componentTypeColumn];\n            const id = Number(row[componentIdColumn]);\n            if (!type || Number.isNaN(id)) continue;\n            if (!typeToIds.has(type)) typeToIds.set(type, new Set());\n            typeToIds.get(type)!.add(id);\n            if (!nextLevelByType.has(type)) nextLevelByType.set(type, []);\n            nextLevelByType.get(type)!.push(id);\n          }\n        }\n      }\n    }\n    if (nextLevelByType.size === 0) break;\n    currentLevelByType = nextLevelByType;\n  }\n\n  for (const [componentType, componentIds] of typeToIds.entries()) {\n    const componentMeta = getComponentMetadataByUid(componentType);\n    if (!componentMeta) continue;\n    const ids = Array.from(componentIds);\n    if (ids.length === 0) continue;\n\n    for (const [, attr] of Object.entries(componentMeta.attributes || {}) as Array<[string, any]>) {\n      if (attr.type !== 'relation' || !attr.joinTable) continue;\n      const targetUid = attr.target;\n      if (!targetUid) continue;\n      const targetContentType = strapi.contentTypes[targetUid];\n      if (!targetContentType?.options?.draftAndPublish) continue;\n\n      const relationJoinTable = attr.joinTable.name;\n      const sourceColumn = attr.joinTable.joinColumn.name;\n      const targetColumn = attr.joinTable.inverseJoinColumn.name;\n      if (!(await ensureTableExists(trx, relationJoinTable))) continue;\n\n      const relations = await trx(relationJoinTable)\n        .whereIn(sourceColumn, ids)\n        .select('id', sourceColumn, targetColumn);\n      if (relations.length === 0) continue;\n\n      const targetMeta = strapi.db.metadata.get(targetUid);\n      if (!targetMeta) continue;\n      const targetIdList = [...new Set(relations.map((r) => r[targetColumn]).filter(Boolean))];\n      if (targetIdList.length === 0) continue;\n\n      const targets = await trx(targetMeta.tableName)\n        .whereIn('id', targetIdList)\n        .select('id', 'published_at');\n      const targetState = new Map(\n        targets.map((t) => [Number(t.id), t.published_at !== null ? 'published' : 'draft'])\n      );\n      const draftToPublished = await getDraftToPublishedMap(trx, targetUid, reverseMapCache);\n      if (!draftToPublished || draftToPublished.size === 0) continue;\n\n      const relationsToUpdate: Array<{\n        relationId: number;\n        sourceId: number;\n        oldTargetId: number;\n        newTargetId: number;\n      }> = [];\n      for (const relation of relations) {\n        const targetId = Number(relation[targetColumn]);\n        if (targetState.get(targetId) !== 'draft') continue;\n        const publishedId = draftToPublished.get(targetId);\n        if (publishedId == null) continue;\n        relationsToUpdate.push({\n          relationId: relation.id,\n          sourceId: Number(relation[sourceColumn]),\n          oldTargetId: targetId,\n          newTargetId: publishedId,\n        });\n      }\n\n      if (relationsToUpdate.length > 0) {\n        const updateChunks = chunkArray(relationsToUpdate, getBatchSize(trx, 100));\n        for (const updateChunk of updateChunks) {\n          const existingRelationMap = await buildExistingRelationMap({\n            trx,\n            tableName: relationJoinTable,\n            sourceColumnName: sourceColumn,\n            targetColumnName: targetColumn,\n            updates: updateChunk.map((u) => ({ sourceId: u.sourceId, newTargetId: u.newTargetId })),\n            batchSize: getBatchSize(trx, 100),\n          });\n\n          for (const update of updateChunk) {\n            const key = `${update.sourceId}_${update.newTargetId}`;\n            const existingRelationId = existingRelationMap.get(key);\n\n            if (existingRelationId != null && existingRelationId !== update.relationId) {\n              await trx(relationJoinTable).where('id', update.relationId).delete();\n              continue;\n            }\n            try {\n              await trx(relationJoinTable)\n                .where('id', update.relationId)\n                .update({ [targetColumn]: update.newTargetId });\n              existingRelationMap.set(key, update.relationId);\n            } catch (error: any) {\n              if (isDuplicateEntryError(error)) {\n                await trx(relationJoinTable).where('id', update.relationId).delete();\n              } else {\n                throw error;\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n}\n\n/**\n * Copy component relations from published entries to draft entries\n */\nasync function copyComponentRelations({\n  trx,\n  uid,\n  publishedToDraftMap,\n}: {\n  trx: Knex;\n  uid: string;\n  publishedToDraftMap: Map<number, number>;\n}) {\n  const meta = strapi.db.metadata.get(uid);\n  if (!meta) {\n    return;\n  }\n\n  // Get collectionName from content type schema (Meta only has tableName which may be shortened)\n  const contentType = strapi.contentTypes[uid as keyof typeof strapi.contentTypes] as any;\n  const collectionName = contentType?.collectionName;\n  if (!collectionName) {\n    return;\n  }\n\n  const identifiers = strapi.db.metadata.identifiers;\n  const joinTableName = getComponentJoinTableName(collectionName, identifiers);\n  const entityIdColumn = getComponentJoinColumnEntityName(identifiers);\n  const componentIdColumn = getComponentJoinColumnInverseName(identifiers);\n  const componentTypeColumn = getComponentTypeColumn(identifiers);\n  const fieldColumn = identifiers.FIELD_COLUMN;\n\n  // Check if component join table exists\n  const hasTable = await trx.schema.hasTable(joinTableName);\n  if (!hasTable) {\n    return;\n  }\n\n  const publishedIds = Array.from(publishedToDraftMap.keys());\n\n  // Process in batches to avoid MySQL query size limits and SQLite expression tree limits\n  const publishedIdsChunks = chunkArray(publishedIds, getBatchSize(trx, 1000));\n\n  for (const publishedIdsChunk of publishedIdsChunks) {\n    // Get component relations for published entries\n    const componentRelations = await trx(joinTableName)\n      .select('*')\n      .whereIn(entityIdColumn, publishedIdsChunk);\n\n    if (componentRelations.length === 0) {\n      continue;\n    }\n\n    const componentCloneCache = new Map<string, Map<string, number>>();\n    const clonedComponentPairsCache: ClonedComponentPairsCache = new Map();\n    const componentTargetDraftMapCache = new Map<string, Map<number, number> | null>();\n    const componentTargetReverseMapCache = new Map<string, Map<number, number> | null>();\n    const componentHierarchyCaches: ComponentHierarchyCaches = {\n      parentInstanceCache: new Map(),\n      ancestorDpCache: new Map(),\n      parentDpCache: new Map(),\n    };\n\n    // Filter component relations: only propagate if component's parent in the component hierarchy doesn't have draft/publish\n    // This matches discardDraft() behavior via shouldPropagateComponentRelationToNewVersion\n    //\n    // The logic: find what contains this component instance (could be a content type or another component).\n    // If it's a component, recursively check its parents. If any parent in the chain has DP, filter out the relation.\n    // Filter in batches to cap memory use and DB fan-out when relations are large.\n    const filteredComponentRelations: Array<Record<string, any> | null> = [];\n    const filterBatches = chunkArray(componentRelations, getBatchSize(trx, 100));\n    for (const batch of filterBatches) {\n      const batchResults = await Promise.all(\n        batch.map(async (relation) => {\n          const componentId = relation[componentIdColumn];\n          const componentType = relation[componentTypeColumn];\n          const entityId = relation[entityIdColumn];\n\n          const componentSchema = strapi.components[\n            componentType as keyof typeof strapi.components\n          ] as any;\n\n          if (!componentSchema) {\n            debug(\n              `[copyComponentRelations] ${uid}: Keeping relation - unknown component type ${componentType} (entity: ${entityId}, componentId: ${componentId})`\n            );\n            return relation;\n          }\n\n          const componentParent = await findComponentParentInstance(\n            trx,\n            identifiers,\n            componentSchema.uid,\n            componentId,\n            uid,\n            componentHierarchyCaches\n          );\n\n          if (!componentParent) {\n            debug(\n              `[copyComponentRelations] ${uid}: Keeping relation - component ${componentType} (id: ${componentId}) is directly on entity ${entityId} (no nested parent found)`\n            );\n            return relation;\n          }\n\n          debug(\n            `[copyComponentRelations] ${uid}: Component ${componentType} (id: ${componentId}, entity: ${entityId}) has parent in hierarchy: ${componentParent.uid} (parentId: ${componentParent.parentId})`\n          );\n\n          const hasDPParent = await hasDraftPublishAncestorForParent(\n            trx,\n            identifiers,\n            componentParent,\n            componentHierarchyCaches\n          );\n\n          if (hasDPParent) {\n            debug(\n              `[copyComponentRelations] Filtering: component ${componentType} (id: ${componentId}, entity: ${entityId}) has DP parent in hierarchy (${componentParent.uid})`\n            );\n            return null;\n          }\n\n          debug(\n            `[copyComponentRelations] ${uid}: Keeping relation - component ${componentType} (id: ${componentId}, entity: ${entityId}) has no DP parent in hierarchy`\n          );\n\n          return relation;\n        })\n      );\n\n      filteredComponentRelations.push(...batchResults);\n    }\n\n    // Filter out null values (filtered relations)\n    const relationsToProcess = filteredComponentRelations.filter(Boolean) as Array<\n      Record<string, any>\n    >;\n\n    const filteredCount = componentRelations.length - relationsToProcess.length;\n    if (filteredCount > 0) {\n      debug(\n        `[copyComponentRelations] ${uid}: Filtered ${filteredCount} of ${componentRelations.length} component relations (removed ${filteredCount} with DP parents)`\n      );\n    }\n\n    // Create new component relations for draft entries\n    // Remove the 'id' field to avoid duplicate key errors\n    const mappedRelations = (\n      await Promise.all(\n        relationsToProcess.map(async (relation) => {\n          const newEntityId = getMappedValue(publishedToDraftMap, relation[entityIdColumn]);\n\n          if (!newEntityId) {\n            return null;\n          }\n\n          const componentId = relation[componentIdColumn];\n          const componentType = relation[componentTypeColumn];\n          const componentKey = `${componentId}:${newEntityId}`;\n\n          let cloneMap = componentCloneCache.get(componentType);\n          if (!cloneMap) {\n            cloneMap = new Map();\n            componentCloneCache.set(componentType, cloneMap);\n          }\n\n          let newComponentId = cloneMap.get(componentKey);\n\n          if (!newComponentId) {\n            newComponentId = await cloneComponentInstance({\n              trx,\n              componentUid: componentType,\n              componentId: Number(componentId),\n              parentUid: uid,\n              parentPublishedToDraftMap: publishedToDraftMap,\n              draftMapCache: componentTargetDraftMapCache,\n              clonedComponentPairsCache,\n              isForDraftEntity: true,\n              reverseMapCache: componentTargetReverseMapCache,\n            });\n\n            cloneMap.set(componentKey, newComponentId);\n          }\n\n          const { id, ...relationWithoutId } = relation;\n          return {\n            ...relationWithoutId,\n            [entityIdColumn]: newEntityId,\n            [componentIdColumn]: newComponentId,\n          };\n        })\n      )\n    ).filter(Boolean) as Array<Record<string, any>>;\n\n    // Deduplicate relations based on the unique constraint columns\n    // This prevents duplicates within the same batch that could cause conflicts\n    const uniqueKeyMap = new Map<string, Record<string, any>>();\n    for (const relation of mappedRelations) {\n      const uniqueKey = `${relation[entityIdColumn]}_${relation[componentIdColumn]}_${relation[fieldColumn]}_${relation[componentTypeColumn]}`;\n      if (!uniqueKeyMap.has(uniqueKey)) {\n        uniqueKeyMap.set(uniqueKey, relation);\n      }\n    }\n    const deduplicatedRelations = Array.from(uniqueKeyMap.values());\n\n    if (deduplicatedRelations.length === 0) {\n      continue;\n    }\n\n    // Check which relations already exist in the database to avoid conflicts\n    // We need to check all unique constraint columns (entity_id, cmp_id, field, component_type)\n    // Batch the check to avoid SQLite expression tree depth limits\n    // Use smaller batches for OR queries (50 for SQLite, 100 for others)\n    const batchSize = getBatchSize(trx, 50);\n    const relationChunks = chunkArray(deduplicatedRelations, batchSize);\n    const existingKeys = new Set<string>();\n\n    for (const relationChunk of relationChunks) {\n      const existingRelations = await trx(joinTableName)\n        .select([entityIdColumn, componentIdColumn, fieldColumn, componentTypeColumn])\n        .where((qb) => {\n          // Build OR conditions for each relation in this chunk\n          for (const relation of relationChunk) {\n            qb.orWhere((subQb) => {\n              subQb\n                .where(entityIdColumn, relation[entityIdColumn])\n                .where(componentIdColumn, relation[componentIdColumn])\n                .where(fieldColumn, relation[fieldColumn])\n                .where(componentTypeColumn, relation[componentTypeColumn]);\n            });\n          }\n        });\n\n      // Add existing relation keys to the set\n      for (const existing of existingRelations) {\n        const key = `${existing[entityIdColumn]}_${existing[componentIdColumn]}_${existing[fieldColumn]}_${existing[componentTypeColumn]}`;\n        existingKeys.add(key);\n      }\n    }\n\n    // Filter out relations that already exist\n    const newComponentRelations = deduplicatedRelations.filter((relation) => {\n      const key = `${relation[entityIdColumn]}_${relation[componentIdColumn]}_${relation[fieldColumn]}_${relation[componentTypeColumn]}`;\n      return !existingKeys.has(key);\n    });\n\n    if (newComponentRelations.length > 0) {\n      // Insert component relations with PostgreSQL-specific ON CONFLICT handling\n      // Component relations use a different conflict resolution than regular relations\n      const client = trx.client.config.client;\n\n      if (client === 'postgres' || client === 'pg') {\n        // PostgreSQL: Batch insert with ON CONFLICT DO NOTHING for better throughput.\n        const relationChunks = chunkArray(newComponentRelations, getBatchSize(trx, 500));\n        let insertedCount = 0;\n        for (const relationChunk of relationChunks) {\n          await trx(joinTableName)\n            .insert(relationChunk)\n            .onConflict([entityIdColumn, componentIdColumn, fieldColumn, componentTypeColumn])\n            .ignore();\n          insertedCount += relationChunk.length;\n        }\n        if (insertedCount > 0) {\n          debug(\n            `[copyComponentRelations] ${uid}: Attempted to insert ${insertedCount} component relations (duplicates ignored)`\n          );\n        }\n      } else {\n        // MySQL and SQLite: use standard insert with duplicate handling\n        await insertRelationsWithDuplicateHandling({\n          trx,\n          tableName: joinTableName,\n          relations: newComponentRelations,\n          context: {\n            reason: 'component-relation-insert',\n            sourceUid: uid,\n          },\n        });\n      }\n    }\n\n    // Copy media morph rows for cloned components so draft components have the same media as published\n    const morphInfo = getUploadMorphTableInfo();\n    if (morphInfo) {\n      for (const [componentType, cloneMap] of clonedComponentPairsCache.entries()) {\n        const pairs: Array<{ originalId: number; draftId: number }> = [];\n        for (const [key, newComponentId] of cloneMap.entries()) {\n          const originalId = Number(key.split(':')[0]);\n          if (!Number.isNaN(originalId)) {\n            pairs.push({ originalId, draftId: newComponentId });\n          }\n        }\n        if (pairs.length > 0) {\n          await copyMorphRowsByPairs({\n            trx,\n            tableName: morphInfo.tableName,\n            columnToRewrite: morphInfo.relatedIdColumnName,\n            pairs,\n            filter: {\n              column: morphInfo.relatedTypeColumnName,\n              value: componentType,\n            },\n            contextReason: 'media-morph-draft-components',\n          });\n        }\n      }\n    }\n\n    // Copy any other morph relations where cloned components are the source (morphToOne/morphToMany)\n    await copySourceSideMorphRelationsForClonedComponents({\n      trx,\n      clonedComponentPairsCache,\n    });\n  }\n}\n\n/**\n * 2 pass migration to create the draft entries for all the published entries.\n * And then copy relations directly using database queries.\n */\nconst migrateUp = async (trx: Knex, db: Database) => {\n  strapi.log.info('[discard-drafts] Migration started');\n  const dpModels = [];\n  for (const meta of db.metadata.values()) {\n    const hasDP = await hasDraftAndPublish(trx, meta);\n    if (hasDP) {\n      dpModels.push(meta);\n    }\n  }\n\n  debug(`Found ${dpModels.length} draft/publish content types to process`);\n\n  /**\n   * Create plain draft entries for all the entries that were published.\n   */\n  strapi.log.info('[discard-drafts] Stage 1/5 – cloning published entries into draft rows');\n  for (const model of dpModels) {\n    debug(` • cloning scalars for ${model.uid}`);\n    await copyPublishedEntriesToDraft({ db, trx, uid: model.uid });\n  }\n  strapi.log.info('[discard-drafts] Stage 1/5 complete');\n\n  /**\n   * Copy relations from published entries to draft entries using direct database queries.\n   * This is much more efficient than calling discardDraft for each entry.\n   */\n  strapi.log.info('[discard-drafts] Stage 2/5 – copying relations and components to drafts');\n  for (const model of dpModels) {\n    debug(` • copying relations for ${model.uid}`);\n    await copyRelationsToDrafts({ db, trx, uid: model.uid });\n  }\n  flushSkippedRelationLogs();\n  strapi.log.info('[discard-drafts] Stage 2/5 complete');\n\n  /**\n   * Fix existing v4 draft entries' join table relations to ensure they point to draft targets.\n   * In v4, draft entries might have had relations pointing to published targets. These need\n   * to be converted to point to the draft versions of those targets.\n   */\n  strapi.log.info('[discard-drafts] Stage 3/5 – fixing existing draft relations');\n  for (const model of dpModels) {\n    debug(` • fixing existing draft relations for ${model.uid}`);\n    await fixExistingDraftRelations({ trx, uid: model.uid });\n  }\n  strapi.log.info('[discard-drafts] Stage 3/5 complete');\n\n  /**\n   * Fix existing v4 draft entries' component relations to ensure they point to draft targets.\n   * In v4, draft entries might have had components pointing to published targets. These need\n   * to be converted to point to the draft versions of those targets.\n   */\n  strapi.log.info('[discard-drafts] Stage 4/5 – fixing existing draft component relations');\n  for (const model of dpModels) {\n    debug(` • fixing existing draft component relations for ${model.uid}`);\n    await fixExistingDraftComponentRelations({ trx, uid: model.uid });\n  }\n  strapi.log.info('[discard-drafts] Stage 4/5 complete');\n\n  /**\n   * Fix published entities' component relations to point to published targets (not draft).\n   * Ensures the published view can resolve nested component relations after duplication.\n   */\n  strapi.log.info(\n    '[discard-drafts] Stage 4b/5 – fixing published component relations to published targets'\n  );\n  for (const model of dpModels) {\n    debug(` • fixing published component relations for ${model.uid}`);\n    await fixPublishedComponentRelationTargets({ trx, uid: model.uid });\n  }\n  strapi.log.info('[discard-drafts] Stage 4b/5 complete');\n\n  /**\n   * Update JoinColumn relations (foreign keys) to point to draft versions\n   * This matches discard() behavior: drafts relate to drafts\n   */\n  strapi.log.info('[discard-drafts] Stage 5/5 – updating foreign key references to draft targets');\n  for (const model of dpModels) {\n    debug(` • updating join columns for ${model.uid}`);\n    await updateJoinColumnRelations({ db, trx, uid: model.uid });\n  }\n  strapi.log.info('[discard-drafts] Stage 5/5 complete');\n\n  strapi.log.info('[discard-drafts] Migration completed successfully');\n};\n\n/**\n * Load a batch of versions to discard.\n *\n * Versions with only a draft version will be ignored.\n * Only versions with a published version (which always have a draft version) will be discarded.\n */\nexport async function* getBatchToDiscard({\n  db,\n  trx,\n  uid,\n  defaultBatchSize = 1000,\n}: {\n  db: Database;\n  trx: Knex;\n  uid: string;\n  defaultBatchSize?: number;\n}) {\n  const batchSize = Math.min(defaultBatchSize, db.dialect.getBatchInsertSize());\n  let offset = 0;\n  let hasMore = true;\n\n  while (hasMore) {\n    // Look for the published entries to discard\n    const batch: DocumentVersion[] = await db\n      .queryBuilder(uid)\n      .select(['id', 'documentId', 'locale'])\n      .where({ publishedAt: { $ne: null } })\n      .limit(batchSize)\n      .offset(offset)\n      .orderBy('id')\n      .transacting(trx)\n      .execute();\n\n    if (batch.length < batchSize) {\n      hasMore = false;\n    }\n\n    offset += batchSize;\n    yield batch;\n  }\n}\n\nexport const discardDocumentDrafts: Migration = {\n  name: 'core::5.0.0-discard-drafts',\n  async up(trx, db) {\n    await migrateUp(trx, db);\n  },\n  async down() {\n    throw new Error('not implemented');\n  },\n};\n"],"names":["resolveComponentMetadataUidCandidates","componentUid","startsWith","slice","length","getComponentMetadataByUid","candidate","meta","strapi","db","metadata","get","DEFAULT_PRIMARY_KEY_COLUMN","resolvePrimaryKeyColumn","primaryKey","pkObject","columnName","name","attributes","attributeName","attribute","Object","entries","normalizedAttribute","column","primary","hasDraftAndPublish","trx","hasTable","schema","tableName","uid","model","getModel","hasDP","contentTypes","copyPublishedEntriesToDraft","scalarAttributes","values","reduce","acc","includes","isScalarAttribute","push","into","raw","map","join","insert","subQb","select","att","from","whereNotNull","copyRelationsToDrafts","publishedToDraftMap","buildPublishedToDraftMap","size","copyRelationsForContentType","copyRelationsFromOtherContentTypes","copyRelationsToOtherContentTypes","copyComponentRelations","copyMediaMorphToDraftsForContentType","copySourceSideMorphRelationsForContentType","getUploadMorphTableInfo","fileMeta","relatedAttr","related","joinTable","morphColumn","joinColumn","joinColumnName","relatedIdColumnName","idColumn","relatedTypeColumnName","typeColumn","copyMorphRowsByIdMap","columnToRewrite","idMap","filter","contextReason","ensureTableExists","originalIds","Array","keys","chunks","chunkArray","getBatchSize","chunk","q","whereIn","where","value","rows","toInsert","row","originalId","normalizeId","newId","id","rest","insertRelationsWithDuplicateHandling","relations","context","reason","copyMorphRowsByPairs","pairs","Set","p","draftIds","draftId","recordClonedComponentPair","clonedComponentPairsCache","pairMap","Map","set","morphInfo","uploadMorph","uploadTableName","type","sourceColumnName","copySourceSideMorphRelationsForClonedComponents","componentType","cloneMap","componentMeta","key","newComponentId","Number","split","isNaN","array","chunkSize","i","buildExistingRelationMap","targetColumnName","updates","batchSize","existingMap","queryChunks","qb","update","orWhere","sourceId","newTargetId","defaultSize","client","config","isSQLite","Math","min","applyJoinTableOrdering","seenColumns","enqueueColumn","direction","has","add","orderBy","isArray","clause","normalizedDirection","toLowerCase","orderColumnName","orderColumn","buildRelationKey","relation","targetId","fieldValue","field","componentTypeValue","component_type","getExistingRelationKeys","sourceIds","existingKeys","idChunks","existingRelationsQuery","existingRelations","batchInsert","error","isDuplicateEntryError","onConflict","ignore","err","code","message","insertRowWithDuplicateHandling","componentParentSchemasCache","joinTableExistsCache","componentMetaCache","SKIPPED_RELATION_SAMPLE_LIMIT","supportsReturning","skippedRelationStats","DUPLICATE_ERROR_CODES","debug","createDebug","num","getMappedValue","undefined","normalized","resolveInsertedId","insertResult","first","idKey","find","details","JSON","stringify","wrapped","Error","cause","toComparisonKey","String","toDisplayValue","recordSkippedRelations","skippedIds","sourceUid","stats","count","samples","flushSkippedRelationLogs","sampleArray","sampleText","targetInfo","targetUid","joinTableInfo","ellipsis","log","warn","clear","listComponentParentSchemas","schemas","components","parents","some","attr","component","collectionName","exists","filterRelationsWithExistingTargets","getTargetId","targetMeta","primaryKeyColumn","uniqueIdMap","uniqueIds","filteredRelations","findComponentParentInstance","identifiers","componentId","excludeUid","caches","cacheKey","parentInstanceCache","parentComponentIdColumn","getComponentJoinColumnInverseName","parentComponentTypeColumn","getComponentTypeColumn","parentEntityIdColumn","getComponentJoinColumnEntityName","potentialParents","parentSchema","parentJoinTableName","getComponentJoinTableName","parentRow","parentInstance","parentId","getComponentMeta","hasDraftPublishAncestorForParent","parent","parentDpCache","parentContentType","result","options","draftAndPublish","parentComponent","hasDraftPublishAncestorForComponent","ancestorDpCache","resolveNowValue","fn","now","Date","getDraftMapForTarget","draftMapCache","requireDraftAndPublish","getDraftToPublishedMap","reverseMapCache","draftToPublishedMap","draftMap","publishedId","getTargetPublicationState","target","published_at","mapTargetId","parentUid","parentPublishedToDraftMap","isForDraftEntity","effectiveReverseCache","reverseMap","targetMap","targetState","ensureObjectWithoutId","cloned","cloneComponentRelationJoinTables","originalComponentId","rawComponentAttribute","inverseJoinColumn","relationsLogPrinted","preparedRelations","clonedRelation","originalTargetId","relationsToInsert","safeRelations","cloneComponentInstance","componentTableName","componentPrimaryKey","componentRow","newComponentRow","document_id","createId","updated_at","created_at","insertedRow","componentSchema","entityIdCol","componentIdCol","componentTypeCol","fieldCol","FIELD_COLUMN","attrName","nestedJoinTableName","nestedRows","nestedId","newNestedId","dzJoinTableName","getDzJoinTableName","dzRows","nestedType","hasDraftAndPublishEnabled","publishedEntries","draftEntries","Promise","all","whereNull","i18nService","plugin","service","contentType","isLocalized","isLocalizedContentType","draftByDocumentId","draft","locale","existing","existingId","published","publishedIds","publishedIdsChunks","publishedIdsChunk","draftSourceIds","relationsQuery","newRelations","newSourceId","relationWithoutId","Boolean","publishedTargetIds","draftTargetIds","models","dbModel","sourceHasDraftAndPublish","publishedIdChunks","targetMapCache","targetPublishedToDraftMap","mappedTargetId","updateJoinColumnRelations","foreignKeyColumn","draftIdsChunks","draftIdsChunk","draftEntriesWithFk","draftEntry","publishedTargetIdRaw","normalizedPublishedTargetId","draftTargetId","caseFragments","idsPlaceholders","flatMap","fixExistingDraftRelations","draftEntities","e","targetContentType","targetHasDP","targetDraftMap","targetIds","r","targets","targetPublicationState","t","relationsToUpdate","relationId","oldTargetId","updateChunks","updateChunk","existingRelationMap","existingRelationId","delete","updated","fixExistingDraftComponentRelations","joinTableName","entityIdColumn","componentIdColumn","componentTypeColumn","componentRelations","componentTypes","relationJoinTable","sourceColumn","targetColumn","hasRelationTable","componentIds","fixPublishedComponentRelationTargets","typeToIds","currentLevelByType","maxLevels","level","nextLevelByType","compType","ids","compSchema","nestedTable","idChunk","targetIdList","draftToPublished","u","fieldColumn","componentCloneCache","componentTargetDraftMapCache","componentTargetReverseMapCache","componentHierarchyCaches","filteredComponentRelations","filterBatches","batch","batchResults","entityId","componentParent","hasDPParent","relationsToProcess","filteredCount","mappedRelations","newEntityId","componentKey","uniqueKeyMap","uniqueKey","deduplicatedRelations","relationChunks","relationChunk","newComponentRelations","insertedCount","migrateUp","info","dpModels","getBatchToDiscard","defaultBatchSize","dialect","getBatchInsertSize","offset","hasMore","queryBuilder","publishedAt","$ne","limit","transacting","execute","discardDocumentDrafts","up","down"],"mappings":"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"}