@payloadcms/drizzle 4.0.0-internal.a0ef1b8 → 4.0.0-internal.a2d053c

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (288) hide show
  1. package/LICENSE.md +1 -1
  2. package/dist/createTableName.d.ts.map +1 -1
  3. package/dist/createTableName.js +2 -7
  4. package/dist/createTableName.js.map +1 -1
  5. package/dist/exports/postgres.d.ts +4 -0
  6. package/dist/exports/postgres.d.ts.map +1 -1
  7. package/dist/exports/postgres.js +4 -0
  8. package/dist/exports/postgres.js.map +1 -1
  9. package/dist/exports/sqlite.d.ts +2 -0
  10. package/dist/exports/sqlite.d.ts.map +1 -1
  11. package/dist/exports/sqlite.js +2 -0
  12. package/dist/exports/sqlite.js.map +1 -1
  13. package/dist/find/buildFindManyArgs.d.ts.map +1 -1
  14. package/dist/find/buildPolymorphicJoinQuery.d.ts +39 -0
  15. package/dist/find/buildPolymorphicJoinQuery.d.ts.map +1 -0
  16. package/dist/find/buildPolymorphicJoinQuery.js +146 -0
  17. package/dist/find/buildPolymorphicJoinQuery.js.map +1 -0
  18. package/dist/find/buildPolymorphicJoinWhere.d.ts +20 -0
  19. package/dist/find/buildPolymorphicJoinWhere.d.ts.map +1 -0
  20. package/dist/find/buildPolymorphicJoinWhere.js +301 -0
  21. package/dist/find/buildPolymorphicJoinWhere.js.map +1 -0
  22. package/dist/find/createPolymorphicJoinWherePlan.d.ts +38 -0
  23. package/dist/find/createPolymorphicJoinWherePlan.d.ts.map +1 -0
  24. package/dist/find/createPolymorphicJoinWherePlan.js +200 -0
  25. package/dist/find/createPolymorphicJoinWherePlan.js.map +1 -0
  26. package/dist/find/findMany.d.ts.map +1 -1
  27. package/dist/find/traverseFields.d.ts.map +1 -1
  28. package/dist/find/traverseFields.js +21 -193
  29. package/dist/find/traverseFields.js.map +1 -1
  30. package/dist/index.d.ts +4 -11
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +2 -9
  33. package/dist/index.js.map +1 -1
  34. package/dist/migrate.d.ts.map +1 -1
  35. package/dist/migrate.js +41 -15
  36. package/dist/migrate.js.map +1 -1
  37. package/dist/migrateDown.d.ts +2 -1
  38. package/dist/migrateDown.d.ts.map +1 -1
  39. package/dist/migrateDown.js +17 -4
  40. package/dist/migrateDown.js.map +1 -1
  41. package/dist/migrateFresh.d.ts +4 -2
  42. package/dist/migrateFresh.d.ts.map +1 -1
  43. package/dist/migrateFresh.js +26 -9
  44. package/dist/migrateFresh.js.map +1 -1
  45. package/dist/migrateRefresh.d.ts +2 -1
  46. package/dist/migrateRefresh.d.ts.map +1 -1
  47. package/dist/migrateRefresh.js +20 -5
  48. package/dist/migrateRefresh.js.map +1 -1
  49. package/dist/migrateReset.d.ts +2 -1
  50. package/dist/migrateReset.d.ts.map +1 -1
  51. package/dist/migrateReset.js +18 -4
  52. package/dist/migrateReset.js.map +1 -1
  53. package/dist/migrateStatus.d.ts +2 -1
  54. package/dist/migrateStatus.d.ts.map +1 -1
  55. package/dist/migrateStatus.js +11 -6
  56. package/dist/migrateStatus.js.map +1 -1
  57. package/dist/postgres/createDatabase.d.ts.map +1 -1
  58. package/dist/postgres/createExtensions.d.ts.map +1 -1
  59. package/dist/postgres/createJSONQuery/index.d.ts.map +1 -1
  60. package/dist/postgres/createJSONQuery/index.js +3 -3
  61. package/dist/postgres/createJSONQuery/index.js.map +1 -1
  62. package/dist/postgres/init.d.ts.map +1 -1
  63. package/dist/postgres/init.js +6 -0
  64. package/dist/postgres/init.js.map +1 -1
  65. package/dist/postgres/predefinedMigrations/localize-status/index.d.ts +11 -0
  66. package/dist/postgres/predefinedMigrations/localize-status/index.d.ts.map +1 -0
  67. package/dist/postgres/predefinedMigrations/localize-status/index.js +296 -0
  68. package/dist/postgres/predefinedMigrations/localize-status/index.js.map +1 -0
  69. package/dist/postgres/predefinedMigrations/localize-status/migrateMainCollection.d.ts +13 -0
  70. package/dist/postgres/predefinedMigrations/localize-status/migrateMainCollection.d.ts.map +1 -0
  71. package/dist/postgres/predefinedMigrations/localize-status/migrateMainCollection.js +51 -0
  72. package/dist/postgres/predefinedMigrations/localize-status/migrateMainCollection.js.map +1 -0
  73. package/dist/postgres/predefinedMigrations/localize-status/migrateMainGlobal.d.ts +13 -0
  74. package/dist/postgres/predefinedMigrations/localize-status/migrateMainGlobal.d.ts.map +1 -0
  75. package/dist/postgres/predefinedMigrations/localize-status/migrateMainGlobal.js +54 -0
  76. package/dist/postgres/predefinedMigrations/localize-status/migrateMainGlobal.js.map +1 -0
  77. package/dist/postgres/predefinedMigrations/sizes-to-variants/index.d.ts +35 -0
  78. package/dist/postgres/predefinedMigrations/sizes-to-variants/index.d.ts.map +1 -0
  79. package/dist/postgres/predefinedMigrations/sizes-to-variants/index.js +185 -0
  80. package/dist/postgres/predefinedMigrations/sizes-to-variants/index.js.map +1 -0
  81. package/dist/postgres/predefinedMigrations/v2-v3/fetchAndResave/index.d.ts.map +1 -1
  82. package/dist/postgres/predefinedMigrations/v2-v3/fetchAndResave/index.js +8 -4
  83. package/dist/postgres/predefinedMigrations/v2-v3/fetchAndResave/index.js.map +1 -1
  84. package/dist/postgres/predefinedMigrations/v2-v3/fetchAndResave/traverseFields.d.ts.map +1 -1
  85. package/dist/postgres/predefinedMigrations/v2-v3/fetchAndResave/traverseFields.js.map +1 -1
  86. package/dist/postgres/predefinedMigrations/v2-v3/groupUpSQLStatements.d.ts.map +1 -1
  87. package/dist/postgres/predefinedMigrations/v2-v3/index.d.ts.map +1 -1
  88. package/dist/postgres/predefinedMigrations/v2-v3/index.js +1 -1
  89. package/dist/postgres/predefinedMigrations/v2-v3/index.js.map +1 -1
  90. package/dist/postgres/predefinedMigrations/v2-v3/migrateRelationships.d.ts.map +1 -1
  91. package/dist/postgres/predefinedMigrations/v2-v3/traverseFields.d.ts.map +1 -1
  92. package/dist/postgres/query/assertOperatorHandlerExtensionsInstalled.d.ts +15 -0
  93. package/dist/postgres/query/assertOperatorHandlerExtensionsInstalled.d.ts.map +1 -0
  94. package/dist/postgres/query/assertOperatorHandlerExtensionsInstalled.js +25 -0
  95. package/dist/postgres/query/assertOperatorHandlerExtensionsInstalled.js.map +1 -0
  96. package/dist/postgres/query/postgresUnaccent.d.ts +13 -0
  97. package/dist/postgres/query/postgresUnaccent.d.ts.map +1 -0
  98. package/dist/postgres/query/postgresUnaccent.js +40 -0
  99. package/dist/postgres/query/postgresUnaccent.js.map +1 -0
  100. package/dist/postgres/schema/buildDrizzleTable.d.ts.map +1 -1
  101. package/dist/postgres/schema/geometryColumn.d.ts +2 -2
  102. package/dist/postgres/schema/geometryColumn.d.ts.map +1 -1
  103. package/dist/postgres/types.d.ts +13 -2
  104. package/dist/postgres/types.d.ts.map +1 -1
  105. package/dist/postgres/types.js.map +1 -1
  106. package/dist/queries/addJoinTable.d.ts +1 -1
  107. package/dist/queries/addJoinTable.d.ts.map +1 -1
  108. package/dist/queries/buildOperatorConstraint.d.ts +22 -0
  109. package/dist/queries/buildOperatorConstraint.d.ts.map +1 -0
  110. package/dist/queries/buildOperatorConstraint.js +63 -0
  111. package/dist/queries/buildOperatorConstraint.js.map +1 -0
  112. package/dist/queries/buildOrderBy.d.ts +1 -1
  113. package/dist/queries/buildOrderBy.d.ts.map +1 -1
  114. package/dist/queries/buildQuery.d.ts.map +1 -1
  115. package/dist/queries/getTableAlias.d.ts.map +1 -1
  116. package/dist/queries/getTableColumnFromPath.d.ts +12 -3
  117. package/dist/queries/getTableColumnFromPath.d.ts.map +1 -1
  118. package/dist/queries/getTableColumnFromPath.js +61 -29
  119. package/dist/queries/getTableColumnFromPath.js.map +1 -1
  120. package/dist/queries/operatorMap.d.ts +7 -3
  121. package/dist/queries/operatorMap.d.ts.map +1 -1
  122. package/dist/queries/operatorMap.js.map +1 -1
  123. package/dist/queries/parseParams.d.ts.map +1 -1
  124. package/dist/queries/parseParams.js +262 -10
  125. package/dist/queries/parseParams.js.map +1 -1
  126. package/dist/queries/resolveRelationshipPath.d.ts +36 -0
  127. package/dist/queries/resolveRelationshipPath.d.ts.map +1 -0
  128. package/dist/queries/resolveRelationshipPath.js +66 -0
  129. package/dist/queries/resolveRelationshipPath.js.map +1 -0
  130. package/dist/queries/sanitizeQueryValue.d.ts.map +1 -1
  131. package/dist/queries/selectDistinct.d.ts.map +1 -1
  132. package/dist/queries/validateOperatorHandlers.d.ts +8 -0
  133. package/dist/queries/validateOperatorHandlers.d.ts.map +1 -0
  134. package/dist/queries/validateOperatorHandlers.js +30 -0
  135. package/dist/queries/validateOperatorHandlers.js.map +1 -0
  136. package/dist/schema/build.d.ts.map +1 -1
  137. package/dist/schema/build.js +3 -3
  138. package/dist/schema/build.js.map +1 -1
  139. package/dist/schema/buildDrizzleRelations.d.ts.map +1 -1
  140. package/dist/schema/buildRawSchema.d.ts.map +1 -1
  141. package/dist/schema/idToUUID.d.ts.map +1 -1
  142. package/dist/schema/traverseFields.d.ts.map +1 -1
  143. package/dist/schema/traverseFields.js +7 -6
  144. package/dist/schema/traverseFields.js.map +1 -1
  145. package/dist/schema/withDefault.d.ts.map +1 -1
  146. package/dist/sqlite/createJSONQuery/convertPathToJSONTraversal.d.ts.map +1 -1
  147. package/dist/sqlite/createJSONQuery/convertPathToJSONTraversal.js +3 -2
  148. package/dist/sqlite/createJSONQuery/convertPathToJSONTraversal.js.map +1 -1
  149. package/dist/sqlite/createJSONQuery/index.d.ts.map +1 -1
  150. package/dist/sqlite/createJSONQuery/index.js +6 -5
  151. package/dist/sqlite/createJSONQuery/index.js.map +1 -1
  152. package/dist/sqlite/execute.js.map +1 -1
  153. package/dist/sqlite/insert.d.ts.map +1 -1
  154. package/dist/sqlite/insert.js +4 -1
  155. package/dist/sqlite/insert.js.map +1 -1
  156. package/dist/sqlite/predefinedMigrations/localize-status/index.d.ts +28 -0
  157. package/dist/sqlite/predefinedMigrations/localize-status/index.d.ts.map +1 -0
  158. package/dist/sqlite/predefinedMigrations/localize-status/index.js +198 -0
  159. package/dist/sqlite/predefinedMigrations/localize-status/index.js.map +1 -0
  160. package/dist/sqlite/predefinedMigrations/localize-status/migrateMainCollection.d.ts +12 -0
  161. package/dist/sqlite/predefinedMigrations/localize-status/migrateMainCollection.d.ts.map +1 -0
  162. package/dist/sqlite/predefinedMigrations/localize-status/migrateMainCollection.js +24 -0
  163. package/dist/sqlite/predefinedMigrations/localize-status/migrateMainCollection.js.map +1 -0
  164. package/dist/sqlite/predefinedMigrations/localize-status/migrateMainGlobal.d.ts +12 -0
  165. package/dist/sqlite/predefinedMigrations/localize-status/migrateMainGlobal.d.ts.map +1 -0
  166. package/dist/sqlite/predefinedMigrations/localize-status/migrateMainGlobal.js +28 -0
  167. package/dist/sqlite/predefinedMigrations/localize-status/migrateMainGlobal.js.map +1 -0
  168. package/dist/sqlite/predefinedMigrations/sizes-to-variants/index.d.ts +15 -0
  169. package/dist/sqlite/predefinedMigrations/sizes-to-variants/index.d.ts.map +1 -0
  170. package/dist/sqlite/predefinedMigrations/sizes-to-variants/index.js +114 -0
  171. package/dist/sqlite/predefinedMigrations/sizes-to-variants/index.js.map +1 -0
  172. package/dist/transform/read/hasManyNumber.d.ts.map +1 -1
  173. package/dist/transform/read/hasManyText.d.ts.map +1 -1
  174. package/dist/transform/read/index.d.ts.map +1 -1
  175. package/dist/transform/read/relationship.d.ts.map +1 -1
  176. package/dist/transform/read/traverseFields.d.ts.map +1 -1
  177. package/dist/transform/read/traverseFields.js +2 -2
  178. package/dist/transform/read/traverseFields.js.map +1 -1
  179. package/dist/transform/write/array.d.ts.map +1 -1
  180. package/dist/transform/write/blocks.d.ts.map +1 -1
  181. package/dist/transform/write/blocks.js +1 -1
  182. package/dist/transform/write/blocks.js.map +1 -1
  183. package/dist/transform/write/index.d.ts.map +1 -1
  184. package/dist/transform/write/numbers.d.ts.map +1 -1
  185. package/dist/transform/write/relationships.d.ts.map +1 -1
  186. package/dist/transform/write/selects.d.ts.map +1 -1
  187. package/dist/transform/write/texts.d.ts.map +1 -1
  188. package/dist/transform/write/traverseFields.d.ts.map +1 -1
  189. package/dist/transform/write/traverseFields.js +9 -16
  190. package/dist/transform/write/traverseFields.js.map +1 -1
  191. package/dist/types.d.ts +50 -6
  192. package/dist/types.d.ts.map +1 -1
  193. package/dist/types.js +1 -3
  194. package/dist/types.js.map +1 -1
  195. package/dist/updateJobs.d.ts.map +1 -1
  196. package/dist/updateJobs.js +37 -0
  197. package/dist/updateJobs.js.map +1 -1
  198. package/dist/updateOne.d.ts.map +1 -1
  199. package/dist/updateOne.js +41 -1
  200. package/dist/updateOne.js.map +1 -1
  201. package/dist/upsertRow/deleteExistingArrayRows.d.ts.map +1 -1
  202. package/dist/upsertRow/deleteExistingRowsByPath.d.ts.map +1 -1
  203. package/dist/upsertRow/handleUpsertError.d.ts.map +1 -1
  204. package/dist/upsertRow/handleUpsertError.js +2 -1
  205. package/dist/upsertRow/handleUpsertError.js.map +1 -1
  206. package/dist/upsertRow/index.d.ts +1 -1
  207. package/dist/upsertRow/index.d.ts.map +1 -1
  208. package/dist/upsertRow/index.js +30 -7
  209. package/dist/upsertRow/index.js.map +1 -1
  210. package/dist/upsertRow/insertArrays.d.ts.map +1 -1
  211. package/dist/upsertRow/insertArrays.js +2 -1
  212. package/dist/upsertRow/insertArrays.js.map +1 -1
  213. package/dist/upsertRow/shouldUseOptimizedUpsertRow.d.ts.map +1 -1
  214. package/dist/utilities/appendPrefixToKeys.d.ts.map +1 -1
  215. package/dist/utilities/blocksToJsonMigrator.d.ts.map +1 -1
  216. package/dist/utilities/blocksToJsonMigrator.js +6 -17
  217. package/dist/utilities/blocksToJsonMigrator.js.map +1 -1
  218. package/dist/utilities/buildCreateMigration.d.ts.map +1 -1
  219. package/dist/utilities/buildCreateMigration.js +12 -8
  220. package/dist/utilities/buildCreateMigration.js.map +1 -1
  221. package/dist/utilities/buildDynamicPredefinedSizesToVariantsMigration.d.ts +15 -0
  222. package/dist/utilities/buildDynamicPredefinedSizesToVariantsMigration.d.ts.map +1 -0
  223. package/dist/utilities/buildDynamicPredefinedSizesToVariantsMigration.js +110 -0
  224. package/dist/utilities/buildDynamicPredefinedSizesToVariantsMigration.js.map +1 -0
  225. package/dist/utilities/buildForeignKeyName.d.ts.map +1 -1
  226. package/dist/utilities/buildForeignKeyName.js +3 -2
  227. package/dist/utilities/buildForeignKeyName.js.map +1 -1
  228. package/dist/utilities/buildIndexName.d.ts.map +1 -1
  229. package/dist/utilities/buildIndexName.js +3 -2
  230. package/dist/utilities/buildIndexName.js.map +1 -1
  231. package/dist/utilities/checkTruncatedIdentifiers.d.ts +13 -0
  232. package/dist/utilities/checkTruncatedIdentifiers.d.ts.map +1 -0
  233. package/dist/utilities/checkTruncatedIdentifiers.js +56 -0
  234. package/dist/utilities/checkTruncatedIdentifiers.js.map +1 -0
  235. package/dist/utilities/createBlocksMap.d.ts.map +1 -1
  236. package/dist/utilities/createRelationshipMap.d.ts.map +1 -1
  237. package/dist/utilities/createSchemaGenerator.d.ts.map +1 -1
  238. package/dist/utilities/createSchemaGenerator.js +10 -12
  239. package/dist/utilities/createSchemaGenerator.js.map +1 -1
  240. package/dist/utilities/escapeSQLValue.d.ts.map +1 -1
  241. package/dist/utilities/executeSchemaHooks.d.ts.map +1 -1
  242. package/dist/utilities/executeSchemaHooks.js +1 -1
  243. package/dist/utilities/executeSchemaHooks.js.map +1 -1
  244. package/dist/utilities/extendDrizzleTable.d.ts.map +1 -1
  245. package/dist/utilities/formatGeneratedFile.d.ts +10 -0
  246. package/dist/utilities/formatGeneratedFile.d.ts.map +1 -0
  247. package/dist/utilities/formatGeneratedFile.js +58 -0
  248. package/dist/utilities/formatGeneratedFile.js.map +1 -0
  249. package/dist/utilities/getArrayRelationName.d.ts.map +1 -1
  250. package/dist/utilities/getCollectionIdType.d.ts.map +1 -1
  251. package/dist/utilities/getMigrationTemplate.d.ts.map +1 -1
  252. package/dist/utilities/getNameFromDrizzleTable.d.ts.map +1 -1
  253. package/dist/utilities/getPrimaryDb.d.ts +1 -1
  254. package/dist/utilities/getPrimaryDb.d.ts.map +1 -1
  255. package/dist/utilities/getSizesToVariantsRenames.d.ts +54 -0
  256. package/dist/utilities/getSizesToVariantsRenames.d.ts.map +1 -0
  257. package/dist/utilities/getSizesToVariantsRenames.js +251 -0
  258. package/dist/utilities/getSizesToVariantsRenames.js.map +1 -0
  259. package/dist/utilities/getTransaction.d.ts +1 -1
  260. package/dist/utilities/getTransaction.d.ts.map +1 -1
  261. package/dist/utilities/getTransaction.js.map +1 -1
  262. package/dist/utilities/hasLocalesTable.d.ts.map +1 -1
  263. package/dist/utilities/isPolymorphicRelationship.d.ts.map +1 -1
  264. package/dist/utilities/isUUIDType.d.ts.map +1 -1
  265. package/dist/utilities/json.d.ts.map +1 -1
  266. package/dist/utilities/migrationTableExists.d.ts.map +1 -1
  267. package/dist/utilities/parseError.d.ts.map +1 -1
  268. package/dist/utilities/parseJSONPathSegment.d.ts +9 -0
  269. package/dist/utilities/parseJSONPathSegment.d.ts.map +1 -0
  270. package/dist/utilities/parseJSONPathSegment.js +17 -0
  271. package/dist/utilities/parseJSONPathSegment.js.map +1 -0
  272. package/dist/utilities/pushDevSchema.d.ts.map +1 -1
  273. package/dist/utilities/rawConstraint.d.ts.map +1 -1
  274. package/dist/utilities/sanitizePathSegment.d.ts.map +1 -1
  275. package/dist/utilities/validateExistingBlockIsIdentical.d.ts +1 -5
  276. package/dist/utilities/validateExistingBlockIsIdentical.d.ts.map +1 -1
  277. package/dist/utilities/validateExistingBlockIsIdentical.js.map +1 -1
  278. package/dist/utilities/validateIdentifierLength.d.ts +12 -0
  279. package/dist/utilities/validateIdentifierLength.d.ts.map +1 -0
  280. package/dist/utilities/validateIdentifierLength.js +18 -0
  281. package/dist/utilities/validateIdentifierLength.js.map +1 -0
  282. package/package.json +16 -19
  283. package/dist/find/chainMethods.d.ts +0 -20
  284. package/dist/find/chainMethods.d.ts.map +0 -1
  285. package/dist/find/chainMethods.js +0 -16
  286. package/dist/find/chainMethods.js.map +0 -1
  287. package/dist/utilities/isValidStringID.spec.js +0 -15
  288. package/dist/utilities/isValidStringID.spec.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/upsertRow/index.ts"],"sourcesContent":["import type { LibSQLDatabase } from 'drizzle-orm/libsql'\nimport type { SelectedFields } from 'drizzle-orm/sqlite-core'\nimport type { TypeWithID } from 'payload'\n\nimport { and, desc, eq, isNull, or } from 'drizzle-orm'\n\nimport type { BlockRowToInsert } from '../transform/write/types.js'\nimport type { Args } from './types.js'\n\ntype RelationshipRow = {\n [key: string]: number | string | undefined // For relationship ID columns like categoriesID, moviesID, etc.\n id?: number | string\n locale?: string\n order: number\n parent: number | string // Drizzle table uses 'parent' key\n path: string\n}\n\nimport { buildFindManyArgs } from '../find/buildFindManyArgs.js'\nimport { transform } from '../transform/read/index.js'\nimport { transformForWrite } from '../transform/write/index.js'\nimport { markWrite } from '../utilities/readAfterWrite.js'\nimport { deleteExistingArrayRows } from './deleteExistingArrayRows.js'\nimport { deleteExistingRowsByPath } from './deleteExistingRowsByPath.js'\nimport { handleUpsertError } from './handleUpsertError.js'\nimport { insertArrays } from './insertArrays.js'\nimport { shouldUseOptimizedUpsertRow } from './shouldUseOptimizedUpsertRow.js'\n\n/**\n * If `id` is provided, it will update the row with that ID.\n * If `where` is provided, it will update the row that matches the `where`\n * If neither `id` nor `where` is provided, it will create a new row.\n *\n * adapter function replaces the entire row and does not support partial updates.\n */\nexport const upsertRow = async <T extends Record<string, unknown> | TypeWithID>({\n id,\n adapter,\n collectionSlug,\n data,\n db,\n fields,\n globalSlug,\n ignoreResult,\n // TODO:\n // When we support joins for write operations (create/update) - pass collectionSlug to the buildFindManyArgs\n // Make a new argument in upsertRow.ts and pass the slug from every operation.\n customID,\n joinQuery: _joinQuery,\n operation,\n path = '',\n req,\n select,\n tableName,\n upsertTarget,\n where,\n}: Args): Promise<T> => {\n if (operation === 'create' && !data.createdAt) {\n data.createdAt = new Date().toISOString()\n }\n\n markWrite(adapter)\n\n let insertedRow: Record<string, unknown> = { id }\n if (id && shouldUseOptimizedUpsertRow({ data, fields })) {\n try {\n const transformedForWrite = transformForWrite({\n adapter,\n data,\n enableAtomicWrites: true,\n fields,\n tableName,\n })\n const { row } = transformedForWrite\n const { arraysToPush } = transformedForWrite\n\n const drizzle = db as LibSQLDatabase\n\n // First, handle $push arrays\n\n if (arraysToPush && Object.keys(arraysToPush)?.length) {\n await insertArrays({\n adapter,\n arrays: [arraysToPush],\n db,\n parentRows: [insertedRow],\n uuidMap: {},\n })\n }\n\n // If row.updatedAt is not set, delete it to avoid triggering hasDataToUpdate. `updatedAt` may be explicitly set to null to\n // disable triggering hasDataToUpdate.\n if (typeof row.updatedAt === 'undefined' || row.updatedAt === null) {\n delete row.updatedAt\n }\n\n const hasDataToUpdate = row && Object.keys(row)?.length\n\n // Then, handle regular row update\n if (ignoreResult) {\n if (hasDataToUpdate) {\n // Only update row if there is something to update.\n // Example: if the data only consists of a single $push, calling insertArrays is enough - we don't need to update the row.\n await drizzle\n .update(adapter.tables[tableName])\n .set(row)\n .where(eq(adapter.tables[tableName].id, id))\n }\n return ignoreResult === 'idOnly' ? ({ id } as T) : null\n }\n\n const findManyArgs = buildFindManyArgs({\n adapter,\n depth: 0,\n fields,\n joinQuery: false,\n select,\n tableName,\n })\n\n const findManyKeysLength = Object.keys(findManyArgs).length\n const hasOnlyColumns = Object.keys(findManyArgs.columns || {}).length > 0\n\n if (!hasDataToUpdate) {\n // Nothing to update => just fetch current row and return\n findManyArgs.where = eq(adapter.tables[tableName].id, insertedRow.id)\n\n const doc = await db.query[tableName].findFirst(findManyArgs)\n\n return transform<T>({\n adapter,\n config: adapter.payload.config,\n data: doc,\n fields,\n joinQuery: false,\n tableName,\n })\n }\n\n if (findManyKeysLength === 0 || hasOnlyColumns) {\n // Optimization - No need for joins => can simply use returning(). This is optimal for very simple collections\n // without complex fields that live in separate tables like blocks, arrays, relationships, etc.\n\n const selectedFields: SelectedFields = {}\n if (hasOnlyColumns) {\n for (const [column, enabled] of Object.entries(findManyArgs.columns)) {\n if (enabled) {\n selectedFields[column] = adapter.tables[tableName][column]\n }\n }\n }\n\n const docs = await drizzle\n .update(adapter.tables[tableName])\n .set(row)\n .where(eq(adapter.tables[tableName].id, id))\n .returning(Object.keys(selectedFields).length ? selectedFields : undefined)\n\n return transform<T>({\n adapter,\n config: adapter.payload.config,\n data: docs[0],\n fields,\n joinQuery: false,\n tableName,\n })\n }\n\n // DB Update that needs the result, potentially with joins => need to update first, then find. returning() does not work with joins.\n\n await drizzle\n .update(adapter.tables[tableName])\n .set(row)\n .where(eq(adapter.tables[tableName].id, id))\n\n findManyArgs.where = eq(adapter.tables[tableName].id, insertedRow.id)\n\n const doc = await db.query[tableName].findFirst(findManyArgs)\n\n return transform<T>({\n adapter,\n config: adapter.payload.config,\n data: doc,\n fields,\n joinQuery: false,\n tableName,\n })\n } catch (error) {\n handleUpsertError({ id, adapter, collectionSlug, error, globalSlug, req, tableName })\n }\n }\n // Split out the incoming data into the corresponding:\n // base row, locales, relationships, blocks, and arrays\n const rowToInsert = transformForWrite({\n adapter,\n data,\n enableAtomicWrites: false,\n fields,\n path,\n tableName,\n })\n\n if (customID) {\n rowToInsert.row.id = customID\n }\n\n // First, we insert the main row\n try {\n if (operation === 'update') {\n const target = upsertTarget || adapter.tables[tableName].id\n\n // Check if we only have relationship operations and no main row data to update\n // Exclude timestamp-only updates when we only have relationship operations\n const rowKeys = Object.keys(rowToInsert.row)\n const hasMainRowData =\n rowKeys.length > 0 && !rowKeys.every((key) => key === 'updatedAt' || key === 'createdAt')\n\n if (hasMainRowData) {\n if (id) {\n rowToInsert.row.id = id\n ;[insertedRow] = await adapter.insert({\n db,\n onConflictDoUpdate: { set: rowToInsert.row, target },\n tableName,\n values: rowToInsert.row,\n })\n } else {\n ;[insertedRow] = await adapter.insert({\n db,\n onConflictDoUpdate: { set: rowToInsert.row, target, where },\n tableName,\n values: rowToInsert.row,\n })\n }\n } else {\n // No main row data to update, just use the existing ID\n insertedRow = { id }\n }\n } else {\n if (adapter.allowIDOnCreate && data.id) {\n rowToInsert.row.id = data.id\n }\n ;[insertedRow] = await adapter.insert({\n db,\n tableName,\n values: rowToInsert.row,\n })\n }\n\n const localesToInsert: Record<string, unknown>[] = []\n const relationsToInsert: Record<string, unknown>[] = []\n const textsToInsert: Record<string, unknown>[] = []\n const numbersToInsert: Record<string, unknown>[] = []\n const blocksToInsert: { [blockType: string]: BlockRowToInsert[] } = {}\n const selectsToInsert: { [selectTableName: string]: Record<string, unknown>[] } = {}\n\n // If there are locale rows with data, add the parent and locale to each\n if (Object.keys(rowToInsert.locales).length > 0) {\n Object.entries(rowToInsert.locales).forEach(([locale, localeRow]) => {\n localeRow._parentID = insertedRow.id\n localeRow._locale = locale\n localesToInsert.push(localeRow)\n })\n }\n\n // If there are relationships, add parent to each\n if (rowToInsert.relationships.length > 0) {\n rowToInsert.relationships.forEach((relation) => {\n relation.parent = insertedRow.id\n relationsToInsert.push(relation)\n })\n }\n\n // If there are texts, add parent to each\n if (rowToInsert.texts.length > 0) {\n rowToInsert.texts.forEach((textRow) => {\n textRow.parent = insertedRow.id\n textsToInsert.push(textRow)\n })\n }\n\n // If there are numbers, add parent to each\n if (rowToInsert.numbers.length > 0) {\n rowToInsert.numbers.forEach((numberRow) => {\n numberRow.parent = insertedRow.id\n numbersToInsert.push(numberRow)\n })\n }\n\n // If there are selects, add parent to each, and then\n // store by table name and rows\n if (Object.keys(rowToInsert.selects).length > 0) {\n Object.entries(rowToInsert.selects).forEach(([selectTableName, selectRows]) => {\n selectsToInsert[selectTableName] = []\n\n selectRows.forEach((row) => {\n if (typeof row.parent === 'undefined') {\n row.parent = insertedRow.id\n }\n\n selectsToInsert[selectTableName].push(row)\n })\n })\n }\n\n // If there are blocks, add parent to each, and then\n // store by table name and rows\n Object.keys(rowToInsert.blocks).forEach((tableName) => {\n rowToInsert.blocks[tableName].forEach((blockRow) => {\n blockRow.row._parentID = insertedRow.id\n if (!blocksToInsert[tableName]) {\n blocksToInsert[tableName] = []\n }\n if (blockRow.row.uuid) {\n delete blockRow.row.uuid\n }\n blocksToInsert[tableName].push(blockRow)\n })\n })\n\n // //////////////////////////////////\n // INSERT LOCALES\n // //////////////////////////////////\n\n if (localesToInsert.length > 0) {\n const localeTableName = `${tableName}${adapter.localesSuffix}`\n const localeTable = adapter.tables[`${tableName}${adapter.localesSuffix}`]\n\n if (operation === 'update') {\n await adapter.deleteWhere({\n db,\n tableName: localeTableName,\n where: eq(localeTable._parentID, insertedRow.id),\n })\n }\n\n await adapter.insert({\n db,\n tableName: localeTableName,\n values: localesToInsert,\n })\n }\n\n // //////////////////////////////////\n // INSERT RELATIONSHIPS\n // //////////////////////////////////\n\n const relationshipsTableName = `${tableName}${adapter.relationshipsSuffix}`\n\n if (operation === 'update') {\n // Filter out specific item deletions (those with itemToRemove) from general path deletions\n const generalRelationshipDeletes = rowToInsert.relationshipsToDelete.filter(\n (rel) => !('itemToRemove' in rel),\n )\n\n await deleteExistingRowsByPath({\n adapter,\n db,\n localeColumnName: 'locale',\n parentColumnName: 'parent',\n parentID: insertedRow.id,\n pathColumnName: 'path',\n rows: [...relationsToInsert, ...generalRelationshipDeletes],\n tableName: relationshipsTableName,\n })\n }\n\n if (relationsToInsert.length > 0) {\n await adapter.insert({\n db,\n tableName: relationshipsTableName,\n values: relationsToInsert,\n })\n }\n\n // //////////////////////////////////\n // HANDLE RELATIONSHIP $push OPERATIONS\n // //////////////////////////////////\n\n if (rowToInsert.relationshipsToAppend.length > 0) {\n // Prepare all relationships for batch insert (order will be set after max query)\n const relationshipsToInsert = rowToInsert.relationshipsToAppend.map((rel) => {\n const parentId = id || insertedRow.id\n const row: Record<string, unknown> = {\n parent: parentId as number | string, // Use 'parent' key for Drizzle table\n path: rel.path,\n }\n\n // Only add locale if this relationship table has a locale column\n const relationshipTable = adapter.rawTables[relationshipsTableName]\n if (rel.locale && relationshipTable && relationshipTable.columns.locale) {\n row.locale = rel.locale\n }\n\n if (rel.relationTo) {\n // Use camelCase key for Drizzle table (e.g., categoriesID not categories_id)\n row[`${rel.relationTo}ID`] = rel.value\n }\n\n return row\n })\n\n if (relationshipsToInsert.length > 0) {\n // Check for potential duplicates\n const relationshipTable = adapter.tables[relationshipsTableName]\n\n if (relationshipTable) {\n // Build conditions only if we have relationships to check\n if (relationshipsToInsert.length === 0) {\n return // No relationships to insert\n }\n\n const conditions = relationshipsToInsert.map((row: RelationshipRow) => {\n const parts = [\n eq(relationshipTable.parent, row.parent),\n eq(relationshipTable.path, row.path),\n ]\n\n // Add locale condition\n if (row.locale !== undefined && relationshipTable.locale) {\n parts.push(eq(relationshipTable.locale, row.locale))\n } else if (relationshipTable.locale) {\n parts.push(isNull(relationshipTable.locale))\n }\n\n // Add all relationship ID matches using schema fields\n for (const [key, value] of Object.entries(row)) {\n if (key.endsWith('ID') && value != null) {\n const column = relationshipTable[key]\n if (column && typeof column === 'object') {\n parts.push(eq(column, value))\n }\n }\n }\n\n return and(...parts)\n })\n\n // Get both existing relationships AND max order in a single query\n let existingRels: Record<string, unknown>[] = []\n let maxOrder = 0\n\n if (conditions.length > 0) {\n // Query for existing relationships\n existingRels = await (db as any)\n .select()\n .from(relationshipTable)\n .where(or(...conditions))\n }\n\n // Get max order for this parent across all paths in a single query\n const parentId = id || insertedRow.id\n const maxOrderResult = await (db as any)\n .select({ maxOrder: relationshipTable.order })\n .from(relationshipTable)\n .where(eq(relationshipTable.parent, parentId))\n .orderBy(desc(relationshipTable.order))\n .limit(1)\n\n if (maxOrderResult.length > 0 && maxOrderResult[0].maxOrder) {\n maxOrder = maxOrderResult[0].maxOrder\n }\n\n // Set order values for all relationships based on max order\n relationshipsToInsert.forEach((row, index) => {\n row.order = maxOrder + index + 1\n })\n\n // Filter out relationships that already exist\n const relationshipsToActuallyInsert = relationshipsToInsert.filter((newRow) => {\n return !existingRels.some((existingRow: Record<string, unknown>) => {\n // Check if this relationship already exists\n let matches = existingRow.parent === newRow.parent && existingRow.path === newRow.path\n\n if (newRow.locale !== undefined) {\n matches = matches && existingRow.locale === newRow.locale\n }\n\n // Check relationship value matches - convert to camelCase for comparison\n for (const key of Object.keys(newRow)) {\n if (key.endsWith('ID')) {\n // Now using camelCase keys\n matches = matches && existingRow[key] === newRow[key]\n }\n }\n\n return matches\n })\n })\n\n // Insert only non-duplicate relationships\n if (relationshipsToActuallyInsert.length > 0) {\n await adapter.insert({\n db,\n tableName: relationshipsTableName,\n values: relationshipsToActuallyInsert,\n })\n }\n }\n }\n }\n\n // //////////////////////////////////\n // HANDLE RELATIONSHIP $remove OPERATIONS\n // //////////////////////////////////\n\n if (rowToInsert.relationshipsToDelete.some((rel) => 'itemToRemove' in rel)) {\n const relationshipTable = adapter.tables[relationshipsTableName]\n\n if (relationshipTable) {\n for (const relToDelete of rowToInsert.relationshipsToDelete) {\n if ('itemToRemove' in relToDelete && relToDelete.itemToRemove) {\n const item = relToDelete.itemToRemove\n const parentId = (id || insertedRow.id) as number | string\n\n const conditions = [\n eq(relationshipTable.parent, parentId),\n eq(relationshipTable.path, relToDelete.path),\n ]\n\n // Add locale condition if this relationship table has a locale column\n if (adapter.rawTables[relationshipsTableName]?.columns.locale) {\n if (relToDelete.locale) {\n conditions.push(eq(relationshipTable.locale, relToDelete.locale))\n } else {\n conditions.push(isNull(relationshipTable.locale))\n }\n }\n\n // Handle polymorphic vs simple relationships\n if (typeof item === 'object' && 'relationTo' in item) {\n // Polymorphic relationship - convert to camelCase key\n const camelKey = `${item.relationTo}ID`\n if (relationshipTable[camelKey]) {\n conditions.push(eq(relationshipTable[camelKey], item.value))\n }\n } else if (relToDelete.relationTo) {\n // Simple relationship - convert to camelCase key\n const camelKey = `${relToDelete.relationTo}ID`\n if (relationshipTable[camelKey]) {\n conditions.push(eq(relationshipTable[camelKey], item))\n }\n }\n\n // Execute DELETE using Drizzle query builder\n await adapter.deleteWhere({\n db,\n tableName: relationshipsTableName,\n where: and(...conditions),\n })\n }\n }\n }\n }\n\n // //////////////////////////////////\n // INSERT hasMany TEXTS\n // //////////////////////////////////\n\n const textsTableName = `${tableName}_texts`\n\n if (operation === 'update') {\n await deleteExistingRowsByPath({\n adapter,\n db,\n localeColumnName: 'locale',\n parentColumnName: 'parent',\n parentID: insertedRow.id,\n pathColumnName: 'path',\n rows: [...textsToInsert, ...rowToInsert.textsToDelete],\n tableName: textsTableName,\n })\n }\n\n if (textsToInsert.length > 0) {\n await adapter.insert({\n db,\n tableName: textsTableName,\n values: textsToInsert,\n })\n }\n\n // //////////////////////////////////\n // INSERT hasMany NUMBERS\n // //////////////////////////////////\n\n const numbersTableName = `${tableName}_numbers`\n\n if (operation === 'update') {\n await deleteExistingRowsByPath({\n adapter,\n db,\n localeColumnName: 'locale',\n parentColumnName: 'parent',\n parentID: insertedRow.id,\n pathColumnName: 'path',\n rows: [...numbersToInsert, ...rowToInsert.numbersToDelete],\n tableName: numbersTableName,\n })\n }\n\n if (numbersToInsert.length > 0) {\n await adapter.insert({\n db,\n tableName: numbersTableName,\n values: numbersToInsert,\n })\n }\n\n // //////////////////////////////////\n // INSERT BLOCKS\n // //////////////////////////////////\n\n const insertedBlockRows: Record<string, Record<string, unknown>[]> = {}\n\n if (operation === 'update') {\n for (const tableName of rowToInsert.blocksToDelete) {\n const blockTable = adapter.tables[tableName]\n await adapter.deleteWhere({\n db,\n tableName,\n where: eq(blockTable._parentID, insertedRow.id),\n })\n }\n }\n\n // When versions are enabled, adapter is used to track mapping between blocks/arrays ObjectID to their numeric generated representation, then we use it for nested to arrays/blocks select hasMany in versions.\n const arraysBlocksUUIDMap: Record<string, number | string> = {}\n\n for (const [tableName, blockRows] of Object.entries(blocksToInsert)) {\n insertedBlockRows[tableName] = await adapter.insert({\n db,\n tableName,\n values: blockRows.map(({ row }) => row),\n })\n\n insertedBlockRows[tableName].forEach((row, i) => {\n blockRows[i].row = row\n if (\n typeof row._uuid === 'string' &&\n (typeof row.id === 'string' || typeof row.id === 'number')\n ) {\n arraysBlocksUUIDMap[row._uuid] = row.id\n }\n })\n\n const blockLocaleIndexMap: number[] = []\n\n const blockLocaleRowsToInsert = blockRows.reduce((acc, blockRow, i) => {\n if (Object.entries(blockRow.locales).length > 0) {\n Object.entries(blockRow.locales).forEach(([blockLocale, blockLocaleData]) => {\n if (Object.keys(blockLocaleData).length > 0) {\n blockLocaleData._parentID = blockRow.row.id\n blockLocaleData._locale = blockLocale\n acc.push(blockLocaleData)\n blockLocaleIndexMap.push(i)\n }\n })\n }\n\n return acc\n }, [])\n\n if (blockLocaleRowsToInsert.length > 0) {\n await adapter.insert({\n db,\n tableName: `${tableName}${adapter.localesSuffix}`,\n values: blockLocaleRowsToInsert,\n })\n }\n\n await insertArrays({\n adapter,\n arrays: blockRows.map(({ arrays }) => arrays),\n db,\n parentRows: insertedBlockRows[tableName],\n uuidMap: arraysBlocksUUIDMap,\n })\n }\n\n // //////////////////////////////////\n // INSERT ARRAYS RECURSIVELY\n // //////////////////////////////////\n\n if (operation === 'update') {\n for (const arrayTableName of Object.keys(rowToInsert.arrays)) {\n await deleteExistingArrayRows({\n adapter,\n db,\n parentID: insertedRow.id,\n tableName: arrayTableName,\n })\n }\n }\n\n await insertArrays({\n adapter,\n arrays: [rowToInsert.arrays, rowToInsert.arraysToPush],\n db,\n parentRows: [insertedRow, insertedRow],\n uuidMap: arraysBlocksUUIDMap,\n })\n\n // //////////////////////////////////\n // INSERT hasMany SELECTS\n // //////////////////////////////////\n\n for (const [selectTableName, tableRows] of Object.entries(selectsToInsert)) {\n const selectTable = adapter.tables[selectTableName]\n if (operation === 'update') {\n await adapter.deleteWhere({\n db,\n tableName: selectTableName,\n where: eq(selectTable.parent, insertedRow.id),\n })\n }\n\n if (Object.keys(arraysBlocksUUIDMap).length > 0) {\n tableRows.forEach((row: RelationshipRow) => {\n if (row.parent in arraysBlocksUUIDMap) {\n row.parent = arraysBlocksUUIDMap[row.parent]\n }\n })\n }\n\n if (tableRows.length) {\n await adapter.insert({\n db,\n tableName: selectTableName,\n values: tableRows,\n })\n }\n }\n } catch (error) {\n handleUpsertError({ id, adapter, collectionSlug, error, globalSlug, req, tableName })\n }\n\n if (ignoreResult === 'idOnly') {\n return { id: insertedRow.id } as T\n }\n\n if (ignoreResult) {\n return data as T\n }\n\n // //////////////////////////////////\n // RETRIEVE NEWLY UPDATED ROW\n // //////////////////////////////////\n\n const findManyArgs = buildFindManyArgs({\n adapter,\n depth: 0,\n fields,\n joinQuery: false,\n select,\n tableName,\n })\n\n findManyArgs.where = eq(adapter.tables[tableName].id, insertedRow.id)\n\n const doc = await db.query[tableName].findFirst(findManyArgs)\n\n // //////////////////////////////////\n // TRANSFORM DATA\n // //////////////////////////////////\n\n const result = transform<T>({\n adapter,\n config: adapter.payload.config,\n data: doc,\n fields,\n joinQuery: false,\n tableName,\n })\n\n return result\n}\n"],"names":["and","desc","eq","isNull","or","buildFindManyArgs","transform","transformForWrite","markWrite","deleteExistingArrayRows","deleteExistingRowsByPath","handleUpsertError","insertArrays","shouldUseOptimizedUpsertRow","upsertRow","id","adapter","collectionSlug","data","db","fields","globalSlug","ignoreResult","customID","joinQuery","_joinQuery","operation","path","req","select","tableName","upsertTarget","where","createdAt","Date","toISOString","insertedRow","transformedForWrite","enableAtomicWrites","row","arraysToPush","drizzle","Object","keys","length","arrays","parentRows","uuidMap","updatedAt","hasDataToUpdate","update","tables","set","findManyArgs","depth","findManyKeysLength","hasOnlyColumns","columns","doc","query","findFirst","config","payload","selectedFields","column","enabled","entries","docs","returning","undefined","error","rowToInsert","target","rowKeys","hasMainRowData","every","key","insert","onConflictDoUpdate","values","allowIDOnCreate","localesToInsert","relationsToInsert","textsToInsert","numbersToInsert","blocksToInsert","selectsToInsert","locales","forEach","locale","localeRow","_parentID","_locale","push","relationships","relation","parent","texts","textRow","numbers","numberRow","selects","selectTableName","selectRows","blocks","blockRow","uuid","localeTableName","localesSuffix","localeTable","deleteWhere","relationshipsTableName","relationshipsSuffix","generalRelationshipDeletes","relationshipsToDelete","filter","rel","localeColumnName","parentColumnName","parentID","pathColumnName","rows","relationshipsToAppend","relationshipsToInsert","map","parentId","relationshipTable","rawTables","relationTo","value","conditions","parts","endsWith","existingRels","maxOrder","from","maxOrderResult","order","orderBy","limit","index","relationshipsToActuallyInsert","newRow","some","existingRow","matches","relToDelete","itemToRemove","item","camelKey","textsTableName","textsToDelete","numbersTableName","numbersToDelete","insertedBlockRows","blocksToDelete","blockTable","arraysBlocksUUIDMap","blockRows","i","_uuid","blockLocaleIndexMap","blockLocaleRowsToInsert","reduce","acc","blockLocale","blockLocaleData","arrayTableName","tableRows","selectTable","result"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/upsertRow/index.ts"],"sourcesContent":["import type { LibSQLDatabase } from 'drizzle-orm/libsql'\nimport type { SelectedFields } from 'drizzle-orm/sqlite-core'\nimport type { TypeWithID } from 'payload'\n\nimport { and, desc, eq, isNull, or } from 'drizzle-orm'\n\nimport type { BlockRowToInsert } from '../transform/write/types.js'\nimport type { Args } from './types.js'\n\ntype RelationshipRow = {\n [key: string]: number | string | undefined // For relationship ID columns like categoriesID, moviesID, etc.\n id?: number | string\n locale?: string\n order: number\n parent: number | string // Drizzle table uses 'parent' key\n path: string\n}\n\nimport { buildFindManyArgs } from '../find/buildFindManyArgs.js'\nimport { transform } from '../transform/read/index.js'\nimport { transformForWrite } from '../transform/write/index.js'\nimport { markWrite } from '../utilities/readAfterWrite.js'\nimport { deleteExistingArrayRows } from './deleteExistingArrayRows.js'\nimport { deleteExistingRowsByPath } from './deleteExistingRowsByPath.js'\nimport { handleUpsertError } from './handleUpsertError.js'\nimport { insertArrays } from './insertArrays.js'\nimport { shouldUseOptimizedUpsertRow } from './shouldUseOptimizedUpsertRow.js'\n\n/**\n * If `id` is provided, it will update the row with that ID.\n * If `where` is provided, it will update the row that matches the `where`\n * If neither `id` nor `where` is provided, it will create a new row.\n *\n * adapter function replaces the entire row and does not support partial updates.\n */\nexport const upsertRow = async <T extends Record<string, unknown> | TypeWithID>({\n id,\n adapter,\n collectionSlug,\n data,\n db,\n fields,\n globalSlug,\n ignoreResult,\n // TODO:\n // When we support joins for write operations (create/update) - pass collectionSlug to the buildFindManyArgs\n // Make a new argument in upsertRow.ts and pass the slug from every operation.\n customID,\n joinQuery: _joinQuery,\n operation,\n path = '',\n req,\n select,\n tableName,\n upsertTarget,\n where,\n}: Args): Promise<null | T> => {\n if (operation === 'create' && !data.createdAt) {\n data.createdAt = new Date().toISOString()\n }\n\n markWrite(adapter)\n\n let insertedRow: Record<string, unknown> = { id }\n if (id && shouldUseOptimizedUpsertRow({ data, fields })) {\n try {\n const transformedForWrite = transformForWrite({\n adapter,\n data,\n enableAtomicWrites: true,\n fields,\n tableName,\n })\n const { row } = transformedForWrite\n const { arraysToPush } = transformedForWrite\n\n const drizzle = db as LibSQLDatabase\n const updateWhere = where\n ? and(eq(adapter.tables[tableName].id, id), where)\n : eq(adapter.tables[tableName].id, id)\n\n // First, handle $push arrays\n\n if (arraysToPush && Object.keys(arraysToPush)?.length) {\n await insertArrays({\n adapter,\n arrays: [arraysToPush],\n db,\n parentRows: [insertedRow],\n uuidMap: {},\n })\n }\n\n // If row.updatedAt is not set, delete it to avoid triggering hasDataToUpdate. `updatedAt` may be explicitly set to null to\n // disable triggering hasDataToUpdate.\n if (typeof row.updatedAt === 'undefined' || row.updatedAt === null) {\n delete row.updatedAt\n }\n\n const hasDataToUpdate = row && Object.keys(row)?.length\n\n // Then, handle regular row update\n if (ignoreResult) {\n if (hasDataToUpdate) {\n // Only update row if there is something to update.\n // Example: if the data only consists of a single $push, calling insertArrays is enough - we don't need to update the row.\n await drizzle.update(adapter.tables[tableName]).set(row).where(updateWhere)\n }\n return ignoreResult === 'idOnly' ? ({ id } as T) : null\n }\n\n const findManyArgs = buildFindManyArgs({\n adapter,\n depth: 0,\n fields,\n joinQuery: false,\n select,\n tableName,\n })\n\n const findManyKeysLength = Object.keys(findManyArgs).length\n const hasOnlyColumns = Object.keys(findManyArgs.columns || {}).length > 0\n\n if (!hasDataToUpdate) {\n // Nothing to update => just fetch current row and return\n findManyArgs.where = updateWhere\n\n const doc = await db.query[tableName].findFirst(findManyArgs)\n\n if (!doc) {\n return null\n }\n\n return transform<T>({\n adapter,\n config: adapter.payload.config,\n data: doc,\n fields,\n joinQuery: false,\n tableName,\n })\n }\n\n if (findManyKeysLength === 0 || hasOnlyColumns) {\n // Optimization - No need for joins => can simply use returning(). This is optimal for very simple collections\n // without complex fields that live in separate tables like blocks, arrays, relationships, etc.\n\n const selectedFields: SelectedFields = {}\n if (hasOnlyColumns) {\n for (const [column, enabled] of Object.entries(findManyArgs.columns)) {\n if (enabled) {\n selectedFields[column] = adapter.tables[tableName][column]\n }\n }\n }\n\n const docs = await drizzle\n .update(adapter.tables[tableName])\n .set(row)\n .where(updateWhere)\n .returning(Object.keys(selectedFields).length ? selectedFields : undefined)\n\n if (!docs[0]) {\n return null\n }\n\n return transform<T>({\n adapter,\n config: adapter.payload.config,\n data: docs[0],\n fields,\n joinQuery: false,\n tableName,\n })\n }\n\n // DB Update that needs the result, potentially with joins => need to update first, then find. returning() does not work with joins.\n\n const docs = await drizzle\n .update(adapter.tables[tableName])\n .set(row)\n .where(updateWhere)\n .returning({\n id: adapter.tables[tableName].id,\n })\n\n if (!docs[0]) {\n return null\n }\n\n insertedRow = docs[0]\n\n findManyArgs.where = eq(adapter.tables[tableName].id, insertedRow.id)\n\n const doc = await db.query[tableName].findFirst(findManyArgs)\n\n return transform<T>({\n adapter,\n config: adapter.payload.config,\n data: doc,\n fields,\n joinQuery: false,\n tableName,\n })\n } catch (error) {\n handleUpsertError({ id, adapter, collectionSlug, error, globalSlug, req, tableName })\n }\n }\n // Split out the incoming data into the corresponding:\n // base row, locales, relationships, blocks, and arrays\n const rowToInsert = transformForWrite({\n adapter,\n data,\n enableAtomicWrites: false,\n fields,\n path,\n tableName,\n })\n\n if (customID) {\n rowToInsert.row.id = customID\n }\n\n // First, we insert the main row\n try {\n if (operation === 'update') {\n const target = upsertTarget || adapter.tables[tableName].id\n\n // Check if we only have relationship operations and no main row data to update\n // Exclude timestamp-only updates when we only have relationship operations.\n // Localized field updates live in the `_locales` table, so the main row may only\n // contain timestamps — in that case the parent row's `updatedAt` must still bump.\n const rowKeys = Object.keys(rowToInsert.row)\n const hasLocalizedData = Object.keys(rowToInsert.locales).length > 0\n const hasMainRowData =\n rowKeys.length > 0 &&\n (hasLocalizedData || !rowKeys.every((key) => key === 'updatedAt' || key === 'createdAt'))\n\n if (hasMainRowData) {\n if (id) {\n rowToInsert.row.id = id\n ;[insertedRow] = await adapter.insert({\n db,\n onConflictDoUpdate: where\n ? { set: rowToInsert.row, target, where }\n : { set: rowToInsert.row, target },\n tableName,\n values: rowToInsert.row,\n })\n } else {\n ;[insertedRow] = await adapter.insert({\n db,\n onConflictDoUpdate: { set: rowToInsert.row, target, where },\n tableName,\n values: rowToInsert.row,\n })\n }\n\n if (!insertedRow) {\n return null\n }\n } else {\n // No main row data to update, just use the existing ID\n insertedRow = { id }\n }\n } else {\n if (adapter.allowIDOnCreate && data.id) {\n rowToInsert.row.id = data.id\n }\n ;[insertedRow] = await adapter.insert({\n db,\n tableName,\n values: rowToInsert.row,\n })\n }\n\n const localesToInsert: Record<string, unknown>[] = []\n const relationsToInsert: Record<string, unknown>[] = []\n const textsToInsert: Record<string, unknown>[] = []\n const numbersToInsert: Record<string, unknown>[] = []\n const blocksToInsert: { [blockType: string]: BlockRowToInsert[] } = {}\n const selectsToInsert: { [selectTableName: string]: Record<string, unknown>[] } = {}\n\n // If there are locale rows with data, add the parent and locale to each\n if (Object.keys(rowToInsert.locales).length > 0) {\n Object.entries(rowToInsert.locales).forEach(([locale, localeRow]) => {\n localeRow._parentID = insertedRow.id\n localeRow._locale = locale\n localesToInsert.push(localeRow)\n })\n }\n\n // If there are relationships, add parent to each\n if (rowToInsert.relationships.length > 0) {\n rowToInsert.relationships.forEach((relation) => {\n relation.parent = insertedRow.id\n relationsToInsert.push(relation)\n })\n }\n\n // If there are texts, add parent to each\n if (rowToInsert.texts.length > 0) {\n rowToInsert.texts.forEach((textRow) => {\n textRow.parent = insertedRow.id\n textsToInsert.push(textRow)\n })\n }\n\n // If there are numbers, add parent to each\n if (rowToInsert.numbers.length > 0) {\n rowToInsert.numbers.forEach((numberRow) => {\n numberRow.parent = insertedRow.id\n numbersToInsert.push(numberRow)\n })\n }\n\n // If there are selects, add parent to each, and then\n // store by table name and rows\n if (Object.keys(rowToInsert.selects).length > 0) {\n Object.entries(rowToInsert.selects).forEach(([selectTableName, selectRows]) => {\n selectsToInsert[selectTableName] = []\n\n selectRows.forEach((row) => {\n if (typeof row.parent === 'undefined') {\n row.parent = insertedRow.id\n }\n\n selectsToInsert[selectTableName].push(row)\n })\n })\n }\n\n // If there are blocks, add parent to each, and then\n // store by table name and rows\n Object.keys(rowToInsert.blocks).forEach((tableName) => {\n rowToInsert.blocks[tableName].forEach((blockRow) => {\n blockRow.row._parentID = insertedRow.id\n if (!blocksToInsert[tableName]) {\n blocksToInsert[tableName] = []\n }\n if (blockRow.row.uuid) {\n delete blockRow.row.uuid\n }\n blocksToInsert[tableName].push(blockRow)\n })\n })\n\n // //////////////////////////////////\n // INSERT LOCALES\n // //////////////////////////////////\n\n if (localesToInsert.length > 0) {\n const localeTableName = `${tableName}${adapter.localesSuffix}`\n const localeTable = adapter.tables[`${tableName}${adapter.localesSuffix}`]\n\n if (operation === 'update') {\n await adapter.deleteWhere({\n db,\n tableName: localeTableName,\n where: eq(localeTable._parentID, insertedRow.id),\n })\n }\n\n await adapter.insert({\n db,\n tableName: localeTableName,\n values: localesToInsert,\n })\n }\n\n // //////////////////////////////////\n // INSERT RELATIONSHIPS\n // //////////////////////////////////\n\n const relationshipsTableName = `${tableName}${adapter.relationshipsSuffix}`\n\n if (operation === 'update') {\n // Filter out specific item deletions (those with itemToRemove) from general path deletions\n const generalRelationshipDeletes = rowToInsert.relationshipsToDelete.filter(\n (rel) => !('itemToRemove' in rel),\n )\n\n await deleteExistingRowsByPath({\n adapter,\n db,\n localeColumnName: 'locale',\n parentColumnName: 'parent',\n parentID: insertedRow.id,\n pathColumnName: 'path',\n rows: [...relationsToInsert, ...generalRelationshipDeletes],\n tableName: relationshipsTableName,\n })\n }\n\n if (relationsToInsert.length > 0) {\n await adapter.insert({\n db,\n tableName: relationshipsTableName,\n values: relationsToInsert,\n })\n }\n\n // //////////////////////////////////\n // HANDLE RELATIONSHIP $push OPERATIONS\n // //////////////////////////////////\n\n if (rowToInsert.relationshipsToAppend.length > 0) {\n // Prepare all relationships for batch insert (order will be set after max query)\n const relationshipsToInsert = rowToInsert.relationshipsToAppend.map((rel) => {\n const parentId = id || insertedRow.id\n const row: Record<string, unknown> = {\n parent: parentId, // Use 'parent' key for Drizzle table\n path: rel.path,\n }\n\n // Only add locale if this relationship table has a locale column\n const relationshipTable = adapter.rawTables[relationshipsTableName]\n if (rel.locale && relationshipTable && relationshipTable.columns.locale) {\n row.locale = rel.locale\n }\n\n if (rel.relationTo) {\n // Use camelCase key for Drizzle table (e.g., categoriesID not categories_id)\n row[`${rel.relationTo}ID`] = rel.value\n }\n\n return row\n })\n\n if (relationshipsToInsert.length > 0) {\n // Check for potential duplicates\n const relationshipTable = adapter.tables[relationshipsTableName]\n\n if (relationshipTable) {\n // Build conditions only if we have relationships to check\n if (relationshipsToInsert.length === 0) {\n return // No relationships to insert\n }\n\n const conditions = relationshipsToInsert.map((row: RelationshipRow) => {\n const parts = [\n eq(relationshipTable.parent, row.parent),\n eq(relationshipTable.path, row.path),\n ]\n\n // Add locale condition\n if (row.locale !== undefined && relationshipTable.locale) {\n parts.push(eq(relationshipTable.locale, row.locale))\n } else if (relationshipTable.locale) {\n parts.push(isNull(relationshipTable.locale))\n }\n\n // Add all relationship ID matches using schema fields\n for (const [key, value] of Object.entries(row)) {\n if (key.endsWith('ID') && value != null) {\n const column = relationshipTable[key]\n if (column && typeof column === 'object') {\n parts.push(eq(column, value))\n }\n }\n }\n\n return and(...parts)\n })\n\n // Get both existing relationships AND max order in a single query\n let existingRels: Record<string, unknown>[] = []\n let maxOrder = 0\n\n if (conditions.length > 0) {\n // Query for existing relationships\n existingRels = await (db as any)\n .select()\n .from(relationshipTable)\n .where(or(...conditions))\n }\n\n // Get max order for this parent across all paths in a single query\n const parentId = id || insertedRow.id\n const maxOrderResult = await (db as any)\n .select({ maxOrder: relationshipTable.order })\n .from(relationshipTable)\n .where(eq(relationshipTable.parent, parentId))\n .orderBy(desc(relationshipTable.order))\n .limit(1)\n\n if (maxOrderResult.length > 0 && maxOrderResult[0].maxOrder) {\n maxOrder = maxOrderResult[0].maxOrder\n }\n\n // Set order values for all relationships based on max order\n relationshipsToInsert.forEach((row, index) => {\n row.order = maxOrder + index + 1\n })\n\n // Filter out relationships that already exist\n const relationshipsToActuallyInsert = relationshipsToInsert.filter((newRow) => {\n return !existingRels.some((existingRow: Record<string, unknown>) => {\n // Check if this relationship already exists\n let matches = existingRow.parent === newRow.parent && existingRow.path === newRow.path\n\n if (newRow.locale !== undefined) {\n matches = matches && existingRow.locale === newRow.locale\n }\n\n // Check relationship value matches - convert to camelCase for comparison\n for (const key of Object.keys(newRow)) {\n if (key.endsWith('ID')) {\n // Now using camelCase keys\n matches = matches && existingRow[key] === newRow[key]\n }\n }\n\n return matches\n })\n })\n\n // Insert only non-duplicate relationships\n if (relationshipsToActuallyInsert.length > 0) {\n await adapter.insert({\n db,\n tableName: relationshipsTableName,\n values: relationshipsToActuallyInsert,\n })\n }\n }\n }\n }\n\n // //////////////////////////////////\n // HANDLE RELATIONSHIP $remove OPERATIONS\n // //////////////////////////////////\n\n if (rowToInsert.relationshipsToDelete.some((rel) => 'itemToRemove' in rel)) {\n const relationshipTable = adapter.tables[relationshipsTableName]\n\n if (relationshipTable) {\n for (const relToDelete of rowToInsert.relationshipsToDelete) {\n if ('itemToRemove' in relToDelete && relToDelete.itemToRemove) {\n const item = relToDelete.itemToRemove\n const parentId = (id || insertedRow.id) as number | string\n\n const conditions = [\n eq(relationshipTable.parent, parentId),\n eq(relationshipTable.path, relToDelete.path),\n ]\n\n // Add locale condition if this relationship table has a locale column\n if (adapter.rawTables[relationshipsTableName]?.columns.locale) {\n if (relToDelete.locale) {\n conditions.push(eq(relationshipTable.locale, relToDelete.locale))\n } else {\n conditions.push(isNull(relationshipTable.locale))\n }\n }\n\n // Handle polymorphic vs simple relationships\n if (typeof item === 'object' && 'relationTo' in item) {\n // Polymorphic relationship - convert to camelCase key\n const camelKey = `${item.relationTo}ID`\n if (relationshipTable[camelKey]) {\n conditions.push(eq(relationshipTable[camelKey], item.value))\n }\n } else if (relToDelete.relationTo) {\n // Simple relationship - convert to camelCase key\n const camelKey = `${relToDelete.relationTo}ID`\n if (relationshipTable[camelKey]) {\n conditions.push(eq(relationshipTable[camelKey], item))\n }\n }\n\n // Execute DELETE using Drizzle query builder\n await adapter.deleteWhere({\n db,\n tableName: relationshipsTableName,\n where: and(...conditions),\n })\n }\n }\n }\n }\n\n // //////////////////////////////////\n // INSERT hasMany TEXTS\n // //////////////////////////////////\n\n const textsTableName = `${tableName}_texts`\n\n if (operation === 'update') {\n await deleteExistingRowsByPath({\n adapter,\n db,\n localeColumnName: 'locale',\n parentColumnName: 'parent',\n parentID: insertedRow.id,\n pathColumnName: 'path',\n rows: [...textsToInsert, ...rowToInsert.textsToDelete],\n tableName: textsTableName,\n })\n }\n\n if (textsToInsert.length > 0) {\n await adapter.insert({\n db,\n tableName: textsTableName,\n values: textsToInsert,\n })\n }\n\n // //////////////////////////////////\n // INSERT hasMany NUMBERS\n // //////////////////////////////////\n\n const numbersTableName = `${tableName}_numbers`\n\n if (operation === 'update') {\n await deleteExistingRowsByPath({\n adapter,\n db,\n localeColumnName: 'locale',\n parentColumnName: 'parent',\n parentID: insertedRow.id,\n pathColumnName: 'path',\n rows: [...numbersToInsert, ...rowToInsert.numbersToDelete],\n tableName: numbersTableName,\n })\n }\n\n if (numbersToInsert.length > 0) {\n await adapter.insert({\n db,\n tableName: numbersTableName,\n values: numbersToInsert,\n })\n }\n\n // //////////////////////////////////\n // INSERT BLOCKS\n // //////////////////////////////////\n\n const insertedBlockRows: Record<string, Record<string, unknown>[]> = {}\n\n if (operation === 'update') {\n for (const tableName of rowToInsert.blocksToDelete) {\n const blockTable = adapter.tables[tableName]\n await adapter.deleteWhere({\n db,\n tableName,\n where: eq(blockTable._parentID, insertedRow.id),\n })\n }\n }\n\n // When versions are enabled, adapter is used to track mapping between blocks/arrays ObjectID to their numeric generated representation, then we use it for nested to arrays/blocks select hasMany in versions.\n const arraysBlocksUUIDMap: Record<string, number | string> = {}\n\n for (const [tableName, blockRows] of Object.entries(blocksToInsert)) {\n insertedBlockRows[tableName] = await adapter.insert({\n db,\n tableName,\n values: blockRows.map(({ row }) => row),\n })\n\n insertedBlockRows[tableName].forEach((row, i) => {\n blockRows[i].row = row\n if (\n typeof row._uuid === 'string' &&\n (typeof row.id === 'string' || typeof row.id === 'number')\n ) {\n arraysBlocksUUIDMap[row._uuid] = row.id\n }\n })\n\n const blockLocaleIndexMap: number[] = []\n\n const blockLocaleRowsToInsert = blockRows.reduce((acc, blockRow, i) => {\n if (Object.entries(blockRow.locales).length > 0) {\n Object.entries(blockRow.locales).forEach(([blockLocale, blockLocaleData]) => {\n if (Object.keys(blockLocaleData).length > 0) {\n blockLocaleData._parentID = blockRow.row.id\n blockLocaleData._locale = blockLocale\n acc.push(blockLocaleData)\n blockLocaleIndexMap.push(i)\n }\n })\n }\n\n return acc\n }, [])\n\n if (blockLocaleRowsToInsert.length > 0) {\n await adapter.insert({\n db,\n tableName: `${tableName}${adapter.localesSuffix}`,\n values: blockLocaleRowsToInsert,\n })\n }\n\n await insertArrays({\n adapter,\n arrays: blockRows.map(({ arrays }) => arrays),\n db,\n parentRows: insertedBlockRows[tableName],\n uuidMap: arraysBlocksUUIDMap,\n })\n }\n\n // //////////////////////////////////\n // INSERT ARRAYS RECURSIVELY\n // //////////////////////////////////\n\n if (operation === 'update') {\n for (const arrayTableName of Object.keys(rowToInsert.arrays)) {\n await deleteExistingArrayRows({\n adapter,\n db,\n parentID: insertedRow.id,\n tableName: arrayTableName,\n })\n }\n }\n\n await insertArrays({\n adapter,\n arrays: [rowToInsert.arrays, rowToInsert.arraysToPush],\n db,\n parentRows: [insertedRow, insertedRow],\n uuidMap: arraysBlocksUUIDMap,\n })\n\n // //////////////////////////////////\n // INSERT hasMany SELECTS\n // //////////////////////////////////\n\n for (const [selectTableName, tableRows] of Object.entries(selectsToInsert)) {\n const selectTable = adapter.tables[selectTableName]\n if (operation === 'update') {\n await adapter.deleteWhere({\n db,\n tableName: selectTableName,\n where: eq(selectTable.parent, insertedRow.id),\n })\n }\n\n if (Object.keys(arraysBlocksUUIDMap).length > 0) {\n tableRows.forEach((row: RelationshipRow) => {\n if (row.parent in arraysBlocksUUIDMap) {\n row.parent = arraysBlocksUUIDMap[row.parent]\n }\n })\n }\n\n if (tableRows.length) {\n await adapter.insert({\n db,\n tableName: selectTableName,\n values: tableRows,\n })\n }\n }\n } catch (error) {\n handleUpsertError({ id, adapter, collectionSlug, error, globalSlug, req, tableName })\n }\n\n if (ignoreResult === 'idOnly') {\n return { id: insertedRow.id } as T\n }\n\n if (ignoreResult) {\n return data as T\n }\n\n // //////////////////////////////////\n // RETRIEVE NEWLY UPDATED ROW\n // //////////////////////////////////\n\n const findManyArgs = buildFindManyArgs({\n adapter,\n depth: 0,\n fields,\n joinQuery: false,\n select,\n tableName,\n })\n\n findManyArgs.where = eq(adapter.tables[tableName].id, insertedRow.id)\n\n const doc = await db.query[tableName].findFirst(findManyArgs)\n\n // //////////////////////////////////\n // TRANSFORM DATA\n // //////////////////////////////////\n\n const result = transform<T>({\n adapter,\n config: adapter.payload.config,\n data: doc,\n fields,\n joinQuery: false,\n tableName,\n })\n\n return result\n}\n"],"names":["and","desc","eq","isNull","or","buildFindManyArgs","transform","transformForWrite","markWrite","deleteExistingArrayRows","deleteExistingRowsByPath","handleUpsertError","insertArrays","shouldUseOptimizedUpsertRow","upsertRow","id","adapter","collectionSlug","data","db","fields","globalSlug","ignoreResult","customID","joinQuery","_joinQuery","operation","path","req","select","tableName","upsertTarget","where","createdAt","Date","toISOString","insertedRow","transformedForWrite","enableAtomicWrites","row","arraysToPush","drizzle","updateWhere","tables","Object","keys","length","arrays","parentRows","uuidMap","updatedAt","hasDataToUpdate","update","set","findManyArgs","depth","findManyKeysLength","hasOnlyColumns","columns","doc","query","findFirst","config","payload","selectedFields","column","enabled","entries","docs","returning","undefined","error","rowToInsert","target","rowKeys","hasLocalizedData","locales","hasMainRowData","every","key","insert","onConflictDoUpdate","values","allowIDOnCreate","localesToInsert","relationsToInsert","textsToInsert","numbersToInsert","blocksToInsert","selectsToInsert","forEach","locale","localeRow","_parentID","_locale","push","relationships","relation","parent","texts","textRow","numbers","numberRow","selects","selectTableName","selectRows","blocks","blockRow","uuid","localeTableName","localesSuffix","localeTable","deleteWhere","relationshipsTableName","relationshipsSuffix","generalRelationshipDeletes","relationshipsToDelete","filter","rel","localeColumnName","parentColumnName","parentID","pathColumnName","rows","relationshipsToAppend","relationshipsToInsert","map","parentId","relationshipTable","rawTables","relationTo","value","conditions","parts","endsWith","existingRels","maxOrder","from","maxOrderResult","order","orderBy","limit","index","relationshipsToActuallyInsert","newRow","some","existingRow","matches","relToDelete","itemToRemove","item","camelKey","textsTableName","textsToDelete","numbersTableName","numbersToDelete","insertedBlockRows","blocksToDelete","blockTable","arraysBlocksUUIDMap","blockRows","i","_uuid","blockLocaleIndexMap","blockLocaleRowsToInsert","reduce","acc","blockLocale","blockLocaleData","arrayTableName","tableRows","selectTable","result"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"insertArrays.d.ts","sourceRoot":"","sources":["../../src/upsertRow/insertArrays.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAErE,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,cAAc,CAAA;IACvB,MAAM,EAAE;QACN,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,EAAE,CAAA;KACxC,EAAE,CAAA;IACH,EAAE,EAAE,cAAc,CAAC,SAAS,CAAC,GAAG,kBAAkB,CAAA;IAClD,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAA;CAC1C,CAAA;AAYD,eAAO,MAAM,YAAY,GAAU,+CAMhC,IAAI,KAAG,OAAO,CAAC,IAAI,CAgGrB,CAAA"}
1
+ {"version":3,"file":"insertArrays.d.ts","sourceRoot":"","sources":["../../src/upsertRow/insertArrays.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAErE,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,cAAc,CAAA;IACvB,MAAM,EAAE;QACN,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,EAAE,CAAA;KACxC,EAAE,CAAA;IACH,EAAE,EAAE,cAAc,CAAC,SAAS,CAAC,GAAG,kBAAkB,CAAA;IAClD,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAA;CAC1C,CAAA;AAYD,eAAO,MAAM,YAAY,kDAMtB,IAAI,KAAG,OAAO,CAAC,IAAI,CAiGrB,CAAA"}
@@ -78,7 +78,8 @@ export const insertArrays = async ({ adapter, arrays, db, parentRows, uuidMap =
78
78
  adapter,
79
79
  arrays: row.arrays,
80
80
  db,
81
- parentRows: insertedRows
81
+ parentRows: insertedRows,
82
+ uuidMap
82
83
  });
83
84
  }
84
85
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/upsertRow/insertArrays.ts"],"sourcesContent":["import type { ArrayRowToInsert } from '../transform/write/types.js'\nimport type { DrizzleAdapter, DrizzleTransaction } from '../types.js'\n\ntype Args = {\n adapter: DrizzleAdapter\n arrays: {\n [tableName: string]: ArrayRowToInsert[]\n }[]\n db: DrizzleAdapter['drizzle'] | DrizzleTransaction\n parentRows: Record<string, unknown>[]\n uuidMap?: Record<string, number | string>\n}\n\ntype RowsByTable = {\n [tableName: string]: {\n arrays: {\n [tableName: string]: ArrayRowToInsert[]\n }[]\n locales: Record<string, unknown>[]\n rows: Record<string, unknown>[]\n }\n}\n\nexport const insertArrays = async ({\n adapter,\n arrays,\n db,\n parentRows,\n uuidMap = {},\n}: Args): Promise<void> => {\n // Maintain a map of flattened rows by table\n const rowsByTable: RowsByTable = {}\n\n arrays.forEach((arraysByTable, parentRowIndex) => {\n if (!arraysByTable || Object.keys(arraysByTable).length === 0) {\n return\n }\n Object.entries(arraysByTable).forEach(([tableName, arrayRows]) => {\n // If the table doesn't exist in map, initialize it\n if (!rowsByTable[tableName]) {\n rowsByTable[tableName] = {\n arrays: [],\n locales: [],\n rows: [],\n }\n }\n\n const parentID = parentRows[parentRowIndex].id\n\n // Add any sub arrays that need to be created\n // We will call this recursively below\n arrayRows.forEach((arrayRow) => {\n if (Object.keys(arrayRow.arrays).length > 0) {\n rowsByTable[tableName].arrays.push(arrayRow.arrays)\n }\n\n // Set up parent IDs for both row and locale row\n arrayRow.row._parentID = parentID\n rowsByTable[tableName].rows.push(arrayRow.row)\n\n Object.entries(arrayRow.locales).forEach(([arrayRowLocale, arrayRowLocaleData]) => {\n arrayRowLocaleData._parentID = arrayRow.row.id\n arrayRowLocaleData._locale = arrayRowLocale\n rowsByTable[tableName].locales.push(arrayRowLocaleData)\n if (!arrayRow.row.id) {\n arrayRowLocaleData._getParentID = (rows: { _uuid: string; id: number }[]) => {\n const { id } = rows.find((each) => each._uuid === arrayRow.row._uuid)\n return id\n }\n }\n })\n })\n })\n })\n\n // Insert all corresponding arrays\n // (one insert per array table)\n for (const [tableName, row] of Object.entries(rowsByTable)) {\n // the nested arrays need the ID for the parentID foreign key\n let insertedRows: Args['parentRows']\n if (row.rows.length > 0) {\n insertedRows = await adapter.insert({\n db,\n tableName,\n values: row.rows,\n })\n\n insertedRows.forEach((row) => {\n if (\n typeof row._uuid === 'string' &&\n (typeof row.id === 'string' || typeof row.id === 'number')\n ) {\n uuidMap[row._uuid] = row.id\n }\n })\n }\n\n // Insert locale rows\n if (adapter.tables[`${tableName}${adapter.localesSuffix}`] && row.locales.length > 0) {\n if (!row.locales[0]._parentID) {\n row.locales = row.locales.map((localeRow) => {\n if (typeof localeRow._getParentID === 'function') {\n localeRow._parentID = localeRow._getParentID(insertedRows)\n delete localeRow._getParentID\n }\n return localeRow\n })\n }\n await adapter.insert({\n db,\n tableName: `${tableName}${adapter.localesSuffix}`,\n values: row.locales,\n })\n }\n\n // If there are sub arrays, call this function recursively\n if (row.arrays.length > 0) {\n await insertArrays({\n adapter,\n arrays: row.arrays,\n db,\n parentRows: insertedRows,\n })\n }\n }\n}\n"],"names":["insertArrays","adapter","arrays","db","parentRows","uuidMap","rowsByTable","forEach","arraysByTable","parentRowIndex","Object","keys","length","entries","tableName","arrayRows","locales","rows","parentID","id","arrayRow","push","row","_parentID","arrayRowLocale","arrayRowLocaleData","_locale","_getParentID","find","each","_uuid","insertedRows","insert","values","tables","localesSuffix","map","localeRow"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/upsertRow/insertArrays.ts"],"sourcesContent":["import type { ArrayRowToInsert } from '../transform/write/types.js'\nimport type { DrizzleAdapter, DrizzleTransaction } from '../types.js'\n\ntype Args = {\n adapter: DrizzleAdapter\n arrays: {\n [tableName: string]: ArrayRowToInsert[]\n }[]\n db: DrizzleAdapter['drizzle'] | DrizzleTransaction\n parentRows: Record<string, unknown>[]\n uuidMap?: Record<string, number | string>\n}\n\ntype RowsByTable = {\n [tableName: string]: {\n arrays: {\n [tableName: string]: ArrayRowToInsert[]\n }[]\n locales: Record<string, unknown>[]\n rows: Record<string, unknown>[]\n }\n}\n\nexport const insertArrays = async ({\n adapter,\n arrays,\n db,\n parentRows,\n uuidMap = {},\n}: Args): Promise<void> => {\n // Maintain a map of flattened rows by table\n const rowsByTable: RowsByTable = {}\n\n arrays.forEach((arraysByTable, parentRowIndex) => {\n if (!arraysByTable || Object.keys(arraysByTable).length === 0) {\n return\n }\n Object.entries(arraysByTable).forEach(([tableName, arrayRows]) => {\n // If the table doesn't exist in map, initialize it\n if (!rowsByTable[tableName]) {\n rowsByTable[tableName] = {\n arrays: [],\n locales: [],\n rows: [],\n }\n }\n\n const parentID = parentRows[parentRowIndex].id\n\n // Add any sub arrays that need to be created\n // We will call this recursively below\n arrayRows.forEach((arrayRow) => {\n if (Object.keys(arrayRow.arrays).length > 0) {\n rowsByTable[tableName].arrays.push(arrayRow.arrays)\n }\n\n // Set up parent IDs for both row and locale row\n arrayRow.row._parentID = parentID\n rowsByTable[tableName].rows.push(arrayRow.row)\n\n Object.entries(arrayRow.locales).forEach(([arrayRowLocale, arrayRowLocaleData]) => {\n arrayRowLocaleData._parentID = arrayRow.row.id\n arrayRowLocaleData._locale = arrayRowLocale\n rowsByTable[tableName].locales.push(arrayRowLocaleData)\n if (!arrayRow.row.id) {\n arrayRowLocaleData._getParentID = (rows: { _uuid: string; id: number }[]) => {\n const { id } = rows.find((each) => each._uuid === arrayRow.row._uuid)\n return id\n }\n }\n })\n })\n })\n })\n\n // Insert all corresponding arrays\n // (one insert per array table)\n for (const [tableName, row] of Object.entries(rowsByTable)) {\n // the nested arrays need the ID for the parentID foreign key\n let insertedRows: Args['parentRows']\n if (row.rows.length > 0) {\n insertedRows = await adapter.insert({\n db,\n tableName,\n values: row.rows,\n })\n\n insertedRows.forEach((row) => {\n if (\n typeof row._uuid === 'string' &&\n (typeof row.id === 'string' || typeof row.id === 'number')\n ) {\n uuidMap[row._uuid] = row.id\n }\n })\n }\n\n // Insert locale rows\n if (adapter.tables[`${tableName}${adapter.localesSuffix}`] && row.locales.length > 0) {\n if (!row.locales[0]._parentID) {\n row.locales = row.locales.map((localeRow) => {\n if (typeof localeRow._getParentID === 'function') {\n localeRow._parentID = localeRow._getParentID(insertedRows)\n delete localeRow._getParentID\n }\n return localeRow\n })\n }\n await adapter.insert({\n db,\n tableName: `${tableName}${adapter.localesSuffix}`,\n values: row.locales,\n })\n }\n\n // If there are sub arrays, call this function recursively\n if (row.arrays.length > 0) {\n await insertArrays({\n adapter,\n arrays: row.arrays,\n db,\n parentRows: insertedRows,\n uuidMap,\n })\n }\n }\n}\n"],"names":["insertArrays","adapter","arrays","db","parentRows","uuidMap","rowsByTable","forEach","arraysByTable","parentRowIndex","Object","keys","length","entries","tableName","arrayRows","locales","rows","parentID","id","arrayRow","push","row","_parentID","arrayRowLocale","arrayRowLocaleData","_locale","_getParentID","find","each","_uuid","insertedRows","insert","values","tables","localesSuffix","map","localeRow"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"shouldUseOptimizedUpsertRow.d.ts","sourceRoot":"","sources":["../../src/upsertRow/shouldUseOptimizedUpsertRow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAE7C;;;GAGG;AACH,eAAO,MAAM,2BAA2B,GAAI,mBAGzC;IACD,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC7B,MAAM,EAAE,cAAc,EAAE,CAAA;CACzB,QA8EA,CAAA"}
1
+ {"version":3,"file":"shouldUseOptimizedUpsertRow.d.ts","sourceRoot":"","sources":["../../src/upsertRow/shouldUseOptimizedUpsertRow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAE7C;;;GAGG;AACH,eAAO,MAAM,2BAA2B,sBAGrC;IACD,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC7B,MAAM,EAAE,cAAc,EAAE,CAAA;CACzB,QA8EA,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"appendPrefixToKeys.d.ts","sourceRoot":"","sources":["../../src/utilities/appendPrefixToKeys.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,wBAAwB,GAAI,CAAC,EAAE,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,MAAM,KAAG,CAI9E,CAAA"}
1
+ {"version":3,"file":"appendPrefixToKeys.d.ts","sourceRoot":"","sources":["../../src/utilities/appendPrefixToKeys.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,wBAAwB,GAAI,CAAC,OAAO,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,UAAU,MAAM,KAAG,CAI9E,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"blocksToJsonMigrator.d.ts","sourceRoot":"","sources":["../../src/utilities/blocksToJsonMigrator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EAExB,OAAO,EAGR,MAAM,SAAS,CAAA;AAchB,OAAO,KAAK,EAGV,oBAAoB,EACpB,cAAc,EACf,MAAM,aAAa,CAAA;AA8rBpB,eAAO,MAAM,0BAA0B,GAAI,iDAIxC;IACD,OAAO,EAAE,cAAc,CAAA;IACvB,aAAa,EAAE,MAAM,CAAA;IACrB,kBAAkB,EAAE,CAAC,IAAI,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,EAAE,CAAA;KAAE,KAAK,MAAM,CAAA;CACnF,KAAG,oBAEH,CAAA;AAED,eAAO,MAAM,uBAAuB,GAAI,SAAS,OAAO,KAAG,oBAQ1D,CAAA;AAED,eAAO,MAAM,2CAA2C,GAAI,kBAEzD;IACD,WAAW,EAAE,MAAM,CAAA;CACpB,KAAG,wBAoCH,CAAA"}
1
+ {"version":3,"file":"blocksToJsonMigrator.d.ts","sourceRoot":"","sources":["../../src/utilities/blocksToJsonMigrator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EAExB,OAAO,EAGR,MAAM,SAAS,CAAA;AAchB,OAAO,KAAK,EAGV,oBAAoB,EACpB,cAAc,EACf,MAAM,aAAa,CAAA;AAkrBpB,eAAO,MAAM,0BAA0B,oDAIpC;IACD,OAAO,EAAE,cAAc,CAAA;IACvB,aAAa,EAAE,MAAM,CAAA;IACrB,kBAAkB,EAAE,CAAC,IAAI,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,EAAE,CAAA;KAAE,KAAK,MAAM,CAAA;CACnF,KAAG,oBAEH,CAAA;AAED,eAAO,MAAM,uBAAuB,YAAa,OAAO,KAAG,oBAQ1D,CAAA;AAED,eAAO,MAAM,2CAA2C,qBAErD;IACD,WAAW,EAAE,MAAM,CAAA;CACpB,KAAG,wBAoCH,CAAA"}
@@ -3,6 +3,7 @@ import path from 'path';
3
3
  import { APIError, buildVersionCollectionFields, buildVersionGlobalFields, dynamicImport } from 'payload';
4
4
  import { findConfig } from 'payload/node';
5
5
  import { fieldShouldBeLocalized } from 'payload/shared';
6
+ import { formatGeneratedFile } from './formatGeneratedFile.js';
6
7
  import { getTransaction } from './getTransaction.js';
7
8
  const DEFAULT_BATCH_SIZE = 100;
8
9
  const TEMP_FOLDER_NAME = '.payload-blocks-migration';
@@ -520,23 +521,11 @@ class BlocksToJsonMigratorImpl {
520
521
  const printer = ts.createPrinter({
521
522
  newLine: ts.NewLineKind.LineFeed
522
523
  });
523
- let output = printer.printFile(result.transformed[0]);
524
- try {
525
- // eslint-disable-next-line @typescript-eslint/consistent-type-imports
526
- const prettier = await dynamicImport('prettier');
527
- const configPath = await prettier.resolveConfigFile();
528
- const config = configPath ? await prettier.resolveConfig(configPath) : {};
529
- output = await prettier.format(output, {
530
- ...config,
531
- parser: 'typescript'
532
- });
533
- } catch (err) {
534
- this.adapter.payload.logger.error({
535
- err,
536
- msg: 'Could not format payload config with Prettier'
537
- });
538
- }
539
- writeFileSync(configPath, output, 'utf-8');
524
+ writeFileSync(configPath, printer.printFile(result.transformed[0]), 'utf-8');
525
+ await formatGeneratedFile({
526
+ filePath: configPath,
527
+ logger: this.adapter.payload.logger
528
+ });
540
529
  this.adapter.payload.logger.info(`Updated ${configPath} with blocksAsJSON: true`);
541
530
  }
542
531
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utilities/blocksToJsonMigrator.ts"],"sourcesContent":["import type {\n DynamicMigrationTemplate,\n FlattenedField,\n Payload,\n PayloadRequest,\n SanitizedConfig,\n} from 'payload'\nimport type tsTypes from 'typescript'\n\nimport { existsSync, mkdirSync, readdirSync, readFileSync, rmSync, writeFileSync } from 'fs'\nimport path from 'path'\nimport {\n APIError,\n buildVersionCollectionFields,\n buildVersionGlobalFields,\n dynamicImport,\n} from 'payload'\nimport { findConfig } from 'payload/node'\nimport { fieldShouldBeLocalized } from 'payload/shared'\n\nimport type {\n BlocksToJsonBlockToMigrate,\n BlocksToJsonEntityToMigrate,\n BlocksToJsonMigrator,\n DrizzleAdapter,\n} from '../types.js'\n\nimport { getTransaction } from './getTransaction.js'\n\nconst DEFAULT_BATCH_SIZE = 100\nconst TEMP_FOLDER_NAME = '.payload-blocks-migration'\n\nconst writeEntitiesToTempFile = (\n entities: BlocksToJsonEntityToMigrate[],\n tempFolderPath: string,\n batchIndex: number,\n): void => {\n const filePath = path.join(tempFolderPath, `entities-batch-${batchIndex}.json`)\n writeFileSync(filePath, JSON.stringify(entities, null, 2), 'utf-8')\n}\n\nconst acceptDrizzlePrompts = async <T>(\n callPrompt: () => Promise<T> | T,\n {\n silenceLogs = false,\n }: {\n silenceLogs?: boolean\n } = {},\n): Promise<T> => {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n const write = process.stdout.write\n\n if (silenceLogs) {\n process.stdout.write = () => true\n }\n\n const promise = callPrompt()\n\n const interval = setInterval(\n () =>\n process.stdin.emit('keypress', '\\n', {\n name: 'return',\n ctrl: false,\n }),\n 25,\n )\n\n const res = await promise\n\n if (silenceLogs) {\n process.stdout.write = write\n }\n\n clearInterval(interval)\n\n return res\n}\n\nconst entityHasBlocksField = (entity: { flattenedFields: FlattenedField[] }): boolean => {\n for (const field of entity.flattenedFields) {\n if (field.type === 'blocks') {\n return true\n }\n\n if (\n 'flattenedFields' in field &&\n entityHasBlocksField({ flattenedFields: field.flattenedFields })\n ) {\n return true\n }\n }\n\n return false\n}\n\nconst collectBlocksToMigrate = ({\n config,\n data,\n fields,\n parentAccessor,\n parentIsLocalized,\n}: {\n config: SanitizedConfig\n data: any\n fields: FlattenedField[]\n parentAccessor: (number | string)[]\n parentIsLocalized: boolean\n}): BlocksToJsonBlockToMigrate[] => {\n const result: BlocksToJsonBlockToMigrate[] = []\n\n for (const field of fields) {\n switch (field.type) {\n case 'array': {\n const arrayData = data[field.name]\n\n if (!Array.isArray(arrayData)) {\n continue\n }\n\n if (config.localization && fieldShouldBeLocalized({ field, parentIsLocalized })) {\n result.push(\n ...collectBlocksToMigrate({\n config,\n data: arrayData,\n fields: config.localization.localeCodes.map((code) => ({\n ...field,\n name: code,\n localized: false,\n })),\n parentAccessor: [...parentAccessor, field.name],\n parentIsLocalized: true,\n }),\n )\n\n continue\n }\n\n for (const [index, row] of arrayData.entries()) {\n result.push(\n ...collectBlocksToMigrate({\n config,\n data: row,\n fields: field.flattenedFields,\n parentAccessor: [...parentAccessor, field.name, index],\n parentIsLocalized,\n }),\n )\n }\n break\n }\n case 'blocks': {\n result.push({\n data: data[field.name],\n fieldAccessor: [...parentAccessor, field.name],\n })\n break\n }\n case 'group':\n case 'tab': {\n if (config.localization && fieldShouldBeLocalized({ field, parentIsLocalized })) {\n result.push(\n ...collectBlocksToMigrate({\n config,\n data: data[field.name],\n fields: config.localization.localeCodes.map((code) => ({\n ...field,\n name: code,\n localized: false,\n })),\n parentAccessor: [...parentAccessor, field.name],\n parentIsLocalized: true,\n }),\n )\n\n continue\n }\n\n result.push(\n ...collectBlocksToMigrate({\n config,\n data: data[field.name],\n fields: field.flattenedFields,\n parentAccessor: [...parentAccessor, field.name],\n parentIsLocalized,\n }),\n )\n break\n }\n default: {\n continue\n }\n }\n }\n\n return result\n}\n\nclass BlocksToJsonMigratorImpl implements BlocksToJsonMigrator {\n private readonly batchSize: number\n private tempFolderPath: string\n\n constructor(\n private readonly adapter: DrizzleAdapter,\n private readonly sanitizeStatements: (args: {\n sqlExecute: string\n statements: string[]\n }) => string,\n private readonly executeMethod: string,\n batchSize?: number,\n ) {\n this.batchSize = batchSize || DEFAULT_BATCH_SIZE\n this.tempFolderPath = path.resolve(this.adapter.migrationDir, TEMP_FOLDER_NAME)\n }\n\n private ensureTempFolder(): void {\n if (!existsSync(this.tempFolderPath)) {\n mkdirSync(this.tempFolderPath, { recursive: true })\n }\n }\n\n private *fetchEntitiesFromJsonBatches(): IterableIterator<BlocksToJsonEntityToMigrate[]> {\n if (!existsSync(this.tempFolderPath)) {\n return\n }\n\n const files = readdirSync(this.tempFolderPath)\n .filter((file) => file.startsWith('entities-batch-') && file.endsWith('.json'))\n .sort((a, b) => {\n const aNum = parseInt(a.match(/\\d+/)?.[0] || '0', 10)\n const bNum = parseInt(b.match(/\\d+/)?.[0] || '0', 10)\n return aNum - bNum\n })\n\n for (const file of files) {\n const filePath = path.join(this.tempFolderPath, file)\n const fileContent = readFileSync(filePath, 'utf-8')\n const batchEntities = JSON.parse(fileContent) as BlocksToJsonEntityToMigrate[]\n yield batchEntities\n }\n }\n\n private async migrateEntities(\n entities: BlocksToJsonEntityToMigrate[],\n req: PayloadRequest,\n ): Promise<void> {\n this.adapter.blocksAsJSON = true\n this.resetSchema()\n await this.adapter.init()\n await this.adapter.connect()\n\n await this.syncTransactionDrizzleInstance(req)\n\n const totalEntities = entities.length\n let processed = 0\n\n for (const entity of entities) {\n switch (entity.type) {\n case 'collection': {\n await this.adapter.updateOne({\n collection: entity.slug,\n data: entity.originalData,\n joins: false,\n req,\n where: {\n id: {\n equals: entity.id,\n },\n },\n })\n break\n }\n case 'collectionVersion': {\n await this.adapter.updateVersion({\n id: entity.id,\n collection: entity.slug,\n req,\n versionData: entity.originalData as any,\n })\n\n break\n }\n case 'global': {\n await this.adapter.updateGlobal({\n slug: entity.slug,\n data: entity.originalData,\n req,\n })\n break\n }\n case 'globalVersion': {\n await this.adapter.updateGlobalVersion({\n id: entity.id,\n global: entity.slug,\n req,\n versionData: entity.originalData as any,\n })\n break\n }\n }\n\n processed++\n if (processed % this.batchSize === 0 || processed === totalEntities) {\n this.adapter.payload.logger.info(\n `Migrated ${processed}/${totalEntities} entities (${Math.round((processed / totalEntities) * 100)}%)`,\n )\n }\n }\n }\n\n private resetSchema() {\n this.adapter.schema = {}\n this.adapter.tables = {}\n this.adapter.indexes = new Set()\n this.adapter.foreignKeys = new Set()\n this.adapter.relations = {}\n this.adapter.rawTables = {}\n this.adapter.rawRelations = {}\n this.adapter.tableNameMap = new Map()\n this.adapter.enums = {}\n }\n\n private async syncTransactionDrizzleInstance(req: PayloadRequest) {\n const tsx = (await getTransaction(this.adapter, req)) as any\n\n tsx._ = this.adapter.drizzle._\n tsx.schema = this.adapter.drizzle._\n tsx.session.schema = (this.adapter.drizzle as any).session.schema\n }\n\n cleanupTempFolder(): void {\n rmSync(this.tempFolderPath, { force: true, recursive: true })\n\n this.adapter.payload.logger.info(`Cleaned up temp folder at ${this.tempFolderPath}`)\n }\n\n async collectAndSaveEntitiesToBatches(\n req: PayloadRequest,\n options?: {\n batchSize?: number\n },\n ): Promise<void> {\n const batchSize = options?.batchSize ?? this.batchSize\n\n this.cleanupTempFolder()\n this.ensureTempFolder()\n\n this.adapter.blocksAsJSON = false\n this.resetSchema()\n await this.adapter.init()\n await this.adapter.connect()\n\n // Count total entities to migrate\n let totalExpected = 0\n for (const collection of this.adapter.payload.config.collections.filter(entityHasBlocksField)) {\n const { totalDocs } = await this.adapter.count({ collection: collection.slug })\n totalExpected += totalDocs\n\n if (collection.versions) {\n const { totalDocs: totalVersions } = await this.adapter.countVersions({\n collection: collection.slug,\n })\n totalExpected += totalVersions\n }\n }\n\n for (const globalConfig of this.adapter.payload.config.globals.filter(entityHasBlocksField)) {\n totalExpected += 1 // Global itself\n\n if (globalConfig.versions) {\n const { totalDocs: totalGlobalVersions } = await this.adapter.countGlobalVersions({\n global: globalConfig.slug,\n })\n totalExpected += totalGlobalVersions\n }\n }\n\n this.adapter.payload.logger.info(\n `Found ${totalExpected} total entities to collect and save to batches`,\n )\n\n let batchIndex = 0\n let currentBatch: BlocksToJsonEntityToMigrate[] = []\n let totalCollected = 0\n\n const flushBatch = () => {\n if (currentBatch.length > 0) {\n writeEntitiesToTempFile(currentBatch, this.tempFolderPath, batchIndex)\n const percentage =\n totalExpected > 0 ? Math.round((totalCollected / totalExpected) * 100) : 0\n this.adapter.payload.logger.info(\n `Saved batch ${batchIndex} with ${currentBatch.length} entities (${totalCollected}/${totalExpected} - ${percentage}%)`,\n )\n batchIndex++\n currentBatch = []\n }\n }\n\n const addEntity = (entity: BlocksToJsonEntityToMigrate) => {\n currentBatch.push(entity)\n totalCollected++\n if (currentBatch.length >= batchSize) {\n flushBatch()\n }\n }\n\n for (const collection of this.adapter.payload.config.collections.filter(entityHasBlocksField)) {\n let page = 1\n let hasMore = true\n\n while (hasMore) {\n const { docs, hasNextPage } = await this.adapter.find({\n collection: collection.slug,\n limit: batchSize,\n page,\n })\n\n for (const doc of docs) {\n const entity: BlocksToJsonEntityToMigrate = {\n id: doc.id,\n slug: collection.slug,\n type: 'collection',\n blocks: collectBlocksToMigrate({\n config: this.adapter.payload.config,\n data: doc,\n fields: collection.flattenedFields,\n parentAccessor: [],\n parentIsLocalized: false,\n }),\n originalData: doc,\n }\n\n addEntity(entity)\n }\n\n this.adapter.payload.logger.info(\n `Collected ${docs.length} entries from ${collection.slug} (page ${page})`,\n )\n\n hasMore = hasNextPage\n page++\n }\n\n if (collection.versions) {\n let versionPage = 1\n let hasMoreVersions = true\n\n while (hasMoreVersions) {\n const { docs: versionDocs, hasNextPage: hasNextVersionPage } =\n await this.adapter.findVersions({\n collection: collection.slug,\n limit: batchSize,\n page: versionPage,\n })\n\n for (const versionDoc of versionDocs) {\n const entity: BlocksToJsonEntityToMigrate = {\n id: versionDoc.id,\n slug: collection.slug,\n type: 'collectionVersion',\n blocks: collectBlocksToMigrate({\n config: this.adapter.payload.config,\n data: versionDoc,\n fields: buildVersionCollectionFields(this.adapter.payload.config, collection, true),\n parentAccessor: [],\n parentIsLocalized: false,\n }),\n originalData: versionDoc,\n }\n\n addEntity(entity)\n }\n\n this.adapter.payload.logger.info(\n `Collected ${versionDocs.length} versions from ${collection.slug} (page ${versionPage})`,\n )\n\n hasMoreVersions = hasNextVersionPage\n versionPage++\n }\n }\n }\n\n for (const globalConfig of this.adapter.payload.config.globals.filter(entityHasBlocksField)) {\n const globalDoc = await this.adapter.findGlobal({ slug: globalConfig.slug })\n\n const entity: BlocksToJsonEntityToMigrate = {\n slug: globalConfig.slug,\n type: 'global',\n blocks: collectBlocksToMigrate({\n config: this.adapter.payload.config,\n data: globalDoc,\n fields: globalConfig.flattenedFields,\n parentAccessor: [],\n parentIsLocalized: false,\n }),\n originalData: globalDoc,\n }\n\n addEntity(entity)\n this.adapter.payload.logger.info(`Collected global ${globalConfig.slug}`)\n\n if (globalConfig.versions) {\n let globalVersionPage = 1\n let hasMoreGlobalVersions = true\n\n while (hasMoreGlobalVersions) {\n const { docs: globalVersionDocs, hasNextPage: hasNextGlobalVersionPage } =\n await this.adapter.findGlobalVersions({\n global: globalConfig.slug,\n limit: batchSize,\n page: globalVersionPage,\n })\n\n for (const globalVersionDoc of globalVersionDocs) {\n const entity: BlocksToJsonEntityToMigrate = {\n id: globalVersionDoc.id,\n slug: globalConfig.slug,\n type: 'globalVersion',\n blocks: collectBlocksToMigrate({\n config: this.adapter.payload.config,\n data: globalVersionDoc,\n fields: buildVersionGlobalFields(this.adapter.payload.config, globalConfig, true),\n parentAccessor: [],\n parentIsLocalized: false,\n }),\n originalData: globalVersionDoc,\n }\n\n addEntity(entity)\n }\n\n this.adapter.payload.logger.info(\n `Collected ${globalVersionDocs.length} versions from global ${globalConfig.slug} (page ${globalVersionPage})`,\n )\n\n hasMoreGlobalVersions = hasNextGlobalVersionPage\n globalVersionPage++\n }\n }\n }\n\n flushBatch()\n\n this.adapter.payload.logger.info(\n `Collected total of ${totalCollected} entities across ${batchIndex} batches`,\n )\n }\n\n async getMigrationStatements(): Promise<{\n statements: string\n writeDrizzleSnapshot(filePath: string): void\n }> {\n const { generateDrizzleJson, generateMigration } = this.adapter.requireDrizzleKit()\n\n const drizzleJsonBefore = await generateDrizzleJson(this.adapter.schema)\n this.adapter.blocksAsJSON = true\n this.resetSchema()\n\n await this.adapter.init()\n const drizzleJsonAfter = await generateDrizzleJson(this.adapter.schema)\n this.adapter.blocksAsJSON = false\n this.resetSchema()\n await this.adapter.init()\n\n const statements = await acceptDrizzlePrompts(\n () => generateMigration(drizzleJsonBefore, drizzleJsonAfter),\n {\n silenceLogs: true,\n },\n )\n\n const sqlExecute = `await db.${this.executeMethod}(` + 'sql`'\n\n return {\n statements: this.sanitizeStatements({\n sqlExecute,\n statements,\n }),\n writeDrizzleSnapshot(filePath) {\n writeFileSync(`${filePath}.json`, JSON.stringify(drizzleJsonAfter, null, 2))\n },\n }\n }\n\n async migrateEntitiesFromTempFolder(\n req: PayloadRequest,\n options?: {\n clearBatches?: boolean\n },\n ): Promise<void> {\n const clearBatches = options?.clearBatches ?? true\n\n let totalEntities = 0\n let hasEntities = false\n\n for (const entities of this.fetchEntitiesFromJsonBatches()) {\n hasEntities = true\n totalEntities += entities.length\n\n this.adapter.payload.logger.info(\n `Migrating batch with ${entities.length} entities (total: ${totalEntities})`,\n )\n\n await this.migrateEntities(entities, req)\n }\n\n if (!hasEntities) {\n this.adapter.payload.logger.warn('No entities found in temp folder to migrate')\n return\n }\n\n this.adapter.payload.logger.info(\n `Completed migration of ${totalEntities} entities from temp folder`,\n )\n\n if (clearBatches) {\n this.cleanupTempFolder()\n } else {\n this.adapter.payload.logger.info(\n `Temp folder preserved at ${this.tempFolderPath} (clearBatches: false)`,\n )\n }\n }\n\n setTempFolder(tempFolderPath: string): void {\n this.tempFolderPath = tempFolderPath\n }\n\n async updatePayloadConfigFile(): Promise<void> {\n let configPath: string\n\n try {\n configPath = findConfig()\n } catch {\n this.adapter.payload.logger.info(\n 'updatePayloadConfigFile failed - could not find the payload config. Please set the blocksAsJSON DB adapter property manually to \"true\"',\n )\n return\n }\n\n const configFile = readFileSync(configPath, 'utf-8')\n\n const ts = await dynamicImport<typeof tsTypes>('typescript')\n\n const source = ts.createSourceFile(configPath, configFile, ts.ScriptTarget.ESNext)\n\n let hadChanges = false\n\n const result = ts.transform(source, [\n (ctx) => (sourceFile) => {\n const factory = ctx.factory\n\n const visit: tsTypes.Visitor = (node) => {\n if (\n ts.isPropertyAssignment(node) &&\n ts.isIdentifier(node.name) &&\n node.name.text === 'db' &&\n ts.isCallExpression(node.initializer) &&\n node.initializer.arguments.length > 0 &&\n ts.isObjectLiteralExpression(node.initializer.arguments[0])\n ) {\n const call = node.initializer\n const obj = node.initializer.arguments[0]\n\n const filteredProps = obj.properties.filter((prop) => {\n if (!ts.isPropertyAssignment(prop)) {\n return true\n }\n\n return !(ts.isIdentifier(prop.name) && prop.name.text === 'blocksAsJSON')\n })\n\n const newProperty = factory.createPropertyAssignment(\n 'blocksAsJSON',\n factory.createTrue(),\n )\n hadChanges = true\n const newObject = factory.updateObjectLiteralExpression(obj, [\n ...filteredProps,\n newProperty,\n ])\n\n const newCall = factory.updateCallExpression(\n call,\n call.expression,\n call.typeArguments,\n [newObject],\n )\n\n return factory.updatePropertyAssignment(node, node.name, newCall)\n }\n\n return ts.visitEachChild(node, visit, ctx)\n }\n\n return ts.visitNode(sourceFile, visit) as tsTypes.SourceFile\n },\n ])\n\n if (!hadChanges) {\n this.adapter.payload.logger.info(\n 'No changes made to payload config. Set blocksAsJSON to true manually.',\n )\n return\n }\n\n const printer = ts.createPrinter({ newLine: ts.NewLineKind.LineFeed })\n let output = printer.printFile(result.transformed[0])\n\n try {\n // eslint-disable-next-line @typescript-eslint/consistent-type-imports\n const prettier = await dynamicImport<typeof import('prettier')>('prettier')\n const configPath = await prettier.resolveConfigFile()\n const config = configPath ? await prettier.resolveConfig(configPath) : {}\n output = await prettier.format(output, { ...config, parser: 'typescript' })\n } catch (err) {\n this.adapter.payload.logger.error({\n err,\n msg: 'Could not format payload config with Prettier',\n })\n }\n\n writeFileSync(configPath, output, 'utf-8')\n this.adapter.payload.logger.info(`Updated ${configPath} with blocksAsJSON: true`)\n }\n}\n\nexport const createBlocksToJsonMigrator = ({\n adapter,\n executeMethod,\n sanitizeStatements,\n}: {\n adapter: DrizzleAdapter\n executeMethod: string\n sanitizeStatements: (args: { sqlExecute: string; statements: string[] }) => string\n}): BlocksToJsonMigrator => {\n return new BlocksToJsonMigratorImpl(adapter, sanitizeStatements, executeMethod)\n}\n\nexport const getBlocksToJsonMigrator = (payload: Payload): BlocksToJsonMigrator => {\n const migrator = (payload.db as DrizzleAdapter).blocksToJsonMigrator\n\n if (!migrator) {\n throw new APIError(`blocksToJsonMigrator is not defined for ${payload.db.packageName}`)\n }\n\n return migrator\n}\n\nexport const buildDynamicPredefinedBlocksToJsonMigration = ({\n packageName,\n}: {\n packageName: string\n}): DynamicMigrationTemplate => {\n return async ({ filePath, payload }) => {\n const migrator = getBlocksToJsonMigrator(payload)\n\n const migrationStatements = await migrator.getMigrationStatements()\n\n migrationStatements.writeDrizzleSnapshot(filePath)\n\n await migrator.updatePayloadConfigFile()\n const upSQL = `\nconst migrator = getBlocksToJsonMigrator(payload)\nmigrator.setTempFolder(TEMP_FOLDER)\nawait migrator.collectAndSaveEntitiesToBatches(req, { batchSize: BATCH_SIZE })\n\n${migrationStatements.statements}\npayload.logger.info(\"Executed blocks to JSON migration statements.\")\n\nawait migrator.migrateEntitiesFromTempFolder(req, { clearBatches: true })\n `\n\n return {\n imports: `\nimport { getBlocksToJsonMigrator } from '${packageName}/migration-utils'\nimport { fileURLToPath } from 'url'\nimport path from 'path'\n\nconst filename = fileURLToPath(import.meta.url)\nconst dirname = path.dirname(filename)\n\n// Configure migration options (optional)\nconst BATCH_SIZE = 100 // Number of entities to process per batch\nconst TEMP_FOLDER = path.resolve(dirname, '${TEMP_FOLDER_NAME}') // Folder path to store migration batch\n`,\n upSQL,\n }\n }\n}\n"],"names":["existsSync","mkdirSync","readdirSync","readFileSync","rmSync","writeFileSync","path","APIError","buildVersionCollectionFields","buildVersionGlobalFields","dynamicImport","findConfig","fieldShouldBeLocalized","getTransaction","DEFAULT_BATCH_SIZE","TEMP_FOLDER_NAME","writeEntitiesToTempFile","entities","tempFolderPath","batchIndex","filePath","join","JSON","stringify","acceptDrizzlePrompts","callPrompt","silenceLogs","write","process","stdout","promise","interval","setInterval","stdin","emit","name","ctrl","res","clearInterval","entityHasBlocksField","entity","field","flattenedFields","type","collectBlocksToMigrate","config","data","fields","parentAccessor","parentIsLocalized","result","arrayData","Array","isArray","localization","push","localeCodes","map","code","localized","index","row","entries","fieldAccessor","BlocksToJsonMigratorImpl","batchSize","adapter","sanitizeStatements","executeMethod","resolve","migrationDir","ensureTempFolder","recursive","fetchEntitiesFromJsonBatches","files","filter","file","startsWith","endsWith","sort","a","b","aNum","parseInt","match","bNum","fileContent","batchEntities","parse","migrateEntities","req","blocksAsJSON","resetSchema","init","connect","syncTransactionDrizzleInstance","totalEntities","length","processed","updateOne","collection","slug","originalData","joins","where","id","equals","updateVersion","versionData","updateGlobal","updateGlobalVersion","global","payload","logger","info","Math","round","schema","tables","indexes","Set","foreignKeys","relations","rawTables","rawRelations","tableNameMap","Map","enums","tsx","_","drizzle","session","cleanupTempFolder","force","collectAndSaveEntitiesToBatches","options","totalExpected","collections","totalDocs","count","versions","totalVersions","countVersions","globalConfig","globals","totalGlobalVersions","countGlobalVersions","currentBatch","totalCollected","flushBatch","percentage","addEntity","page","hasMore","docs","hasNextPage","find","limit","doc","blocks","versionPage","hasMoreVersions","versionDocs","hasNextVersionPage","findVersions","versionDoc","globalDoc","findGlobal","globalVersionPage","hasMoreGlobalVersions","globalVersionDocs","hasNextGlobalVersionPage","findGlobalVersions","globalVersionDoc","getMigrationStatements","generateDrizzleJson","generateMigration","requireDrizzleKit","drizzleJsonBefore","drizzleJsonAfter","statements","sqlExecute","writeDrizzleSnapshot","migrateEntitiesFromTempFolder","clearBatches","hasEntities","warn","setTempFolder","updatePayloadConfigFile","configPath","configFile","ts","source","createSourceFile","ScriptTarget","ESNext","hadChanges","transform","ctx","sourceFile","factory","visit","node","isPropertyAssignment","isIdentifier","text","isCallExpression","initializer","arguments","isObjectLiteralExpression","call","obj","filteredProps","properties","prop","newProperty","createPropertyAssignment","createTrue","newObject","updateObjectLiteralExpression","newCall","updateCallExpression","expression","typeArguments","updatePropertyAssignment","visitEachChild","visitNode","printer","createPrinter","newLine","NewLineKind","LineFeed","output","printFile","transformed","prettier","resolveConfigFile","resolveConfig","format","parser","err","error","msg","createBlocksToJsonMigrator","getBlocksToJsonMigrator","migrator","db","blocksToJsonMigrator","packageName","buildDynamicPredefinedBlocksToJsonMigration","migrationStatements","upSQL","imports"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/utilities/blocksToJsonMigrator.ts"],"sourcesContent":["import type {\n DynamicMigrationTemplate,\n FlattenedField,\n Payload,\n PayloadRequest,\n SanitizedConfig,\n} from 'payload'\nimport type tsTypes from 'typescript'\n\nimport { existsSync, mkdirSync, readdirSync, readFileSync, rmSync, writeFileSync } from 'fs'\nimport path from 'path'\nimport {\n APIError,\n buildVersionCollectionFields,\n buildVersionGlobalFields,\n dynamicImport,\n} from 'payload'\nimport { findConfig } from 'payload/node'\nimport { fieldShouldBeLocalized } from 'payload/shared'\n\nimport type {\n BlocksToJsonBlockToMigrate,\n BlocksToJsonEntityToMigrate,\n BlocksToJsonMigrator,\n DrizzleAdapter,\n} from '../types.js'\n\nimport { formatGeneratedFile } from './formatGeneratedFile.js'\nimport { getTransaction } from './getTransaction.js'\n\nconst DEFAULT_BATCH_SIZE = 100\nconst TEMP_FOLDER_NAME = '.payload-blocks-migration'\n\nconst writeEntitiesToTempFile = (\n entities: BlocksToJsonEntityToMigrate[],\n tempFolderPath: string,\n batchIndex: number,\n): void => {\n const filePath = path.join(tempFolderPath, `entities-batch-${batchIndex}.json`)\n writeFileSync(filePath, JSON.stringify(entities, null, 2), 'utf-8')\n}\n\nconst acceptDrizzlePrompts = async <T>(\n callPrompt: () => Promise<T> | T,\n {\n silenceLogs = false,\n }: {\n silenceLogs?: boolean\n } = {},\n): Promise<T> => {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n const write = process.stdout.write\n\n if (silenceLogs) {\n process.stdout.write = () => true\n }\n\n const promise = callPrompt()\n\n const interval = setInterval(\n () =>\n process.stdin.emit('keypress', '\\n', {\n name: 'return',\n ctrl: false,\n }),\n 25,\n )\n\n const res = await promise\n\n if (silenceLogs) {\n process.stdout.write = write\n }\n\n clearInterval(interval)\n\n return res\n}\n\nconst entityHasBlocksField = (entity: { flattenedFields: FlattenedField[] }): boolean => {\n for (const field of entity.flattenedFields) {\n if (field.type === 'blocks') {\n return true\n }\n\n if (\n 'flattenedFields' in field &&\n entityHasBlocksField({ flattenedFields: field.flattenedFields })\n ) {\n return true\n }\n }\n\n return false\n}\n\nconst collectBlocksToMigrate = ({\n config,\n data,\n fields,\n parentAccessor,\n parentIsLocalized,\n}: {\n config: SanitizedConfig\n data: any\n fields: FlattenedField[]\n parentAccessor: (number | string)[]\n parentIsLocalized: boolean\n}): BlocksToJsonBlockToMigrate[] => {\n const result: BlocksToJsonBlockToMigrate[] = []\n\n for (const field of fields) {\n switch (field.type) {\n case 'array': {\n const arrayData = data[field.name]\n\n if (!Array.isArray(arrayData)) {\n continue\n }\n\n if (config.localization && fieldShouldBeLocalized({ field, parentIsLocalized })) {\n result.push(\n ...collectBlocksToMigrate({\n config,\n data: arrayData,\n fields: config.localization.localeCodes.map((code) => ({\n ...field,\n name: code,\n localized: false,\n })),\n parentAccessor: [...parentAccessor, field.name],\n parentIsLocalized: true,\n }),\n )\n\n continue\n }\n\n for (const [index, row] of arrayData.entries()) {\n result.push(\n ...collectBlocksToMigrate({\n config,\n data: row,\n fields: field.flattenedFields,\n parentAccessor: [...parentAccessor, field.name, index],\n parentIsLocalized,\n }),\n )\n }\n break\n }\n case 'blocks': {\n result.push({\n data: data[field.name],\n fieldAccessor: [...parentAccessor, field.name],\n })\n break\n }\n case 'group':\n case 'tab': {\n if (config.localization && fieldShouldBeLocalized({ field, parentIsLocalized })) {\n result.push(\n ...collectBlocksToMigrate({\n config,\n data: data[field.name],\n fields: config.localization.localeCodes.map((code) => ({\n ...field,\n name: code,\n localized: false,\n })),\n parentAccessor: [...parentAccessor, field.name],\n parentIsLocalized: true,\n }),\n )\n\n continue\n }\n\n result.push(\n ...collectBlocksToMigrate({\n config,\n data: data[field.name],\n fields: field.flattenedFields,\n parentAccessor: [...parentAccessor, field.name],\n parentIsLocalized,\n }),\n )\n break\n }\n default: {\n continue\n }\n }\n }\n\n return result\n}\n\nclass BlocksToJsonMigratorImpl implements BlocksToJsonMigrator {\n private readonly batchSize: number\n private tempFolderPath: string\n\n constructor(\n private readonly adapter: DrizzleAdapter,\n private readonly sanitizeStatements: (args: {\n sqlExecute: string\n statements: string[]\n }) => string,\n private readonly executeMethod: string,\n batchSize?: number,\n ) {\n this.batchSize = batchSize || DEFAULT_BATCH_SIZE\n this.tempFolderPath = path.resolve(this.adapter.migrationDir, TEMP_FOLDER_NAME)\n }\n\n private ensureTempFolder(): void {\n if (!existsSync(this.tempFolderPath)) {\n mkdirSync(this.tempFolderPath, { recursive: true })\n }\n }\n\n private *fetchEntitiesFromJsonBatches(): IterableIterator<BlocksToJsonEntityToMigrate[]> {\n if (!existsSync(this.tempFolderPath)) {\n return\n }\n\n const files = readdirSync(this.tempFolderPath)\n .filter((file) => file.startsWith('entities-batch-') && file.endsWith('.json'))\n .sort((a, b) => {\n const aNum = parseInt(a.match(/\\d+/)?.[0] || '0', 10)\n const bNum = parseInt(b.match(/\\d+/)?.[0] || '0', 10)\n return aNum - bNum\n })\n\n for (const file of files) {\n const filePath = path.join(this.tempFolderPath, file)\n const fileContent = readFileSync(filePath, 'utf-8')\n const batchEntities = JSON.parse(fileContent) as BlocksToJsonEntityToMigrate[]\n yield batchEntities\n }\n }\n\n private async migrateEntities(\n entities: BlocksToJsonEntityToMigrate[],\n req: PayloadRequest,\n ): Promise<void> {\n this.adapter.blocksAsJSON = true\n this.resetSchema()\n await this.adapter.init()\n await this.adapter.connect()\n\n await this.syncTransactionDrizzleInstance(req)\n\n const totalEntities = entities.length\n let processed = 0\n\n for (const entity of entities) {\n switch (entity.type) {\n case 'collection': {\n await this.adapter.updateOne({\n collection: entity.slug,\n data: entity.originalData,\n joins: false,\n req,\n where: {\n id: {\n equals: entity.id,\n },\n },\n })\n break\n }\n case 'collectionVersion': {\n await this.adapter.updateVersion({\n id: entity.id,\n collection: entity.slug,\n req,\n versionData: entity.originalData as any,\n })\n\n break\n }\n case 'global': {\n await this.adapter.updateGlobal({\n slug: entity.slug,\n data: entity.originalData,\n req,\n })\n break\n }\n case 'globalVersion': {\n await this.adapter.updateGlobalVersion({\n id: entity.id,\n global: entity.slug,\n req,\n versionData: entity.originalData as any,\n })\n break\n }\n }\n\n processed++\n if (processed % this.batchSize === 0 || processed === totalEntities) {\n this.adapter.payload.logger.info(\n `Migrated ${processed}/${totalEntities} entities (${Math.round((processed / totalEntities) * 100)}%)`,\n )\n }\n }\n }\n\n private resetSchema() {\n this.adapter.schema = {}\n this.adapter.tables = {}\n this.adapter.indexes = new Set()\n this.adapter.foreignKeys = new Set()\n this.adapter.relations = {}\n this.adapter.rawTables = {}\n this.adapter.rawRelations = {}\n this.adapter.tableNameMap = new Map()\n this.adapter.enums = {}\n }\n\n private async syncTransactionDrizzleInstance(req: PayloadRequest) {\n const tsx = (await getTransaction(this.adapter, req)) as any\n\n tsx._ = this.adapter.drizzle._\n tsx.schema = this.adapter.drizzle._\n tsx.session.schema = (this.adapter.drizzle as any).session.schema\n }\n\n cleanupTempFolder(): void {\n rmSync(this.tempFolderPath, { force: true, recursive: true })\n\n this.adapter.payload.logger.info(`Cleaned up temp folder at ${this.tempFolderPath}`)\n }\n\n async collectAndSaveEntitiesToBatches(\n req: PayloadRequest,\n options?: {\n batchSize?: number\n },\n ): Promise<void> {\n const batchSize = options?.batchSize ?? this.batchSize\n\n this.cleanupTempFolder()\n this.ensureTempFolder()\n\n this.adapter.blocksAsJSON = false\n this.resetSchema()\n await this.adapter.init()\n await this.adapter.connect()\n\n // Count total entities to migrate\n let totalExpected = 0\n for (const collection of this.adapter.payload.config.collections.filter(entityHasBlocksField)) {\n const { totalDocs } = await this.adapter.count({ collection: collection.slug })\n totalExpected += totalDocs\n\n if (collection.versions) {\n const { totalDocs: totalVersions } = await this.adapter.countVersions({\n collection: collection.slug,\n })\n totalExpected += totalVersions\n }\n }\n\n for (const globalConfig of this.adapter.payload.config.globals.filter(entityHasBlocksField)) {\n totalExpected += 1 // Global itself\n\n if (globalConfig.versions) {\n const { totalDocs: totalGlobalVersions } = await this.adapter.countGlobalVersions({\n global: globalConfig.slug,\n })\n totalExpected += totalGlobalVersions\n }\n }\n\n this.adapter.payload.logger.info(\n `Found ${totalExpected} total entities to collect and save to batches`,\n )\n\n let batchIndex = 0\n let currentBatch: BlocksToJsonEntityToMigrate[] = []\n let totalCollected = 0\n\n const flushBatch = () => {\n if (currentBatch.length > 0) {\n writeEntitiesToTempFile(currentBatch, this.tempFolderPath, batchIndex)\n const percentage =\n totalExpected > 0 ? Math.round((totalCollected / totalExpected) * 100) : 0\n this.adapter.payload.logger.info(\n `Saved batch ${batchIndex} with ${currentBatch.length} entities (${totalCollected}/${totalExpected} - ${percentage}%)`,\n )\n batchIndex++\n currentBatch = []\n }\n }\n\n const addEntity = (entity: BlocksToJsonEntityToMigrate) => {\n currentBatch.push(entity)\n totalCollected++\n if (currentBatch.length >= batchSize) {\n flushBatch()\n }\n }\n\n for (const collection of this.adapter.payload.config.collections.filter(entityHasBlocksField)) {\n let page = 1\n let hasMore = true\n\n while (hasMore) {\n const { docs, hasNextPage } = await this.adapter.find({\n collection: collection.slug,\n limit: batchSize,\n page,\n })\n\n for (const doc of docs) {\n const entity: BlocksToJsonEntityToMigrate = {\n id: doc.id,\n slug: collection.slug,\n type: 'collection',\n blocks: collectBlocksToMigrate({\n config: this.adapter.payload.config,\n data: doc,\n fields: collection.flattenedFields,\n parentAccessor: [],\n parentIsLocalized: false,\n }),\n originalData: doc,\n }\n\n addEntity(entity)\n }\n\n this.adapter.payload.logger.info(\n `Collected ${docs.length} entries from ${collection.slug} (page ${page})`,\n )\n\n hasMore = hasNextPage\n page++\n }\n\n if (collection.versions) {\n let versionPage = 1\n let hasMoreVersions = true\n\n while (hasMoreVersions) {\n const { docs: versionDocs, hasNextPage: hasNextVersionPage } =\n await this.adapter.findVersions({\n collection: collection.slug,\n limit: batchSize,\n page: versionPage,\n })\n\n for (const versionDoc of versionDocs) {\n const entity: BlocksToJsonEntityToMigrate = {\n id: versionDoc.id,\n slug: collection.slug,\n type: 'collectionVersion',\n blocks: collectBlocksToMigrate({\n config: this.adapter.payload.config,\n data: versionDoc,\n fields: buildVersionCollectionFields(this.adapter.payload.config, collection, true),\n parentAccessor: [],\n parentIsLocalized: false,\n }),\n originalData: versionDoc,\n }\n\n addEntity(entity)\n }\n\n this.adapter.payload.logger.info(\n `Collected ${versionDocs.length} versions from ${collection.slug} (page ${versionPage})`,\n )\n\n hasMoreVersions = hasNextVersionPage\n versionPage++\n }\n }\n }\n\n for (const globalConfig of this.adapter.payload.config.globals.filter(entityHasBlocksField)) {\n const globalDoc = await this.adapter.findGlobal({ slug: globalConfig.slug })\n\n const entity: BlocksToJsonEntityToMigrate = {\n slug: globalConfig.slug,\n type: 'global',\n blocks: collectBlocksToMigrate({\n config: this.adapter.payload.config,\n data: globalDoc,\n fields: globalConfig.flattenedFields,\n parentAccessor: [],\n parentIsLocalized: false,\n }),\n originalData: globalDoc,\n }\n\n addEntity(entity)\n this.adapter.payload.logger.info(`Collected global ${globalConfig.slug}`)\n\n if (globalConfig.versions) {\n let globalVersionPage = 1\n let hasMoreGlobalVersions = true\n\n while (hasMoreGlobalVersions) {\n const { docs: globalVersionDocs, hasNextPage: hasNextGlobalVersionPage } =\n await this.adapter.findGlobalVersions({\n global: globalConfig.slug,\n limit: batchSize,\n page: globalVersionPage,\n })\n\n for (const globalVersionDoc of globalVersionDocs) {\n const entity: BlocksToJsonEntityToMigrate = {\n id: globalVersionDoc.id,\n slug: globalConfig.slug,\n type: 'globalVersion',\n blocks: collectBlocksToMigrate({\n config: this.adapter.payload.config,\n data: globalVersionDoc,\n fields: buildVersionGlobalFields(this.adapter.payload.config, globalConfig, true),\n parentAccessor: [],\n parentIsLocalized: false,\n }),\n originalData: globalVersionDoc,\n }\n\n addEntity(entity)\n }\n\n this.adapter.payload.logger.info(\n `Collected ${globalVersionDocs.length} versions from global ${globalConfig.slug} (page ${globalVersionPage})`,\n )\n\n hasMoreGlobalVersions = hasNextGlobalVersionPage\n globalVersionPage++\n }\n }\n }\n\n flushBatch()\n\n this.adapter.payload.logger.info(\n `Collected total of ${totalCollected} entities across ${batchIndex} batches`,\n )\n }\n\n async getMigrationStatements(): Promise<{\n statements: string\n writeDrizzleSnapshot(filePath: string): void\n }> {\n const { generateDrizzleJson, generateMigration } = this.adapter.requireDrizzleKit()\n\n const drizzleJsonBefore = await generateDrizzleJson(this.adapter.schema)\n this.adapter.blocksAsJSON = true\n this.resetSchema()\n\n await this.adapter.init()\n const drizzleJsonAfter = await generateDrizzleJson(this.adapter.schema)\n this.adapter.blocksAsJSON = false\n this.resetSchema()\n await this.adapter.init()\n\n const statements = await acceptDrizzlePrompts(\n () => generateMigration(drizzleJsonBefore, drizzleJsonAfter),\n {\n silenceLogs: true,\n },\n )\n\n const sqlExecute = `await db.${this.executeMethod}(` + 'sql`'\n\n return {\n statements: this.sanitizeStatements({\n sqlExecute,\n statements,\n }),\n writeDrizzleSnapshot(filePath) {\n writeFileSync(`${filePath}.json`, JSON.stringify(drizzleJsonAfter, null, 2))\n },\n }\n }\n\n async migrateEntitiesFromTempFolder(\n req: PayloadRequest,\n options?: {\n clearBatches?: boolean\n },\n ): Promise<void> {\n const clearBatches = options?.clearBatches ?? true\n\n let totalEntities = 0\n let hasEntities = false\n\n for (const entities of this.fetchEntitiesFromJsonBatches()) {\n hasEntities = true\n totalEntities += entities.length\n\n this.adapter.payload.logger.info(\n `Migrating batch with ${entities.length} entities (total: ${totalEntities})`,\n )\n\n await this.migrateEntities(entities, req)\n }\n\n if (!hasEntities) {\n this.adapter.payload.logger.warn('No entities found in temp folder to migrate')\n return\n }\n\n this.adapter.payload.logger.info(\n `Completed migration of ${totalEntities} entities from temp folder`,\n )\n\n if (clearBatches) {\n this.cleanupTempFolder()\n } else {\n this.adapter.payload.logger.info(\n `Temp folder preserved at ${this.tempFolderPath} (clearBatches: false)`,\n )\n }\n }\n\n setTempFolder(tempFolderPath: string): void {\n this.tempFolderPath = tempFolderPath\n }\n\n async updatePayloadConfigFile(): Promise<void> {\n let configPath: string\n\n try {\n configPath = findConfig()\n } catch {\n this.adapter.payload.logger.info(\n 'updatePayloadConfigFile failed - could not find the payload config. Please set the blocksAsJSON DB adapter property manually to \"true\"',\n )\n return\n }\n\n const configFile = readFileSync(configPath, 'utf-8')\n\n const ts = await dynamicImport<typeof tsTypes>('typescript')\n\n const source = ts.createSourceFile(configPath, configFile, ts.ScriptTarget.ESNext)\n\n let hadChanges = false\n\n const result = ts.transform(source, [\n (ctx) => (sourceFile) => {\n const factory = ctx.factory\n\n const visit: tsTypes.Visitor = (node) => {\n if (\n ts.isPropertyAssignment(node) &&\n ts.isIdentifier(node.name) &&\n node.name.text === 'db' &&\n ts.isCallExpression(node.initializer) &&\n node.initializer.arguments.length > 0 &&\n ts.isObjectLiteralExpression(node.initializer.arguments[0])\n ) {\n const call = node.initializer\n const obj = node.initializer.arguments[0]\n\n const filteredProps = obj.properties.filter((prop) => {\n if (!ts.isPropertyAssignment(prop)) {\n return true\n }\n\n return !(ts.isIdentifier(prop.name) && prop.name.text === 'blocksAsJSON')\n })\n\n const newProperty = factory.createPropertyAssignment(\n 'blocksAsJSON',\n factory.createTrue(),\n )\n hadChanges = true\n const newObject = factory.updateObjectLiteralExpression(obj, [\n ...filteredProps,\n newProperty,\n ])\n\n const newCall = factory.updateCallExpression(\n call,\n call.expression,\n call.typeArguments,\n [newObject],\n )\n\n return factory.updatePropertyAssignment(node, node.name, newCall)\n }\n\n return ts.visitEachChild(node, visit, ctx)\n }\n\n return ts.visitNode(sourceFile, visit) as tsTypes.SourceFile\n },\n ])\n\n if (!hadChanges) {\n this.adapter.payload.logger.info(\n 'No changes made to payload config. Set blocksAsJSON to true manually.',\n )\n return\n }\n\n const printer = ts.createPrinter({ newLine: ts.NewLineKind.LineFeed })\n writeFileSync(configPath, printer.printFile(result.transformed[0]), 'utf-8')\n await formatGeneratedFile({ filePath: configPath, logger: this.adapter.payload.logger })\n\n this.adapter.payload.logger.info(`Updated ${configPath} with blocksAsJSON: true`)\n }\n}\n\nexport const createBlocksToJsonMigrator = ({\n adapter,\n executeMethod,\n sanitizeStatements,\n}: {\n adapter: DrizzleAdapter\n executeMethod: string\n sanitizeStatements: (args: { sqlExecute: string; statements: string[] }) => string\n}): BlocksToJsonMigrator => {\n return new BlocksToJsonMigratorImpl(adapter, sanitizeStatements, executeMethod)\n}\n\nexport const getBlocksToJsonMigrator = (payload: Payload): BlocksToJsonMigrator => {\n const migrator = (payload.db as DrizzleAdapter).blocksToJsonMigrator\n\n if (!migrator) {\n throw new APIError(`blocksToJsonMigrator is not defined for ${payload.db.packageName}`)\n }\n\n return migrator\n}\n\nexport const buildDynamicPredefinedBlocksToJsonMigration = ({\n packageName,\n}: {\n packageName: string\n}): DynamicMigrationTemplate => {\n return async ({ filePath, payload }) => {\n const migrator = getBlocksToJsonMigrator(payload)\n\n const migrationStatements = await migrator.getMigrationStatements()\n\n migrationStatements.writeDrizzleSnapshot(filePath)\n\n await migrator.updatePayloadConfigFile()\n const upSQL = `\nconst migrator = getBlocksToJsonMigrator(payload)\nmigrator.setTempFolder(TEMP_FOLDER)\nawait migrator.collectAndSaveEntitiesToBatches(req, { batchSize: BATCH_SIZE })\n\n${migrationStatements.statements}\npayload.logger.info(\"Executed blocks to JSON migration statements.\")\n\nawait migrator.migrateEntitiesFromTempFolder(req, { clearBatches: true })\n `\n\n return {\n imports: `\nimport { getBlocksToJsonMigrator } from '${packageName}/migration-utils'\nimport { fileURLToPath } from 'url'\nimport path from 'path'\n\nconst filename = fileURLToPath(import.meta.url)\nconst dirname = path.dirname(filename)\n\n// Configure migration options (optional)\nconst BATCH_SIZE = 100 // Number of entities to process per batch\nconst TEMP_FOLDER = path.resolve(dirname, '${TEMP_FOLDER_NAME}') // Folder path to store migration batch\n`,\n upSQL,\n }\n }\n}\n"],"names":["existsSync","mkdirSync","readdirSync","readFileSync","rmSync","writeFileSync","path","APIError","buildVersionCollectionFields","buildVersionGlobalFields","dynamicImport","findConfig","fieldShouldBeLocalized","formatGeneratedFile","getTransaction","DEFAULT_BATCH_SIZE","TEMP_FOLDER_NAME","writeEntitiesToTempFile","entities","tempFolderPath","batchIndex","filePath","join","JSON","stringify","acceptDrizzlePrompts","callPrompt","silenceLogs","write","process","stdout","promise","interval","setInterval","stdin","emit","name","ctrl","res","clearInterval","entityHasBlocksField","entity","field","flattenedFields","type","collectBlocksToMigrate","config","data","fields","parentAccessor","parentIsLocalized","result","arrayData","Array","isArray","localization","push","localeCodes","map","code","localized","index","row","entries","fieldAccessor","BlocksToJsonMigratorImpl","batchSize","adapter","sanitizeStatements","executeMethod","resolve","migrationDir","ensureTempFolder","recursive","fetchEntitiesFromJsonBatches","files","filter","file","startsWith","endsWith","sort","a","b","aNum","parseInt","match","bNum","fileContent","batchEntities","parse","migrateEntities","req","blocksAsJSON","resetSchema","init","connect","syncTransactionDrizzleInstance","totalEntities","length","processed","updateOne","collection","slug","originalData","joins","where","id","equals","updateVersion","versionData","updateGlobal","updateGlobalVersion","global","payload","logger","info","Math","round","schema","tables","indexes","Set","foreignKeys","relations","rawTables","rawRelations","tableNameMap","Map","enums","tsx","_","drizzle","session","cleanupTempFolder","force","collectAndSaveEntitiesToBatches","options","totalExpected","collections","totalDocs","count","versions","totalVersions","countVersions","globalConfig","globals","totalGlobalVersions","countGlobalVersions","currentBatch","totalCollected","flushBatch","percentage","addEntity","page","hasMore","docs","hasNextPage","find","limit","doc","blocks","versionPage","hasMoreVersions","versionDocs","hasNextVersionPage","findVersions","versionDoc","globalDoc","findGlobal","globalVersionPage","hasMoreGlobalVersions","globalVersionDocs","hasNextGlobalVersionPage","findGlobalVersions","globalVersionDoc","getMigrationStatements","generateDrizzleJson","generateMigration","requireDrizzleKit","drizzleJsonBefore","drizzleJsonAfter","statements","sqlExecute","writeDrizzleSnapshot","migrateEntitiesFromTempFolder","clearBatches","hasEntities","warn","setTempFolder","updatePayloadConfigFile","configPath","configFile","ts","source","createSourceFile","ScriptTarget","ESNext","hadChanges","transform","ctx","sourceFile","factory","visit","node","isPropertyAssignment","isIdentifier","text","isCallExpression","initializer","arguments","isObjectLiteralExpression","call","obj","filteredProps","properties","prop","newProperty","createPropertyAssignment","createTrue","newObject","updateObjectLiteralExpression","newCall","updateCallExpression","expression","typeArguments","updatePropertyAssignment","visitEachChild","visitNode","printer","createPrinter","newLine","NewLineKind","LineFeed","printFile","transformed","createBlocksToJsonMigrator","getBlocksToJsonMigrator","migrator","db","blocksToJsonMigrator","packageName","buildDynamicPredefinedBlocksToJsonMigration","migrationStatements","upSQL","imports"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"buildCreateMigration.d.ts","sourceRoot":"","sources":["../../src/utilities/buildCreateMigration.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAW,MAAM,SAAS,CAAA;AAWvD,eAAO,MAAM,oBAAoB,GAAI,kDAIlC;IACD,aAAa,EAAE,MAAM,CAAA;IACrB,QAAQ,EAAE,MAAM,CAAA;IAChB,kBAAkB,EAAE,CAAC,IAAI,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,EAAE,CAAA;KAAE,KAAK,MAAM,CAAA;CACnF,KAAG,eA6IH,CAAA"}
1
+ {"version":3,"file":"buildCreateMigration.d.ts","sourceRoot":"","sources":["../../src/utilities/buildCreateMigration.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAW9C,eAAO,MAAM,oBAAoB,qDAI9B;IACD,aAAa,EAAE,MAAM,CAAA;IACrB,QAAQ,EAAE,MAAM,CAAA;IAChB,kBAAkB,EAAE,CAAC,IAAI,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,EAAE,CAAA;KAAE,KAAK,MAAM,CAAA;CACnF,KAAG,eAwIH,CAAA"}