{"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 scalar fields and join-column\n * foreign keys (no components, dynamic zones, or join-table relations 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[0];\n\ntype MetadataWithOptionalPrimaryKey = {\n primaryKey?: string | { columnName?: string; name?: string };\n attributes?: Record;\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 * Join-column relations that are persisted on the row (e.g. createdBy), excluding virtual\n * relations such as i18n `localizations` which reuse `document_id` and are not DB-owned.\n */\nconst isPersistedJoinColumnRelation = (attribute: any) =>\n attribute?.type === 'relation' &&\n !attribute.unstable_virtual &&\n attribute.joinColumn &&\n !attribute.joinTable;\n\n/**\n * Column names copied when cloning a published row into a draft (stage 1).\n * Scalars plus persisted join-column FKs; deduped so virtual relations cannot repeat columns.\n */\nconst getPublishedToDraftCloneColumns = (meta: { attributes: Record }) => {\n const seen = new Set();\n const columns: string[] = [];\n\n const addColumn = (columnName: string | undefined) => {\n if (!columnName || columnName === 'id' || seen.has(columnName)) {\n return;\n }\n seen.add(columnName);\n columns.push(columnName);\n };\n\n for (const attribute of Object.values(meta.attributes) as any[]) {\n if (contentTypes.isScalarAttribute(attribute)) {\n addColumn(attribute.columnName);\n continue;\n }\n\n if (isPersistedJoinColumnRelation(attribute)) {\n addColumn(attribute.joinColumn.name);\n }\n }\n\n return columns;\n};\n\n/**\n * Copy published entries to draft rows, cloning scalar fields and join-column foreign keys.\n * Components, dynamic zones, and join-table relations are handled in later stages.\n */\nasync function copyPublishedEntriesToDraft({\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\n const columnsToCopy = getPublishedToDraftCloneColumns(meta);\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(`?? (${columnsToCopy.map(() => `??`).join(', ')})`, [\n meta.tableName,\n ...columnsToCopy,\n ])\n )\n .insert((subQb: typeof trx) => {\n // SELECT columnName1, columnName2, columnName3, ...\n subQb\n .select(\n ...columnsToCopy.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).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;\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> = [];\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> = [];\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>;\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;\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;\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(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> {\n const existingMap = new Map();\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();\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,\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> {\n const existingKeys = new Set();\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>;\n context?: Record;\n}): Promise {\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();\nconst joinTableExistsCache = new Map();\nconst componentMetaCache = new Map();\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;\n};\n\nconst skippedRelationStats = new Map();\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 = (map: Map | 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)[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,\n context: Record = {}\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(),\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 {\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 = {\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({\n trx,\n targetUid,\n relations,\n getTargetId,\n}: FilterRelationsWithExistingTargetsParams): 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();\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();\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;\n ancestorDpCache: Map;\n parentDpCache: Map;\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 {\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 {\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 {\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 | null>\n): Promise | 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 | null>,\n draftMapCache?: Map | null>\n): Promise | 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();\n const draftMap = await getDraftMapForTarget(trx, targetUid, draftMapCache ?? 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,\n draftMapCache: Map | null>,\n isForDraftEntity: boolean = true,\n reverseMapCache?: Map | 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(\n trx,\n targetUid,\n effectiveReverseCache,\n draftMapCache\n );\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(\n trx,\n targetUid,\n effectiveReverseCache,\n draftMapCache\n );\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) => {\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,\n draftMapCache: Map | null>,\n isForDraftEntity: boolean = true,\n reverseMapCache?: Map | 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 // Morph join tables use morphColumn instead of inverseJoinColumn — skip them\n if (!joinTable.inverseJoinColumn) {\n continue;\n }\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> = [];\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;\n draftMapCache: Map | null>;\n clonedComponentPairsCache?: ClonedComponentPairsCache;\n isForDraftEntity?: boolean;\n reverseMapCache?: Map | null>;\n}): Promise {\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 = 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 (!isPersistedJoinColumnRelation(attribute)) {\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 | 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();\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();\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;\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 // Morph join tables use morphColumn instead of inverseJoinColumn — skip them\n if (!joinTable.inverseJoinColumn) {\n continue;\n }\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;\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 if (!joinTable.inverseJoinColumn) {\n continue;\n }\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> = [];\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;\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 | 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 if (!joinTable.inverseJoinColumn) {\n continue;\n }\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>,\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 | null>();\n\n // Find all JoinColumn relations (oneToOne, manyToOne without joinTable)\n for (const attribute of Object.values(meta.attributes) as any) {\n if (!isPersistedJoinColumnRelation(attribute)) {\n continue;\n }\n\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 | 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 if (!joinTable.inverseJoinColumn) {\n continue;\n }\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 | 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 if (!attr.joinTable.inverseJoinColumn) {\n continue;\n }\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 | null>();\n\n const typeToIds = new Map>();\n let currentLevelByType = new Map();\n currentLevelByType.set(uid, publishedIds);\n const maxLevels = 10;\n for (let level = 0; level < maxLevels; level += 1) {\n const nextLevelByType = new Map();\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 if (!attr.joinTable.inverseJoinColumn) {\n continue;\n }\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;\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 const componentTargetDraftMapCache = new Map | null>();\n const componentTargetReverseMapCache = new Map | null>();\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>();\n const clonedComponentPairsCache: ClonedComponentPairsCache = new Map();\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 | 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\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>;\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>();\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();\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","isPersistedJoinColumnRelation","type","unstable_virtual","joinColumn","joinTable","getPublishedToDraftCloneColumns","seen","Set","columns","addColumn","has","add","push","values","isScalarAttribute","copyPublishedEntriesToDraft","columnsToCopy","into","raw","map","join","insert","subQb","select","att","from","whereNotNull","copyRelationsToDrafts","publishedToDraftMap","buildPublishedToDraftMap","size","copyRelationsForContentType","copyRelationsFromOtherContentTypes","copyRelationsToOtherContentTypes","copyComponentRelations","copyMediaMorphToDraftsForContentType","copySourceSideMorphRelationsForContentType","getUploadMorphTableInfo","fileMeta","relatedAttr","related","morphColumn","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","p","draftIds","draftId","recordClonedComponentPair","clonedComponentPairsCache","pairMap","Map","set","morphInfo","uploadMorph","uploadTableName","includes","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","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","reduce","acc","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","componentTargetDraftMapCache","componentTargetReverseMapCache","componentCloneCache","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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"}