@payloadcms/drizzle 4.0.0-internal.293e026 → 4.0.0-internal.2d11d2e

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 (398) hide show
  1. package/LICENSE.md +1 -1
  2. package/dist/count.d.ts.map +1 -1
  3. package/dist/count.js +25 -3
  4. package/dist/count.js.map +1 -1
  5. package/dist/countGlobalVersions.js +8 -3
  6. package/dist/countGlobalVersions.js.map +1 -1
  7. package/dist/countVersions.d.ts.map +1 -1
  8. package/dist/countVersions.js +29 -4
  9. package/dist/countVersions.js.map +1 -1
  10. package/dist/createGlobalVersion.d.ts.map +1 -1
  11. package/dist/createGlobalVersion.js +17 -2
  12. package/dist/createGlobalVersion.js.map +1 -1
  13. package/dist/createTableName.d.ts.map +1 -1
  14. package/dist/createTableName.js +2 -7
  15. package/dist/createTableName.js.map +1 -1
  16. package/dist/createVersion.d.ts.map +1 -1
  17. package/dist/createVersion.js +12 -1
  18. package/dist/createVersion.js.map +1 -1
  19. package/dist/deleteBranchGlobal.d.ts +10 -0
  20. package/dist/deleteBranchGlobal.d.ts.map +1 -0
  21. package/dist/deleteBranchGlobal.js +27 -0
  22. package/dist/deleteBranchGlobal.js.map +1 -0
  23. package/dist/deleteOne.d.ts.map +1 -1
  24. package/dist/deleteOne.js +25 -1
  25. package/dist/deleteOne.js.map +1 -1
  26. package/dist/exports/postgres.d.ts +5 -1
  27. package/dist/exports/postgres.d.ts.map +1 -1
  28. package/dist/exports/postgres.js +5 -1
  29. package/dist/exports/postgres.js.map +1 -1
  30. package/dist/exports/sqlite.d.ts +3 -1
  31. package/dist/exports/sqlite.d.ts.map +1 -1
  32. package/dist/exports/sqlite.js +3 -1
  33. package/dist/exports/sqlite.js.map +1 -1
  34. package/dist/find/buildFindManyArgs.d.ts +3 -2
  35. package/dist/find/buildFindManyArgs.d.ts.map +1 -1
  36. package/dist/find/buildFindManyArgs.js +2 -1
  37. package/dist/find/buildFindManyArgs.js.map +1 -1
  38. package/dist/find/buildPolymorphicJoinQuery.d.ts +40 -0
  39. package/dist/find/buildPolymorphicJoinQuery.d.ts.map +1 -0
  40. package/dist/find/buildPolymorphicJoinQuery.js +163 -0
  41. package/dist/find/buildPolymorphicJoinQuery.js.map +1 -0
  42. package/dist/find/buildPolymorphicJoinWhere.d.ts +20 -0
  43. package/dist/find/buildPolymorphicJoinWhere.d.ts.map +1 -0
  44. package/dist/find/buildPolymorphicJoinWhere.js +301 -0
  45. package/dist/find/buildPolymorphicJoinWhere.js.map +1 -0
  46. package/dist/find/createPolymorphicJoinWherePlan.d.ts +38 -0
  47. package/dist/find/createPolymorphicJoinWherePlan.d.ts.map +1 -0
  48. package/dist/find/createPolymorphicJoinWherePlan.js +200 -0
  49. package/dist/find/createPolymorphicJoinWherePlan.js.map +1 -0
  50. package/dist/find/findMany.d.ts +6 -1
  51. package/dist/find/findMany.d.ts.map +1 -1
  52. package/dist/find/findMany.js +16 -3
  53. package/dist/find/findMany.js.map +1 -1
  54. package/dist/find/traverseFields.d.ts +3 -2
  55. package/dist/find/traverseFields.d.ts.map +1 -1
  56. package/dist/find/traverseFields.js +82 -199
  57. package/dist/find/traverseFields.js.map +1 -1
  58. package/dist/find.d.ts.map +1 -1
  59. package/dist/find.js +32 -4
  60. package/dist/find.js.map +1 -1
  61. package/dist/findDistinct.d.ts.map +1 -1
  62. package/dist/findDistinct.js +104 -8
  63. package/dist/findDistinct.js.map +1 -1
  64. package/dist/findGlobal.d.ts.map +1 -1
  65. package/dist/findGlobal.js +24 -5
  66. package/dist/findGlobal.js.map +1 -1
  67. package/dist/findGlobalVersions.js +8 -3
  68. package/dist/findGlobalVersions.js.map +1 -1
  69. package/dist/findOne.d.ts +1 -1
  70. package/dist/findOne.d.ts.map +1 -1
  71. package/dist/findOne.js +30 -3
  72. package/dist/findOne.js.map +1 -1
  73. package/dist/findVersions.d.ts.map +1 -1
  74. package/dist/findVersions.js +32 -5
  75. package/dist/findVersions.js.map +1 -1
  76. package/dist/index.d.ts +6 -11
  77. package/dist/index.d.ts.map +1 -1
  78. package/dist/index.js +4 -9
  79. package/dist/index.js.map +1 -1
  80. package/dist/migrate.d.ts.map +1 -1
  81. package/dist/migrate.js +41 -15
  82. package/dist/migrate.js.map +1 -1
  83. package/dist/migrateDown.d.ts +2 -1
  84. package/dist/migrateDown.d.ts.map +1 -1
  85. package/dist/migrateDown.js +17 -4
  86. package/dist/migrateDown.js.map +1 -1
  87. package/dist/migrateFresh.d.ts +4 -2
  88. package/dist/migrateFresh.d.ts.map +1 -1
  89. package/dist/migrateFresh.js +26 -9
  90. package/dist/migrateFresh.js.map +1 -1
  91. package/dist/migrateRefresh.d.ts +2 -1
  92. package/dist/migrateRefresh.d.ts.map +1 -1
  93. package/dist/migrateRefresh.js +20 -5
  94. package/dist/migrateRefresh.js.map +1 -1
  95. package/dist/migrateReset.d.ts +2 -1
  96. package/dist/migrateReset.d.ts.map +1 -1
  97. package/dist/migrateReset.js +18 -4
  98. package/dist/migrateReset.js.map +1 -1
  99. package/dist/migrateStatus.d.ts +2 -1
  100. package/dist/migrateStatus.d.ts.map +1 -1
  101. package/dist/migrateStatus.js +11 -6
  102. package/dist/migrateStatus.js.map +1 -1
  103. package/dist/postgres/createDatabase.d.ts.map +1 -1
  104. package/dist/postgres/createExtensions.d.ts.map +1 -1
  105. package/dist/postgres/createJSONQuery/index.d.ts.map +1 -1
  106. package/dist/postgres/createJSONQuery/index.js +3 -3
  107. package/dist/postgres/createJSONQuery/index.js.map +1 -1
  108. package/dist/postgres/init.d.ts.map +1 -1
  109. package/dist/postgres/init.js +6 -0
  110. package/dist/postgres/init.js.map +1 -1
  111. package/dist/postgres/insert.d.ts.map +1 -1
  112. package/dist/postgres/insert.js +4 -2
  113. package/dist/postgres/insert.js.map +1 -1
  114. package/dist/postgres/predefinedMigrations/localize-status/index.d.ts +11 -0
  115. package/dist/postgres/predefinedMigrations/localize-status/index.d.ts.map +1 -0
  116. package/dist/postgres/predefinedMigrations/localize-status/index.js +296 -0
  117. package/dist/postgres/predefinedMigrations/localize-status/index.js.map +1 -0
  118. package/dist/postgres/predefinedMigrations/localize-status/migrateMainCollection.d.ts +13 -0
  119. package/dist/postgres/predefinedMigrations/localize-status/migrateMainCollection.d.ts.map +1 -0
  120. package/dist/postgres/predefinedMigrations/localize-status/migrateMainCollection.js +51 -0
  121. package/dist/postgres/predefinedMigrations/localize-status/migrateMainCollection.js.map +1 -0
  122. package/dist/postgres/predefinedMigrations/localize-status/migrateMainGlobal.d.ts +13 -0
  123. package/dist/postgres/predefinedMigrations/localize-status/migrateMainGlobal.d.ts.map +1 -0
  124. package/dist/postgres/predefinedMigrations/localize-status/migrateMainGlobal.js +54 -0
  125. package/dist/postgres/predefinedMigrations/localize-status/migrateMainGlobal.js.map +1 -0
  126. package/dist/postgres/predefinedMigrations/sizes-to-variants/index.d.ts +35 -0
  127. package/dist/postgres/predefinedMigrations/sizes-to-variants/index.d.ts.map +1 -0
  128. package/dist/postgres/predefinedMigrations/sizes-to-variants/index.js +185 -0
  129. package/dist/postgres/predefinedMigrations/sizes-to-variants/index.js.map +1 -0
  130. package/dist/postgres/predefinedMigrations/v2-v3/fetchAndResave/index.d.ts.map +1 -1
  131. package/dist/postgres/predefinedMigrations/v2-v3/fetchAndResave/index.js +8 -4
  132. package/dist/postgres/predefinedMigrations/v2-v3/fetchAndResave/index.js.map +1 -1
  133. package/dist/postgres/predefinedMigrations/v2-v3/fetchAndResave/traverseFields.d.ts.map +1 -1
  134. package/dist/postgres/predefinedMigrations/v2-v3/groupUpSQLStatements.d.ts.map +1 -1
  135. package/dist/postgres/predefinedMigrations/v2-v3/index.d.ts.map +1 -1
  136. package/dist/postgres/predefinedMigrations/v2-v3/index.js +2 -2
  137. package/dist/postgres/predefinedMigrations/v2-v3/index.js.map +1 -1
  138. package/dist/postgres/predefinedMigrations/v2-v3/migrateRelationships.d.ts.map +1 -1
  139. package/dist/postgres/predefinedMigrations/v2-v3/traverseFields.d.ts.map +1 -1
  140. package/dist/postgres/query/assertOperatorHandlerExtensionsInstalled.d.ts +15 -0
  141. package/dist/postgres/query/assertOperatorHandlerExtensionsInstalled.d.ts.map +1 -0
  142. package/dist/postgres/query/assertOperatorHandlerExtensionsInstalled.js +25 -0
  143. package/dist/postgres/query/assertOperatorHandlerExtensionsInstalled.js.map +1 -0
  144. package/dist/postgres/query/postgresUnaccent.d.ts +13 -0
  145. package/dist/postgres/query/postgresUnaccent.d.ts.map +1 -0
  146. package/dist/postgres/query/postgresUnaccent.js +40 -0
  147. package/dist/postgres/query/postgresUnaccent.js.map +1 -0
  148. package/dist/postgres/requireDrizzleKit.d.ts +4 -0
  149. package/dist/postgres/requireDrizzleKit.d.ts.map +1 -1
  150. package/dist/postgres/requireDrizzleKit.js +16 -10
  151. package/dist/postgres/requireDrizzleKit.js.map +1 -1
  152. package/dist/postgres/schema/buildDrizzleTable.d.ts.map +1 -1
  153. package/dist/postgres/schema/geometryColumn.d.ts +2 -2
  154. package/dist/postgres/schema/geometryColumn.d.ts.map +1 -1
  155. package/dist/postgres/types.d.ts +17 -2
  156. package/dist/postgres/types.d.ts.map +1 -1
  157. package/dist/postgres/types.js.map +1 -1
  158. package/dist/queries/addJoinTable.d.ts +1 -1
  159. package/dist/queries/addJoinTable.d.ts.map +1 -1
  160. package/dist/queries/buildAndOrConditions.d.ts +3 -2
  161. package/dist/queries/buildAndOrConditions.d.ts.map +1 -1
  162. package/dist/queries/buildAndOrConditions.js +2 -1
  163. package/dist/queries/buildAndOrConditions.js.map +1 -1
  164. package/dist/queries/buildBranchVisibility.d.ts +11 -0
  165. package/dist/queries/buildBranchVisibility.d.ts.map +1 -0
  166. package/dist/queries/buildBranchVisibility.js +48 -0
  167. package/dist/queries/buildBranchVisibility.js.map +1 -0
  168. package/dist/queries/buildOperatorConstraint.d.ts +22 -0
  169. package/dist/queries/buildOperatorConstraint.d.ts.map +1 -0
  170. package/dist/queries/buildOperatorConstraint.js +63 -0
  171. package/dist/queries/buildOperatorConstraint.js.map +1 -0
  172. package/dist/queries/buildOrderBy.d.ts +3 -2
  173. package/dist/queries/buildOrderBy.d.ts.map +1 -1
  174. package/dist/queries/buildOrderBy.js +2 -1
  175. package/dist/queries/buildOrderBy.js.map +1 -1
  176. package/dist/queries/buildQuery.d.ts +3 -2
  177. package/dist/queries/buildQuery.d.ts.map +1 -1
  178. package/dist/queries/buildQuery.js +4 -2
  179. package/dist/queries/buildQuery.js.map +1 -1
  180. package/dist/queries/getTableAlias.d.ts.map +1 -1
  181. package/dist/queries/getTableColumnFromPath.d.ts +15 -5
  182. package/dist/queries/getTableColumnFromPath.d.ts.map +1 -1
  183. package/dist/queries/getTableColumnFromPath.js +226 -56
  184. package/dist/queries/getTableColumnFromPath.js.map +1 -1
  185. package/dist/queries/operatorMap.d.ts +7 -3
  186. package/dist/queries/operatorMap.d.ts.map +1 -1
  187. package/dist/queries/operatorMap.js.map +1 -1
  188. package/dist/queries/parseParams.d.ts +3 -2
  189. package/dist/queries/parseParams.d.ts.map +1 -1
  190. package/dist/queries/parseParams.js +266 -11
  191. package/dist/queries/parseParams.js.map +1 -1
  192. package/dist/queries/resolveRelationshipPath.d.ts +36 -0
  193. package/dist/queries/resolveRelationshipPath.d.ts.map +1 -0
  194. package/dist/queries/resolveRelationshipPath.js +66 -0
  195. package/dist/queries/resolveRelationshipPath.js.map +1 -0
  196. package/dist/queries/sanitizeQueryValue.d.ts.map +1 -1
  197. package/dist/queries/selectDistinct.d.ts.map +1 -1
  198. package/dist/queries/validateOperatorHandlers.d.ts +8 -0
  199. package/dist/queries/validateOperatorHandlers.d.ts.map +1 -0
  200. package/dist/queries/validateOperatorHandlers.js +30 -0
  201. package/dist/queries/validateOperatorHandlers.js.map +1 -0
  202. package/dist/queryDrafts.d.ts.map +1 -1
  203. package/dist/queryDrafts.js +27 -5
  204. package/dist/queryDrafts.js.map +1 -1
  205. package/dist/schema/build.d.ts.map +1 -1
  206. package/dist/schema/build.js +28 -20
  207. package/dist/schema/build.js.map +1 -1
  208. package/dist/schema/buildDrizzleRelations.d.ts.map +1 -1
  209. package/dist/schema/buildRawSchema.d.ts.map +1 -1
  210. package/dist/schema/idToUUID.d.ts.map +1 -1
  211. package/dist/schema/traverseFields.d.ts.map +1 -1
  212. package/dist/schema/traverseFields.js +6 -5
  213. package/dist/schema/traverseFields.js.map +1 -1
  214. package/dist/schema/withDefault.d.ts.map +1 -1
  215. package/dist/sqlite/createJSONQuery/convertPathToJSONTraversal.d.ts.map +1 -1
  216. package/dist/sqlite/createJSONQuery/convertPathToJSONTraversal.js +3 -2
  217. package/dist/sqlite/createJSONQuery/convertPathToJSONTraversal.js.map +1 -1
  218. package/dist/sqlite/createJSONQuery/index.d.ts.map +1 -1
  219. package/dist/sqlite/createJSONQuery/index.js +6 -5
  220. package/dist/sqlite/createJSONQuery/index.js.map +1 -1
  221. package/dist/sqlite/createRequireDrizzleKit.d.ts +6 -0
  222. package/dist/sqlite/createRequireDrizzleKit.d.ts.map +1 -0
  223. package/dist/sqlite/createRequireDrizzleKit.js +15 -0
  224. package/dist/sqlite/createRequireDrizzleKit.js.map +1 -0
  225. package/dist/sqlite/execute.js.map +1 -1
  226. package/dist/sqlite/insert.d.ts.map +1 -1
  227. package/dist/sqlite/insert.js +9 -4
  228. package/dist/sqlite/insert.js.map +1 -1
  229. package/dist/sqlite/predefinedMigrations/localize-status/index.d.ts +28 -0
  230. package/dist/sqlite/predefinedMigrations/localize-status/index.d.ts.map +1 -0
  231. package/dist/sqlite/predefinedMigrations/localize-status/index.js +198 -0
  232. package/dist/sqlite/predefinedMigrations/localize-status/index.js.map +1 -0
  233. package/dist/sqlite/predefinedMigrations/localize-status/migrateMainCollection.d.ts +12 -0
  234. package/dist/sqlite/predefinedMigrations/localize-status/migrateMainCollection.d.ts.map +1 -0
  235. package/dist/sqlite/predefinedMigrations/localize-status/migrateMainCollection.js +24 -0
  236. package/dist/sqlite/predefinedMigrations/localize-status/migrateMainCollection.js.map +1 -0
  237. package/dist/sqlite/predefinedMigrations/localize-status/migrateMainGlobal.d.ts +12 -0
  238. package/dist/sqlite/predefinedMigrations/localize-status/migrateMainGlobal.d.ts.map +1 -0
  239. package/dist/sqlite/predefinedMigrations/localize-status/migrateMainGlobal.js +28 -0
  240. package/dist/sqlite/predefinedMigrations/localize-status/migrateMainGlobal.js.map +1 -0
  241. package/dist/sqlite/predefinedMigrations/sizes-to-variants/index.d.ts +15 -0
  242. package/dist/sqlite/predefinedMigrations/sizes-to-variants/index.d.ts.map +1 -0
  243. package/dist/sqlite/predefinedMigrations/sizes-to-variants/index.js +114 -0
  244. package/dist/sqlite/predefinedMigrations/sizes-to-variants/index.js.map +1 -0
  245. package/dist/sqlite/types.d.ts +4 -0
  246. package/dist/sqlite/types.d.ts.map +1 -1
  247. package/dist/sqlite/types.js.map +1 -1
  248. package/dist/transactions/beginTransaction.d.ts.map +1 -1
  249. package/dist/transactions/beginTransaction.js +13 -5
  250. package/dist/transactions/beginTransaction.js.map +1 -1
  251. package/dist/transactions/commitTransaction.d.ts.map +1 -1
  252. package/dist/transactions/commitTransaction.js +1 -5
  253. package/dist/transactions/commitTransaction.js.map +1 -1
  254. package/dist/transform/read/hasManyNumber.d.ts.map +1 -1
  255. package/dist/transform/read/hasManyText.d.ts.map +1 -1
  256. package/dist/transform/read/index.d.ts.map +1 -1
  257. package/dist/transform/read/relationship.d.ts.map +1 -1
  258. package/dist/transform/read/traverseFields.d.ts.map +1 -1
  259. package/dist/transform/read/traverseFields.js.map +1 -1
  260. package/dist/transform/write/array.d.ts +3 -2
  261. package/dist/transform/write/array.d.ts.map +1 -1
  262. package/dist/transform/write/array.js +2 -1
  263. package/dist/transform/write/array.js.map +1 -1
  264. package/dist/transform/write/blocks.d.ts +3 -2
  265. package/dist/transform/write/blocks.d.ts.map +1 -1
  266. package/dist/transform/write/blocks.js +2 -1
  267. package/dist/transform/write/blocks.js.map +1 -1
  268. package/dist/transform/write/index.d.ts.map +1 -1
  269. package/dist/transform/write/index.js +2 -0
  270. package/dist/transform/write/index.js.map +1 -1
  271. package/dist/transform/write/numbers.d.ts.map +1 -1
  272. package/dist/transform/write/relationships.d.ts.map +1 -1
  273. package/dist/transform/write/selects.d.ts.map +1 -1
  274. package/dist/transform/write/texts.d.ts.map +1 -1
  275. package/dist/transform/write/traverseFields.d.ts +2 -1
  276. package/dist/transform/write/traverseFields.d.ts.map +1 -1
  277. package/dist/transform/write/traverseFields.js +51 -22
  278. package/dist/transform/write/traverseFields.js.map +1 -1
  279. package/dist/transform/write/types.d.ts +7 -0
  280. package/dist/transform/write/types.d.ts.map +1 -1
  281. package/dist/transform/write/types.js.map +1 -1
  282. package/dist/types.d.ts +53 -8
  283. package/dist/types.d.ts.map +1 -1
  284. package/dist/types.js +1 -3
  285. package/dist/types.js.map +1 -1
  286. package/dist/updateGlobal.d.ts +5 -1
  287. package/dist/updateGlobal.d.ts.map +1 -1
  288. package/dist/updateGlobal.js +96 -4
  289. package/dist/updateGlobal.js.map +1 -1
  290. package/dist/updateJobs.d.ts.map +1 -1
  291. package/dist/updateJobs.js +37 -0
  292. package/dist/updateJobs.js.map +1 -1
  293. package/dist/updateOne.d.ts.map +1 -1
  294. package/dist/updateOne.js +93 -4
  295. package/dist/updateOne.js.map +1 -1
  296. package/dist/upsertBranchGlobalChange.d.ts +3 -0
  297. package/dist/upsertBranchGlobalChange.d.ts.map +1 -0
  298. package/dist/upsertBranchGlobalChange.js +35 -0
  299. package/dist/upsertBranchGlobalChange.js.map +1 -0
  300. package/dist/upsertRow/deleteExistingArrayRows.d.ts.map +1 -1
  301. package/dist/upsertRow/deleteExistingRowsByPath.d.ts.map +1 -1
  302. package/dist/upsertRow/deleteExistingRowsByPath.js +17 -12
  303. package/dist/upsertRow/deleteExistingRowsByPath.js.map +1 -1
  304. package/dist/upsertRow/handleUpsertError.d.ts.map +1 -1
  305. package/dist/upsertRow/handleUpsertError.js +2 -1
  306. package/dist/upsertRow/handleUpsertError.js.map +1 -1
  307. package/dist/upsertRow/index.d.ts +1 -1
  308. package/dist/upsertRow/index.d.ts.map +1 -1
  309. package/dist/upsertRow/index.js +161 -48
  310. package/dist/upsertRow/index.js.map +1 -1
  311. package/dist/upsertRow/insertArrays.d.ts.map +1 -1
  312. package/dist/upsertRow/insertArrays.js +2 -1
  313. package/dist/upsertRow/insertArrays.js.map +1 -1
  314. package/dist/upsertRow/shouldUseOptimizedUpsertRow.d.ts.map +1 -1
  315. package/dist/upsertRow/types.d.ts +3 -0
  316. package/dist/upsertRow/types.d.ts.map +1 -1
  317. package/dist/upsertRow/types.js.map +1 -1
  318. package/dist/utilities/appendPrefixToKeys.d.ts.map +1 -1
  319. package/dist/utilities/blocksToJsonMigrator.d.ts.map +1 -1
  320. package/dist/utilities/blocksToJsonMigrator.js +7 -18
  321. package/dist/utilities/blocksToJsonMigrator.js.map +1 -1
  322. package/dist/utilities/buildCreateMigration.d.ts.map +1 -1
  323. package/dist/utilities/buildCreateMigration.js +13 -9
  324. package/dist/utilities/buildCreateMigration.js.map +1 -1
  325. package/dist/utilities/buildDynamicPredefinedSizesToVariantsMigration.d.ts +15 -0
  326. package/dist/utilities/buildDynamicPredefinedSizesToVariantsMigration.d.ts.map +1 -0
  327. package/dist/utilities/buildDynamicPredefinedSizesToVariantsMigration.js +110 -0
  328. package/dist/utilities/buildDynamicPredefinedSizesToVariantsMigration.js.map +1 -0
  329. package/dist/utilities/buildForeignKeyName.d.ts.map +1 -1
  330. package/dist/utilities/buildForeignKeyName.js +3 -2
  331. package/dist/utilities/buildForeignKeyName.js.map +1 -1
  332. package/dist/utilities/buildIndexName.d.ts.map +1 -1
  333. package/dist/utilities/buildIndexName.js +3 -2
  334. package/dist/utilities/buildIndexName.js.map +1 -1
  335. package/dist/utilities/checkTruncatedIdentifiers.d.ts +13 -0
  336. package/dist/utilities/checkTruncatedIdentifiers.d.ts.map +1 -0
  337. package/dist/utilities/checkTruncatedIdentifiers.js +56 -0
  338. package/dist/utilities/checkTruncatedIdentifiers.js.map +1 -0
  339. package/dist/utilities/createBlocksMap.d.ts.map +1 -1
  340. package/dist/utilities/createRelationshipMap.d.ts.map +1 -1
  341. package/dist/utilities/createSchemaGenerator.d.ts.map +1 -1
  342. package/dist/utilities/createSchemaGenerator.js +10 -12
  343. package/dist/utilities/createSchemaGenerator.js.map +1 -1
  344. package/dist/utilities/escapeSQLValue.d.ts.map +1 -1
  345. package/dist/utilities/executeSchemaHooks.d.ts.map +1 -1
  346. package/dist/utilities/executeSchemaHooks.js +1 -1
  347. package/dist/utilities/executeSchemaHooks.js.map +1 -1
  348. package/dist/utilities/extendDrizzleTable.d.ts.map +1 -1
  349. package/dist/utilities/formatGeneratedFile.d.ts +10 -0
  350. package/dist/utilities/formatGeneratedFile.d.ts.map +1 -0
  351. package/dist/utilities/formatGeneratedFile.js +58 -0
  352. package/dist/utilities/formatGeneratedFile.js.map +1 -0
  353. package/dist/utilities/getArrayRelationName.d.ts.map +1 -1
  354. package/dist/utilities/getCollectionIdType.d.ts.map +1 -1
  355. package/dist/utilities/getMigrationTemplate.d.ts.map +1 -1
  356. package/dist/utilities/getNameFromDrizzleTable.d.ts.map +1 -1
  357. package/dist/utilities/getPrimaryDb.d.ts +1 -1
  358. package/dist/utilities/getPrimaryDb.d.ts.map +1 -1
  359. package/dist/utilities/getSizesToVariantsRenames.d.ts +54 -0
  360. package/dist/utilities/getSizesToVariantsRenames.d.ts.map +1 -0
  361. package/dist/utilities/getSizesToVariantsRenames.js +251 -0
  362. package/dist/utilities/getSizesToVariantsRenames.js.map +1 -0
  363. package/dist/utilities/getTransaction.d.ts +1 -1
  364. package/dist/utilities/getTransaction.d.ts.map +1 -1
  365. package/dist/utilities/getTransaction.js.map +1 -1
  366. package/dist/utilities/hasLocalesTable.d.ts.map +1 -1
  367. package/dist/utilities/isPolymorphicRelationship.d.ts.map +1 -1
  368. package/dist/utilities/isUUIDType.d.ts.map +1 -1
  369. package/dist/utilities/json.d.ts.map +1 -1
  370. package/dist/utilities/migrationTableExists.d.ts.map +1 -1
  371. package/dist/utilities/parseError.d.ts.map +1 -1
  372. package/dist/utilities/parseJSONPathSegment.d.ts +9 -0
  373. package/dist/utilities/parseJSONPathSegment.d.ts.map +1 -0
  374. package/dist/utilities/parseJSONPathSegment.js +17 -0
  375. package/dist/utilities/parseJSONPathSegment.js.map +1 -0
  376. package/dist/utilities/pushDevSchema.d.ts.map +1 -1
  377. package/dist/utilities/pushDevSchema.js +1 -1
  378. package/dist/utilities/pushDevSchema.js.map +1 -1
  379. package/dist/utilities/rawConstraint.d.ts.map +1 -1
  380. package/dist/utilities/sanitizePathSegment.d.ts.map +1 -1
  381. package/dist/utilities/validateExistingBlockIsIdentical.d.ts +1 -5
  382. package/dist/utilities/validateExistingBlockIsIdentical.d.ts.map +1 -1
  383. package/dist/utilities/validateExistingBlockIsIdentical.js.map +1 -1
  384. package/dist/utilities/validateIdentifierLength.d.ts +12 -0
  385. package/dist/utilities/validateIdentifierLength.d.ts.map +1 -0
  386. package/dist/utilities/validateIdentifierLength.js +18 -0
  387. package/dist/utilities/validateIdentifierLength.js.map +1 -0
  388. package/package.json +17 -19
  389. package/dist/find/chainMethods.d.ts +0 -20
  390. package/dist/find/chainMethods.d.ts.map +0 -1
  391. package/dist/find/chainMethods.js +0 -16
  392. package/dist/find/chainMethods.js.map +0 -1
  393. package/dist/sqlite/requireDrizzleKit.d.ts +0 -3
  394. package/dist/sqlite/requireDrizzleKit.d.ts.map +0 -1
  395. package/dist/sqlite/requireDrizzleKit.js +0 -12
  396. package/dist/sqlite/requireDrizzleKit.js.map +0 -1
  397. package/dist/utilities/isValidStringID.spec.js +0 -15
  398. package/dist/utilities/isValidStringID.spec.js.map +0 -1
@@ -0,0 +1,35 @@
1
+ import { branchChangesCollectionSlug } from 'payload';
2
+ import toSnakeCase from 'to-snake-case';
3
+ import { getPrimaryDb } from './utilities/getPrimaryDb.js';
4
+ import { getTransaction } from './utilities/getTransaction.js';
5
+ import { markWrite } from './utilities/readAfterWrite.js';
6
+ export const upsertBranchGlobalChange = async function upsertBranchGlobalChange({ branch, globalSlug, req }) {
7
+ const tableName = this.tableNameMap.get(toSnakeCase(branchChangesCollectionSlug));
8
+ const table = this.tables[tableName];
9
+ const db = getPrimaryDb(this, await getTransaction(this, req));
10
+ const now = new Date().toISOString();
11
+ await this.insert({
12
+ db,
13
+ onConflictDoUpdate: {
14
+ set: {
15
+ globalSlug
16
+ },
17
+ target: [
18
+ table.branch,
19
+ table.globalSlug
20
+ ]
21
+ },
22
+ tableName,
23
+ values: {
24
+ branch,
25
+ createdAt: now,
26
+ entityType: 'global',
27
+ globalSlug,
28
+ operation: 'update',
29
+ updatedAt: now
30
+ }
31
+ });
32
+ markWrite(this);
33
+ };
34
+
35
+ //# sourceMappingURL=upsertBranchGlobalChange.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/upsertBranchGlobalChange.ts"],"sourcesContent":["import type { UpsertBranchGlobalChange } from 'payload'\n\nimport { branchChangesCollectionSlug } from 'payload'\nimport toSnakeCase from 'to-snake-case'\n\nimport type { DrizzleAdapter } from './types.js'\n\nimport { getPrimaryDb } from './utilities/getPrimaryDb.js'\nimport { getTransaction } from './utilities/getTransaction.js'\nimport { markWrite } from './utilities/readAfterWrite.js'\n\nexport const upsertBranchGlobalChange: UpsertBranchGlobalChange =\n async function upsertBranchGlobalChange(this: DrizzleAdapter, { branch, globalSlug, req }) {\n const tableName = this.tableNameMap.get(toSnakeCase(branchChangesCollectionSlug))\n const table = this.tables[tableName]\n const db = getPrimaryDb(this, await getTransaction(this, req))\n const now = new Date().toISOString()\n\n await this.insert({\n db,\n onConflictDoUpdate: {\n set: { globalSlug },\n target: [table.branch, table.globalSlug],\n },\n tableName,\n values: {\n branch,\n createdAt: now,\n entityType: 'global',\n globalSlug,\n operation: 'update',\n updatedAt: now,\n },\n })\n\n markWrite(this)\n }\n"],"names":["branchChangesCollectionSlug","toSnakeCase","getPrimaryDb","getTransaction","markWrite","upsertBranchGlobalChange","branch","globalSlug","req","tableName","tableNameMap","get","table","tables","db","now","Date","toISOString","insert","onConflictDoUpdate","set","target","values","createdAt","entityType","operation","updatedAt"],"mappings":"AAEA,SAASA,2BAA2B,QAAQ,UAAS;AACrD,OAAOC,iBAAiB,gBAAe;AAIvC,SAASC,YAAY,QAAQ,8BAA6B;AAC1D,SAASC,cAAc,QAAQ,gCAA+B;AAC9D,SAASC,SAAS,QAAQ,gCAA+B;AAEzD,OAAO,MAAMC,2BACX,eAAeA,yBAA+C,EAAEC,MAAM,EAAEC,UAAU,EAAEC,GAAG,EAAE;IACvF,MAAMC,YAAY,IAAI,CAACC,YAAY,CAACC,GAAG,CAACV,YAAYD;IACpD,MAAMY,QAAQ,IAAI,CAACC,MAAM,CAACJ,UAAU;IACpC,MAAMK,KAAKZ,aAAa,IAAI,EAAE,MAAMC,eAAe,IAAI,EAAEK;IACzD,MAAMO,MAAM,IAAIC,OAAOC,WAAW;IAElC,MAAM,IAAI,CAACC,MAAM,CAAC;QAChBJ;QACAK,oBAAoB;YAClBC,KAAK;gBAAEb;YAAW;YAClBc,QAAQ;gBAACT,MAAMN,MAAM;gBAAEM,MAAML,UAAU;aAAC;QAC1C;QACAE;QACAa,QAAQ;YACNhB;YACAiB,WAAWR;YACXS,YAAY;YACZjB;YACAkB,WAAW;YACXC,WAAWX;QACb;IACF;IAEAX,UAAU,IAAI;AAChB,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"deleteExistingArrayRows.d.ts","sourceRoot":"","sources":["../../src/upsertRow/deleteExistingArrayRows.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAErE,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,cAAc,CAAA;IACvB,EAAE,EAAE,cAAc,CAAC,SAAS,CAAC,GAAG,kBAAkB,CAAA;IAClD,QAAQ,EAAE,OAAO,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,eAAO,MAAM,uBAAuB,GAAU,uCAK3C,IAAI,KAAG,OAAO,CAAC,IAAI,CAUrB,CAAA"}
1
+ {"version":3,"file":"deleteExistingArrayRows.d.ts","sourceRoot":"","sources":["../../src/upsertRow/deleteExistingArrayRows.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAErE,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,cAAc,CAAA;IACvB,EAAE,EAAE,cAAc,CAAC,SAAS,CAAC,GAAG,kBAAkB,CAAA;IAClD,QAAQ,EAAE,OAAO,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,eAAO,MAAM,uBAAuB,0CAKjC,IAAI,KAAG,OAAO,CAAC,IAAI,CAUrB,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"deleteExistingRowsByPath.d.ts","sourceRoot":"","sources":["../../src/upsertRow/deleteExistingRowsByPath.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAErE,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,cAAc,CAAA;IACvB,EAAE,EAAE,cAAc,CAAC,SAAS,CAAC,GAAG,kBAAkB,CAAA;IAClD,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,QAAQ,EAAE,OAAO,CAAA;IACjB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;IAC/B,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,eAAO,MAAM,wBAAwB,GAAU,iGAS5C,IAAI,KAAG,OAAO,CAAC,IAAI,CA4CrB,CAAA"}
1
+ {"version":3,"file":"deleteExistingRowsByPath.d.ts","sourceRoot":"","sources":["../../src/upsertRow/deleteExistingRowsByPath.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAErE,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,cAAc,CAAA;IACvB,EAAE,EAAE,cAAc,CAAC,SAAS,CAAC,GAAG,kBAAkB,CAAA;IAClD,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,QAAQ,EAAE,OAAO,CAAA;IACjB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;IAC/B,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,eAAO,MAAM,wBAAwB,oGASlC,IAAI,KAAG,OAAO,CAAC,IAAI,CAmDrB,CAAA"}
@@ -1,6 +1,6 @@
1
1
  import { and, eq, inArray } from 'drizzle-orm';
2
2
  export const deleteExistingRowsByPath = async ({ adapter, db, localeColumnName = '_locale', parentColumnName = '_parentID', parentID, pathColumnName = '_path', rows, tableName })=>{
3
- const localizedPathsToDelete = new Set();
3
+ const localizedPathsToDelete = new Map();
4
4
  const pathsToDelete = new Set();
5
5
  const table = adapter.tables[tableName];
6
6
  rows.forEach((row)=>{
@@ -8,24 +8,29 @@ export const deleteExistingRowsByPath = async ({ adapter, db, localeColumnName =
8
8
  const localeData = row[localeColumnName];
9
9
  if (typeof path === 'string') {
10
10
  if (typeof localeData === 'string') {
11
- localizedPathsToDelete.add(path);
11
+ const localePaths = localizedPathsToDelete.get(localeData) ?? new Set();
12
+ localePaths.add(path);
13
+ localizedPathsToDelete.set(localeData, localePaths);
12
14
  } else {
13
15
  pathsToDelete.add(path);
14
16
  }
15
17
  }
16
18
  });
17
19
  if (localizedPathsToDelete.size > 0) {
18
- const whereConstraints = [
19
- eq(table[parentColumnName], parentID)
20
- ];
21
- if (pathColumnName) {
22
- whereConstraints.push(inArray(table[pathColumnName], Array.from(localizedPathsToDelete)));
20
+ for (const [locale, localePaths] of localizedPathsToDelete){
21
+ const whereConstraints = [
22
+ eq(table[parentColumnName], parentID)
23
+ ];
24
+ if (pathColumnName) {
25
+ whereConstraints.push(inArray(table[pathColumnName], Array.from(localePaths)));
26
+ }
27
+ whereConstraints.push(eq(table[localeColumnName], locale));
28
+ await adapter.deleteWhere({
29
+ db,
30
+ tableName,
31
+ where: and(...whereConstraints)
32
+ });
23
33
  }
24
- await adapter.deleteWhere({
25
- db,
26
- tableName,
27
- where: and(...whereConstraints)
28
- });
29
34
  }
30
35
  if (pathsToDelete.size > 0) {
31
36
  const whereConstraints = [
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/upsertRow/deleteExistingRowsByPath.ts"],"sourcesContent":["import { and, eq, inArray } from 'drizzle-orm'\n\nimport type { DrizzleAdapter, DrizzleTransaction } from '../types.js'\n\ntype Args = {\n adapter: DrizzleAdapter\n db: DrizzleAdapter['drizzle'] | DrizzleTransaction\n localeColumnName?: string\n parentColumnName?: string\n parentID: unknown\n pathColumnName?: string\n rows: Record<string, unknown>[]\n tableName: string\n}\n\nexport const deleteExistingRowsByPath = async ({\n adapter,\n db,\n localeColumnName = '_locale',\n parentColumnName = '_parentID',\n parentID,\n pathColumnName = '_path',\n rows,\n tableName,\n}: Args): Promise<void> => {\n const localizedPathsToDelete = new Set<string>()\n const pathsToDelete = new Set<string>()\n const table = adapter.tables[tableName]\n\n rows.forEach((row) => {\n const path = row[pathColumnName]\n const localeData = row[localeColumnName]\n if (typeof path === 'string') {\n if (typeof localeData === 'string') {\n localizedPathsToDelete.add(path)\n } else {\n pathsToDelete.add(path)\n }\n }\n })\n\n if (localizedPathsToDelete.size > 0) {\n const whereConstraints = [eq(table[parentColumnName], parentID)]\n\n if (pathColumnName) {\n whereConstraints.push(inArray(table[pathColumnName], Array.from(localizedPathsToDelete)))\n }\n\n await adapter.deleteWhere({\n db,\n tableName,\n where: and(...whereConstraints),\n })\n }\n\n if (pathsToDelete.size > 0) {\n const whereConstraints = [eq(table[parentColumnName], parentID)]\n\n if (pathColumnName) {\n whereConstraints.push(inArray(table[pathColumnName], Array.from(pathsToDelete)))\n }\n\n await adapter.deleteWhere({\n db,\n tableName,\n where: and(...whereConstraints),\n })\n }\n}\n"],"names":["and","eq","inArray","deleteExistingRowsByPath","adapter","db","localeColumnName","parentColumnName","parentID","pathColumnName","rows","tableName","localizedPathsToDelete","Set","pathsToDelete","table","tables","forEach","row","path","localeData","add","size","whereConstraints","push","Array","from","deleteWhere","where"],"mappings":"AAAA,SAASA,GAAG,EAAEC,EAAE,EAAEC,OAAO,QAAQ,cAAa;AAe9C,OAAO,MAAMC,2BAA2B,OAAO,EAC7CC,OAAO,EACPC,EAAE,EACFC,mBAAmB,SAAS,EAC5BC,mBAAmB,WAAW,EAC9BC,QAAQ,EACRC,iBAAiB,OAAO,EACxBC,IAAI,EACJC,SAAS,EACJ;IACL,MAAMC,yBAAyB,IAAIC;IACnC,MAAMC,gBAAgB,IAAID;IAC1B,MAAME,QAAQX,QAAQY,MAAM,CAACL,UAAU;IAEvCD,KAAKO,OAAO,CAAC,CAACC;QACZ,MAAMC,OAAOD,GAAG,CAACT,eAAe;QAChC,MAAMW,aAAaF,GAAG,CAACZ,iBAAiB;QACxC,IAAI,OAAOa,SAAS,UAAU;YAC5B,IAAI,OAAOC,eAAe,UAAU;gBAClCR,uBAAuBS,GAAG,CAACF;YAC7B,OAAO;gBACLL,cAAcO,GAAG,CAACF;YACpB;QACF;IACF;IAEA,IAAIP,uBAAuBU,IAAI,GAAG,GAAG;QACnC,MAAMC,mBAAmB;YAACtB,GAAGc,KAAK,CAACR,iBAAiB,EAAEC;SAAU;QAEhE,IAAIC,gBAAgB;YAClBc,iBAAiBC,IAAI,CAACtB,QAAQa,KAAK,CAACN,eAAe,EAAEgB,MAAMC,IAAI,CAACd;QAClE;QAEA,MAAMR,QAAQuB,WAAW,CAAC;YACxBtB;YACAM;YACAiB,OAAO5B,OAAOuB;QAChB;IACF;IAEA,IAAIT,cAAcQ,IAAI,GAAG,GAAG;QAC1B,MAAMC,mBAAmB;YAACtB,GAAGc,KAAK,CAACR,iBAAiB,EAAEC;SAAU;QAEhE,IAAIC,gBAAgB;YAClBc,iBAAiBC,IAAI,CAACtB,QAAQa,KAAK,CAACN,eAAe,EAAEgB,MAAMC,IAAI,CAACZ;QAClE;QAEA,MAAMV,QAAQuB,WAAW,CAAC;YACxBtB;YACAM;YACAiB,OAAO5B,OAAOuB;QAChB;IACF;AACF,EAAC"}
1
+ {"version":3,"sources":["../../src/upsertRow/deleteExistingRowsByPath.ts"],"sourcesContent":["import { and, eq, inArray } from 'drizzle-orm'\n\nimport type { DrizzleAdapter, DrizzleTransaction } from '../types.js'\n\ntype Args = {\n adapter: DrizzleAdapter\n db: DrizzleAdapter['drizzle'] | DrizzleTransaction\n localeColumnName?: string\n parentColumnName?: string\n parentID: unknown\n pathColumnName?: string\n rows: Record<string, unknown>[]\n tableName: string\n}\n\nexport const deleteExistingRowsByPath = async ({\n adapter,\n db,\n localeColumnName = '_locale',\n parentColumnName = '_parentID',\n parentID,\n pathColumnName = '_path',\n rows,\n tableName,\n}: Args): Promise<void> => {\n const localizedPathsToDelete = new Map<string, Set<string>>()\n const pathsToDelete = new Set<string>()\n const table = adapter.tables[tableName]\n\n rows.forEach((row) => {\n const path = row[pathColumnName]\n const localeData = row[localeColumnName]\n if (typeof path === 'string') {\n if (typeof localeData === 'string') {\n const localePaths = localizedPathsToDelete.get(localeData) ?? new Set<string>()\n\n localePaths.add(path)\n localizedPathsToDelete.set(localeData, localePaths)\n } else {\n pathsToDelete.add(path)\n }\n }\n })\n\n if (localizedPathsToDelete.size > 0) {\n for (const [locale, localePaths] of localizedPathsToDelete) {\n const whereConstraints = [eq(table[parentColumnName], parentID)]\n\n if (pathColumnName) {\n whereConstraints.push(inArray(table[pathColumnName], Array.from(localePaths)))\n }\n\n whereConstraints.push(eq(table[localeColumnName], locale))\n\n await adapter.deleteWhere({\n db,\n tableName,\n where: and(...whereConstraints),\n })\n }\n }\n\n if (pathsToDelete.size > 0) {\n const whereConstraints = [eq(table[parentColumnName], parentID)]\n\n if (pathColumnName) {\n whereConstraints.push(inArray(table[pathColumnName], Array.from(pathsToDelete)))\n }\n\n await adapter.deleteWhere({\n db,\n tableName,\n where: and(...whereConstraints),\n })\n }\n}\n"],"names":["and","eq","inArray","deleteExistingRowsByPath","adapter","db","localeColumnName","parentColumnName","parentID","pathColumnName","rows","tableName","localizedPathsToDelete","Map","pathsToDelete","Set","table","tables","forEach","row","path","localeData","localePaths","get","add","set","size","locale","whereConstraints","push","Array","from","deleteWhere","where"],"mappings":"AAAA,SAASA,GAAG,EAAEC,EAAE,EAAEC,OAAO,QAAQ,cAAa;AAe9C,OAAO,MAAMC,2BAA2B,OAAO,EAC7CC,OAAO,EACPC,EAAE,EACFC,mBAAmB,SAAS,EAC5BC,mBAAmB,WAAW,EAC9BC,QAAQ,EACRC,iBAAiB,OAAO,EACxBC,IAAI,EACJC,SAAS,EACJ;IACL,MAAMC,yBAAyB,IAAIC;IACnC,MAAMC,gBAAgB,IAAIC;IAC1B,MAAMC,QAAQZ,QAAQa,MAAM,CAACN,UAAU;IAEvCD,KAAKQ,OAAO,CAAC,CAACC;QACZ,MAAMC,OAAOD,GAAG,CAACV,eAAe;QAChC,MAAMY,aAAaF,GAAG,CAACb,iBAAiB;QACxC,IAAI,OAAOc,SAAS,UAAU;YAC5B,IAAI,OAAOC,eAAe,UAAU;gBAClC,MAAMC,cAAcV,uBAAuBW,GAAG,CAACF,eAAe,IAAIN;gBAElEO,YAAYE,GAAG,CAACJ;gBAChBR,uBAAuBa,GAAG,CAACJ,YAAYC;YACzC,OAAO;gBACLR,cAAcU,GAAG,CAACJ;YACpB;QACF;IACF;IAEA,IAAIR,uBAAuBc,IAAI,GAAG,GAAG;QACnC,KAAK,MAAM,CAACC,QAAQL,YAAY,IAAIV,uBAAwB;YAC1D,MAAMgB,mBAAmB;gBAAC3B,GAAGe,KAAK,CAACT,iBAAiB,EAAEC;aAAU;YAEhE,IAAIC,gBAAgB;gBAClBmB,iBAAiBC,IAAI,CAAC3B,QAAQc,KAAK,CAACP,eAAe,EAAEqB,MAAMC,IAAI,CAACT;YAClE;YAEAM,iBAAiBC,IAAI,CAAC5B,GAAGe,KAAK,CAACV,iBAAiB,EAAEqB;YAElD,MAAMvB,QAAQ4B,WAAW,CAAC;gBACxB3B;gBACAM;gBACAsB,OAAOjC,OAAO4B;YAChB;QACF;IACF;IAEA,IAAId,cAAcY,IAAI,GAAG,GAAG;QAC1B,MAAME,mBAAmB;YAAC3B,GAAGe,KAAK,CAACT,iBAAiB,EAAEC;SAAU;QAEhE,IAAIC,gBAAgB;YAClBmB,iBAAiBC,IAAI,CAAC3B,QAAQc,KAAK,CAACP,eAAe,EAAEqB,MAAMC,IAAI,CAACjB;QAClE;QAEA,MAAMV,QAAQ4B,WAAW,CAAC;YACxB3B;YACAM;YACAsB,OAAOjC,OAAO4B;QAChB;IACF;AACF,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"handleUpsertError.d.ts","sourceRoot":"","sources":["../../src/upsertRow/handleUpsertError.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAI7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEjD,KAAK,qBAAqB,GAAG;IAC3B,OAAO,EAAE,cAAc,CAAA;IACvB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,KAAK,EAAE,OAAO,CAAA;IACd,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,GAAG,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAA;IAC7B,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,GAAI,kFAQ/B,qBAAqB,KAAG,KAiE1B,CAAA"}
1
+ {"version":3,"file":"handleUpsertError.d.ts","sourceRoot":"","sources":["../../src/upsertRow/handleUpsertError.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAI7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEjD,KAAK,qBAAqB,GAAG;IAC3B,OAAO,EAAE,cAAc,CAAA;IACvB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,KAAK,EAAE,OAAO,CAAA;IACd,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,GAAG,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAA;IAC7B,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,qFAQ3B,qBAAqB,KAAG,KAkE1B,CAAA"}
@@ -51,7 +51,8 @@ import { ValidationError } from 'payload';
51
51
  errors: [
52
52
  {
53
53
  message: req?.t ? req.t('error:valueMustBeUnique') : 'Value must be unique',
54
- path: fieldName
54
+ path: fieldName,
55
+ tableName
55
56
  }
56
57
  ],
57
58
  global: globalSlug,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/upsertRow/handleUpsertError.ts"],"sourcesContent":["import type { PayloadRequest } from 'payload'\n\nimport { ValidationError } from 'payload'\n\nimport type { DrizzleAdapter } from '../types.js'\n\ntype HandleUpsertErrorArgs = {\n adapter: DrizzleAdapter\n collectionSlug?: string\n error: unknown\n globalSlug?: string\n id?: number | string\n req?: Partial<PayloadRequest>\n tableName: string\n}\n\n/**\n * Handles unique constraint violation errors from PostgreSQL and SQLite,\n * converting them to Payload ValidationErrors.\n * Re-throws non-constraint errors unchanged.\n */\nexport const handleUpsertError = ({\n id,\n adapter,\n collectionSlug,\n error: caughtError,\n globalSlug,\n req,\n tableName,\n}: HandleUpsertErrorArgs): never => {\n let error: any = caughtError\n if (typeof caughtError === 'object' && caughtError !== null && 'cause' in caughtError) {\n error = caughtError.cause\n }\n\n // PostgreSQL: 23505, SQLite: SQLITE_CONSTRAINT_UNIQUE\n if (error?.code === '23505' || error?.code === 'SQLITE_CONSTRAINT_UNIQUE') {\n let fieldName: null | string = null\n\n if (error.code === '23505') {\n // PostgreSQL - extract field name from constraint\n if (adapter.fieldConstraints?.[tableName]?.[error.constraint]) {\n fieldName = adapter.fieldConstraints[tableName][error.constraint]\n } else {\n const replacement = `${tableName}_`\n if (error.constraint?.includes(replacement)) {\n const replacedConstraint = error.constraint.replace(replacement, '')\n if (replacedConstraint && adapter.fieldConstraints[tableName]?.[replacedConstraint]) {\n fieldName = adapter.fieldConstraints[tableName][replacedConstraint]\n }\n }\n }\n\n if (!fieldName && error.detail) {\n // Extract from detail: \"Key (field)=(value) already exists.\"\n const regex = /Key \\(([^)]+)\\)=\\(([^)]+)\\)/\n const match: string[] = error.detail.match(regex)\n if (match && match[1]) {\n fieldName = match[1]\n }\n }\n } else if (error.code === 'SQLITE_CONSTRAINT_UNIQUE') {\n // SQLite - extract from message: \"UNIQUE constraint failed: table.field[, table.field2, ...]\"\n const regex = /UNIQUE constraint failed: ([^.]+)\\.([^.,]+)/\n const match: string[] = error.message?.match(regex)\n if (match && match[2]) {\n if (adapter.fieldConstraints[tableName]) {\n fieldName = adapter.fieldConstraints[tableName][`${match[2]}_idx`]\n }\n if (!fieldName) {\n fieldName = match[2]\n }\n }\n }\n\n throw new ValidationError(\n {\n id,\n collection: collectionSlug,\n errors: [\n {\n message: req?.t ? req.t('error:valueMustBeUnique') : 'Value must be unique',\n path: fieldName,\n },\n ],\n global: globalSlug,\n req,\n },\n req?.t,\n )\n }\n\n // Re-throw non-constraint errors\n throw caughtError\n}\n"],"names":["ValidationError","handleUpsertError","id","adapter","collectionSlug","error","caughtError","globalSlug","req","tableName","cause","code","fieldName","fieldConstraints","constraint","replacement","includes","replacedConstraint","replace","detail","regex","match","message","collection","errors","t","path","global"],"mappings":"AAEA,SAASA,eAAe,QAAQ,UAAS;AAczC;;;;CAIC,GACD,OAAO,MAAMC,oBAAoB,CAAC,EAChCC,EAAE,EACFC,OAAO,EACPC,cAAc,EACdC,OAAOC,WAAW,EAClBC,UAAU,EACVC,GAAG,EACHC,SAAS,EACa;IACtB,IAAIJ,QAAaC;IACjB,IAAI,OAAOA,gBAAgB,YAAYA,gBAAgB,QAAQ,WAAWA,aAAa;QACrFD,QAAQC,YAAYI,KAAK;IAC3B;IAEA,sDAAsD;IACtD,IAAIL,OAAOM,SAAS,WAAWN,OAAOM,SAAS,4BAA4B;QACzE,IAAIC,YAA2B;QAE/B,IAAIP,MAAMM,IAAI,KAAK,SAAS;YAC1B,kDAAkD;YAClD,IAAIR,QAAQU,gBAAgB,EAAE,CAACJ,UAAU,EAAE,CAACJ,MAAMS,UAAU,CAAC,EAAE;gBAC7DF,YAAYT,QAAQU,gBAAgB,CAACJ,UAAU,CAACJ,MAAMS,UAAU,CAAC;YACnE,OAAO;gBACL,MAAMC,cAAc,GAAGN,UAAU,CAAC,CAAC;gBACnC,IAAIJ,MAAMS,UAAU,EAAEE,SAASD,cAAc;oBAC3C,MAAME,qBAAqBZ,MAAMS,UAAU,CAACI,OAAO,CAACH,aAAa;oBACjE,IAAIE,sBAAsBd,QAAQU,gBAAgB,CAACJ,UAAU,EAAE,CAACQ,mBAAmB,EAAE;wBACnFL,YAAYT,QAAQU,gBAAgB,CAACJ,UAAU,CAACQ,mBAAmB;oBACrE;gBACF;YACF;YAEA,IAAI,CAACL,aAAaP,MAAMc,MAAM,EAAE;gBAC9B,6DAA6D;gBAC7D,MAAMC,QAAQ;gBACd,MAAMC,QAAkBhB,MAAMc,MAAM,CAACE,KAAK,CAACD;gBAC3C,IAAIC,SAASA,KAAK,CAAC,EAAE,EAAE;oBACrBT,YAAYS,KAAK,CAAC,EAAE;gBACtB;YACF;QACF,OAAO,IAAIhB,MAAMM,IAAI,KAAK,4BAA4B;YACpD,8FAA8F;YAC9F,MAAMS,QAAQ;YACd,MAAMC,QAAkBhB,MAAMiB,OAAO,EAAED,MAAMD;YAC7C,IAAIC,SAASA,KAAK,CAAC,EAAE,EAAE;gBACrB,IAAIlB,QAAQU,gBAAgB,CAACJ,UAAU,EAAE;oBACvCG,YAAYT,QAAQU,gBAAgB,CAACJ,UAAU,CAAC,GAAGY,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;gBACpE;gBACA,IAAI,CAACT,WAAW;oBACdA,YAAYS,KAAK,CAAC,EAAE;gBACtB;YACF;QACF;QAEA,MAAM,IAAIrB,gBACR;YACEE;YACAqB,YAAYnB;YACZoB,QAAQ;gBACN;oBACEF,SAASd,KAAKiB,IAAIjB,IAAIiB,CAAC,CAAC,6BAA6B;oBACrDC,MAAMd;gBACR;aACD;YACDe,QAAQpB;YACRC;QACF,GACAA,KAAKiB;IAET;IAEA,iCAAiC;IACjC,MAAMnB;AACR,EAAC"}
1
+ {"version":3,"sources":["../../src/upsertRow/handleUpsertError.ts"],"sourcesContent":["import type { PayloadRequest } from 'payload'\n\nimport { ValidationError } from 'payload'\n\nimport type { DrizzleAdapter } from '../types.js'\n\ntype HandleUpsertErrorArgs = {\n adapter: DrizzleAdapter\n collectionSlug?: string\n error: unknown\n globalSlug?: string\n id?: number | string\n req?: Partial<PayloadRequest>\n tableName: string\n}\n\n/**\n * Handles unique constraint violation errors from PostgreSQL and SQLite,\n * converting them to Payload ValidationErrors.\n * Re-throws non-constraint errors unchanged.\n */\nexport const handleUpsertError = ({\n id,\n adapter,\n collectionSlug,\n error: caughtError,\n globalSlug,\n req,\n tableName,\n}: HandleUpsertErrorArgs): never => {\n let error: any = caughtError\n if (typeof caughtError === 'object' && caughtError !== null && 'cause' in caughtError) {\n error = caughtError.cause\n }\n\n // PostgreSQL: 23505, SQLite: SQLITE_CONSTRAINT_UNIQUE\n if (error?.code === '23505' || error?.code === 'SQLITE_CONSTRAINT_UNIQUE') {\n let fieldName: null | string = null\n\n if (error.code === '23505') {\n // PostgreSQL - extract field name from constraint\n if (adapter.fieldConstraints?.[tableName]?.[error.constraint]) {\n fieldName = adapter.fieldConstraints[tableName][error.constraint]\n } else {\n const replacement = `${tableName}_`\n if (error.constraint?.includes(replacement)) {\n const replacedConstraint = error.constraint.replace(replacement, '')\n if (replacedConstraint && adapter.fieldConstraints[tableName]?.[replacedConstraint]) {\n fieldName = adapter.fieldConstraints[tableName][replacedConstraint]\n }\n }\n }\n\n if (!fieldName && error.detail) {\n // Extract from detail: \"Key (field)=(value) already exists.\"\n const regex = /Key \\(([^)]+)\\)=\\(([^)]+)\\)/\n const match: string[] = error.detail.match(regex)\n if (match && match[1]) {\n fieldName = match[1]\n }\n }\n } else if (error.code === 'SQLITE_CONSTRAINT_UNIQUE') {\n // SQLite - extract from message: \"UNIQUE constraint failed: table.field[, table.field2, ...]\"\n const regex = /UNIQUE constraint failed: ([^.]+)\\.([^.,]+)/\n const match: string[] = error.message?.match(regex)\n if (match && match[2]) {\n if (adapter.fieldConstraints[tableName]) {\n fieldName = adapter.fieldConstraints[tableName][`${match[2]}_idx`]\n }\n if (!fieldName) {\n fieldName = match[2]\n }\n }\n }\n\n throw new ValidationError(\n {\n id,\n collection: collectionSlug,\n errors: [\n {\n message: req?.t ? req.t('error:valueMustBeUnique') : 'Value must be unique',\n path: fieldName,\n tableName,\n },\n ],\n global: globalSlug,\n req,\n },\n req?.t,\n )\n }\n\n // Re-throw non-constraint errors\n throw caughtError\n}\n"],"names":["ValidationError","handleUpsertError","id","adapter","collectionSlug","error","caughtError","globalSlug","req","tableName","cause","code","fieldName","fieldConstraints","constraint","replacement","includes","replacedConstraint","replace","detail","regex","match","message","collection","errors","t","path","global"],"mappings":"AAEA,SAASA,eAAe,QAAQ,UAAS;AAczC;;;;CAIC,GACD,OAAO,MAAMC,oBAAoB,CAAC,EAChCC,EAAE,EACFC,OAAO,EACPC,cAAc,EACdC,OAAOC,WAAW,EAClBC,UAAU,EACVC,GAAG,EACHC,SAAS,EACa;IACtB,IAAIJ,QAAaC;IACjB,IAAI,OAAOA,gBAAgB,YAAYA,gBAAgB,QAAQ,WAAWA,aAAa;QACrFD,QAAQC,YAAYI,KAAK;IAC3B;IAEA,sDAAsD;IACtD,IAAIL,OAAOM,SAAS,WAAWN,OAAOM,SAAS,4BAA4B;QACzE,IAAIC,YAA2B;QAE/B,IAAIP,MAAMM,IAAI,KAAK,SAAS;YAC1B,kDAAkD;YAClD,IAAIR,QAAQU,gBAAgB,EAAE,CAACJ,UAAU,EAAE,CAACJ,MAAMS,UAAU,CAAC,EAAE;gBAC7DF,YAAYT,QAAQU,gBAAgB,CAACJ,UAAU,CAACJ,MAAMS,UAAU,CAAC;YACnE,OAAO;gBACL,MAAMC,cAAc,GAAGN,UAAU,CAAC,CAAC;gBACnC,IAAIJ,MAAMS,UAAU,EAAEE,SAASD,cAAc;oBAC3C,MAAME,qBAAqBZ,MAAMS,UAAU,CAACI,OAAO,CAACH,aAAa;oBACjE,IAAIE,sBAAsBd,QAAQU,gBAAgB,CAACJ,UAAU,EAAE,CAACQ,mBAAmB,EAAE;wBACnFL,YAAYT,QAAQU,gBAAgB,CAACJ,UAAU,CAACQ,mBAAmB;oBACrE;gBACF;YACF;YAEA,IAAI,CAACL,aAAaP,MAAMc,MAAM,EAAE;gBAC9B,6DAA6D;gBAC7D,MAAMC,QAAQ;gBACd,MAAMC,QAAkBhB,MAAMc,MAAM,CAACE,KAAK,CAACD;gBAC3C,IAAIC,SAASA,KAAK,CAAC,EAAE,EAAE;oBACrBT,YAAYS,KAAK,CAAC,EAAE;gBACtB;YACF;QACF,OAAO,IAAIhB,MAAMM,IAAI,KAAK,4BAA4B;YACpD,8FAA8F;YAC9F,MAAMS,QAAQ;YACd,MAAMC,QAAkBhB,MAAMiB,OAAO,EAAED,MAAMD;YAC7C,IAAIC,SAASA,KAAK,CAAC,EAAE,EAAE;gBACrB,IAAIlB,QAAQU,gBAAgB,CAACJ,UAAU,EAAE;oBACvCG,YAAYT,QAAQU,gBAAgB,CAACJ,UAAU,CAAC,GAAGY,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;gBACpE;gBACA,IAAI,CAACT,WAAW;oBACdA,YAAYS,KAAK,CAAC,EAAE;gBACtB;YACF;QACF;QAEA,MAAM,IAAIrB,gBACR;YACEE;YACAqB,YAAYnB;YACZoB,QAAQ;gBACN;oBACEF,SAASd,KAAKiB,IAAIjB,IAAIiB,CAAC,CAAC,6BAA6B;oBACrDC,MAAMd;oBACNH;gBACF;aACD;YACDkB,QAAQpB;YACRC;QACF,GACAA,KAAKiB;IAET;IAEA,iCAAiC;IACjC,MAAMnB;AACR,EAAC"}
@@ -7,5 +7,5 @@ import type { Args } from './types.js';
7
7
  *
8
8
  * adapter function replaces the entire row and does not support partial updates.
9
9
  */
10
- export declare const upsertRow: <T extends Record<string, unknown> | TypeWithID>({ id, adapter, collectionSlug, data, db, fields, globalSlug, ignoreResult, customID, joinQuery: _joinQuery, operation, path, req, select, tableName, upsertTarget, where, }: Args) => Promise<T>;
10
+ export declare const upsertRow: <T extends Record<string, unknown> | TypeWithID>({ id, adapter, collectionSlug, data, db, fields, globalSlug, ignoreResult, customID, joinQuery: _joinQuery, operation, path, req, select, tableName, upsertConflictData, upsertTarget, where, }: Args) => Promise<null | T>;
11
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/upsertRow/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAKzC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAqBtC;;;;;;GAMG;AACH,eAAO,MAAM,SAAS,GAAU,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,UAAU,EAAE,6KAqB7E,IAAI,KAAG,OAAO,CAAC,CAAC,CAgtBlB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/upsertRow/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAMzC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAqBtC;;;;;;GAMG;AACH,eAAO,MAAM,SAAS,GAAU,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,UAAU,mMAsB3E,IAAI,KAAG,OAAO,CAAC,IAAI,GAAG,CAAC,CA01BzB,CAAA"}
@@ -1,4 +1,5 @@
1
1
  import { and, desc, eq, isNull, or } from 'drizzle-orm';
2
+ import { branchField, MAIN_BRANCH } from 'payload';
2
3
  import { buildFindManyArgs } from '../find/buildFindManyArgs.js';
3
4
  import { transform } from '../transform/read/index.js';
4
5
  import { transformForWrite } from '../transform/write/index.js';
@@ -17,7 +18,7 @@ import { shouldUseOptimizedUpsertRow } from './shouldUseOptimizedUpsertRow.js';
17
18
  */ export const upsertRow = async ({ id, adapter, collectionSlug, data, db, fields, globalSlug, ignoreResult, // TODO:
18
19
  // When we support joins for write operations (create/update) - pass collectionSlug to the buildFindManyArgs
19
20
  // Make a new argument in upsertRow.ts and pass the slug from every operation.
20
- customID, joinQuery: _joinQuery, operation, path = '', req, select, tableName, upsertTarget, where })=>{
21
+ customID, joinQuery: _joinQuery, operation, path = '', req, select, tableName, upsertConflictData, upsertTarget, where })=>{
21
22
  if (operation === 'create' && !data.createdAt) {
22
23
  data.createdAt = new Date().toISOString();
23
24
  }
@@ -40,6 +41,7 @@ customID, joinQuery: _joinQuery, operation, path = '', req, select, tableName, u
40
41
  const { row } = transformedForWrite;
41
42
  const { arraysToPush } = transformedForWrite;
42
43
  const drizzle = db;
44
+ const updateWhere = where ? and(eq(adapter.tables[tableName].id, id), where) : eq(adapter.tables[tableName].id, id);
43
45
  // First, handle $push arrays
44
46
  if (arraysToPush && Object.keys(arraysToPush)?.length) {
45
47
  await insertArrays({
@@ -65,7 +67,7 @@ customID, joinQuery: _joinQuery, operation, path = '', req, select, tableName, u
65
67
  if (hasDataToUpdate) {
66
68
  // Only update row if there is something to update.
67
69
  // Example: if the data only consists of a single $push, calling insertArrays is enough - we don't need to update the row.
68
- await drizzle.update(adapter.tables[tableName]).set(row).where(eq(adapter.tables[tableName].id, id));
70
+ await drizzle.update(adapter.tables[tableName]).set(row).where(updateWhere);
69
71
  }
70
72
  return ignoreResult === 'idOnly' ? {
71
73
  id
@@ -83,8 +85,11 @@ customID, joinQuery: _joinQuery, operation, path = '', req, select, tableName, u
83
85
  const hasOnlyColumns = Object.keys(findManyArgs.columns || {}).length > 0;
84
86
  if (!hasDataToUpdate) {
85
87
  // Nothing to update => just fetch current row and return
86
- findManyArgs.where = eq(adapter.tables[tableName].id, insertedRow.id);
88
+ findManyArgs.where = updateWhere;
87
89
  const doc = await db.query[tableName].findFirst(findManyArgs);
90
+ if (!doc) {
91
+ return null;
92
+ }
88
93
  return transform({
89
94
  adapter,
90
95
  config: adapter.payload.config,
@@ -105,7 +110,10 @@ customID, joinQuery: _joinQuery, operation, path = '', req, select, tableName, u
105
110
  }
106
111
  }
107
112
  }
108
- const docs = await drizzle.update(adapter.tables[tableName]).set(row).where(eq(adapter.tables[tableName].id, id)).returning(Object.keys(selectedFields).length ? selectedFields : undefined);
113
+ const docs = await drizzle.update(adapter.tables[tableName]).set(row).where(updateWhere).returning(Object.keys(selectedFields).length ? selectedFields : undefined);
114
+ if (!docs[0]) {
115
+ return null;
116
+ }
109
117
  return transform({
110
118
  adapter,
111
119
  config: adapter.payload.config,
@@ -116,7 +124,13 @@ customID, joinQuery: _joinQuery, operation, path = '', req, select, tableName, u
116
124
  });
117
125
  }
118
126
  // DB Update that needs the result, potentially with joins => need to update first, then find. returning() does not work with joins.
119
- await drizzle.update(adapter.tables[tableName]).set(row).where(eq(adapter.tables[tableName].id, id));
127
+ const docs = await drizzle.update(adapter.tables[tableName]).set(row).where(updateWhere).returning({
128
+ id: adapter.tables[tableName].id
129
+ });
130
+ if (!docs[0]) {
131
+ return null;
132
+ }
133
+ insertedRow = docs[0];
120
134
  findManyArgs.where = eq(adapter.tables[tableName].id, insertedRow.id);
121
135
  const doc = await db.query[tableName].findFirst(findManyArgs);
122
136
  return transform({
@@ -149,6 +163,16 @@ customID, joinQuery: _joinQuery, operation, path = '', req, select, tableName, u
149
163
  path,
150
164
  tableName
151
165
  });
166
+ const conflictWrite = upsertConflictData ? transformForWrite({
167
+ adapter,
168
+ data: upsertConflictData,
169
+ enableAtomicWrites: false,
170
+ fields,
171
+ path,
172
+ tableName
173
+ }) : rowToInsert;
174
+ let nestedWrite = rowToInsert;
175
+ let isUpdatingAfterInsertConflict = false;
152
176
  if (customID) {
153
177
  rowToInsert.row.id = customID;
154
178
  }
@@ -157,27 +181,70 @@ customID, joinQuery: _joinQuery, operation, path = '', req, select, tableName, u
157
181
  if (operation === 'update') {
158
182
  const target = upsertTarget || adapter.tables[tableName].id;
159
183
  // Check if we only have relationship operations and no main row data to update
160
- // Exclude timestamp-only updates when we only have relationship operations
184
+ // Exclude timestamp-only updates when we only have relationship operations.
185
+ // Localized field updates live in the `_locales` table, so the main row may only
186
+ // contain timestamps — in that case the parent row's `updatedAt` must still bump.
161
187
  const rowKeys = Object.keys(rowToInsert.row);
162
- const hasMainRowData = rowKeys.length > 0 && !rowKeys.every((key)=>key === 'updatedAt' || key === 'createdAt');
188
+ const hasLocalizedData = Object.keys(rowToInsert.locales).length > 0;
189
+ const hasMainRowData = rowKeys.length > 0 && (hasLocalizedData || !rowKeys.every((key)=>key === 'updatedAt' || key === 'createdAt'));
163
190
  if (hasMainRowData) {
164
191
  if (id) {
165
192
  rowToInsert.row.id = id;
166
193
  [insertedRow] = await adapter.insert({
167
194
  db,
168
- onConflictDoUpdate: {
169
- set: rowToInsert.row,
195
+ onConflictDoUpdate: where ? {
196
+ set: conflictWrite.row,
197
+ target,
198
+ where
199
+ } : {
200
+ set: conflictWrite.row,
170
201
  target
171
202
  },
172
203
  tableName,
173
204
  values: rowToInsert.row
174
205
  });
206
+ } else if (upsertConflictData && upsertTarget) {
207
+ // The parent conflict is atomic. Child-table replacements are serialized only
208
+ // when the caller's transaction spans this complete upsert.
209
+ const targetKey = Object.entries(adapter.tables[tableName]).find(([, column])=>column === target)?.[0];
210
+ const targetValue = targetKey ? rowToInsert.row[targetKey] : undefined;
211
+ if (!targetKey || typeof targetValue === 'undefined') {
212
+ throw new Error(`Could not resolve the upsert target value for table "${tableName}".`);
213
+ }
214
+ for(let attempt = 0; attempt < 10; attempt++){
215
+ ;
216
+ [insertedRow] = await adapter.insert({
217
+ db,
218
+ onConflictDoNothing: {
219
+ target
220
+ },
221
+ tableName,
222
+ values: rowToInsert.row
223
+ });
224
+ if (insertedRow) {
225
+ break;
226
+ }
227
+ const updateWhere = where ? and(eq(target, targetValue), where) : eq(target, targetValue);
228
+ const updatedRows = await db.update(adapter.tables[tableName]).set(conflictWrite.row).where(updateWhere).returning();
229
+ if (updatedRows[0]) {
230
+ insertedRow = updatedRows[0];
231
+ nestedWrite = conflictWrite;
232
+ isUpdatingAfterInsertConflict = true;
233
+ break;
234
+ }
235
+ if (where) {
236
+ return null;
237
+ }
238
+ }
239
+ if (!insertedRow) {
240
+ throw new Error(`Could not upsert a stable row in table "${tableName}".`);
241
+ }
175
242
  } else {
176
243
  ;
177
244
  [insertedRow] = await adapter.insert({
178
245
  db,
179
246
  onConflictDoUpdate: {
180
- set: rowToInsert.row,
247
+ set: conflictWrite.row,
181
248
  target,
182
249
  where
183
250
  },
@@ -185,6 +252,9 @@ customID, joinQuery: _joinQuery, operation, path = '', req, select, tableName, u
185
252
  values: rowToInsert.row
186
253
  });
187
254
  }
255
+ if (!insertedRow) {
256
+ return null;
257
+ }
188
258
  } else {
189
259
  // No main row data to update, just use the existing ID
190
260
  insertedRow = {
@@ -208,39 +278,44 @@ customID, joinQuery: _joinQuery, operation, path = '', req, select, tableName, u
208
278
  const numbersToInsert = [];
209
279
  const blocksToInsert = {};
210
280
  const selectsToInsert = {};
281
+ const localeTableName = `${tableName}${adapter.localesSuffix}`;
282
+ const shouldStampLocaleBranch = Boolean(adapter.rawTables[localeTableName]?.columns[branchField]);
211
283
  // If there are locale rows with data, add the parent and locale to each
212
- if (Object.keys(rowToInsert.locales).length > 0) {
213
- Object.entries(rowToInsert.locales).forEach(([locale, localeRow])=>{
284
+ if (Object.keys(nestedWrite.locales).length > 0) {
285
+ Object.entries(nestedWrite.locales).forEach(([locale, localeRow])=>{
214
286
  localeRow._parentID = insertedRow.id;
215
287
  localeRow._locale = locale;
288
+ if (shouldStampLocaleBranch) {
289
+ localeRow[branchField] = insertedRow[branchField] ?? data[branchField] ?? MAIN_BRANCH;
290
+ }
216
291
  localesToInsert.push(localeRow);
217
292
  });
218
293
  }
219
294
  // If there are relationships, add parent to each
220
- if (rowToInsert.relationships.length > 0) {
221
- rowToInsert.relationships.forEach((relation)=>{
295
+ if (nestedWrite.relationships.length > 0) {
296
+ nestedWrite.relationships.forEach((relation)=>{
222
297
  relation.parent = insertedRow.id;
223
298
  relationsToInsert.push(relation);
224
299
  });
225
300
  }
226
301
  // If there are texts, add parent to each
227
- if (rowToInsert.texts.length > 0) {
228
- rowToInsert.texts.forEach((textRow)=>{
302
+ if (nestedWrite.texts.length > 0) {
303
+ nestedWrite.texts.forEach((textRow)=>{
229
304
  textRow.parent = insertedRow.id;
230
305
  textsToInsert.push(textRow);
231
306
  });
232
307
  }
233
308
  // If there are numbers, add parent to each
234
- if (rowToInsert.numbers.length > 0) {
235
- rowToInsert.numbers.forEach((numberRow)=>{
309
+ if (nestedWrite.numbers.length > 0) {
310
+ nestedWrite.numbers.forEach((numberRow)=>{
236
311
  numberRow.parent = insertedRow.id;
237
312
  numbersToInsert.push(numberRow);
238
313
  });
239
314
  }
240
315
  // If there are selects, add parent to each, and then
241
316
  // store by table name and rows
242
- if (Object.keys(rowToInsert.selects).length > 0) {
243
- Object.entries(rowToInsert.selects).forEach(([selectTableName, selectRows])=>{
317
+ if (Object.keys(nestedWrite.selects).length > 0) {
318
+ Object.entries(nestedWrite.selects).forEach(([selectTableName, selectRows])=>{
244
319
  selectsToInsert[selectTableName] = [];
245
320
  selectRows.forEach((row)=>{
246
321
  if (typeof row.parent === 'undefined') {
@@ -252,8 +327,8 @@ customID, joinQuery: _joinQuery, operation, path = '', req, select, tableName, u
252
327
  }
253
328
  // If there are blocks, add parent to each, and then
254
329
  // store by table name and rows
255
- Object.keys(rowToInsert.blocks).forEach((tableName)=>{
256
- rowToInsert.blocks[tableName].forEach((blockRow)=>{
330
+ Object.keys(nestedWrite.blocks).forEach((tableName)=>{
331
+ nestedWrite.blocks[tableName].forEach((blockRow)=>{
257
332
  blockRow.row._parentID = insertedRow.id;
258
333
  if (!blocksToInsert[tableName]) {
259
334
  blocksToInsert[tableName] = [];
@@ -268,20 +343,36 @@ customID, joinQuery: _joinQuery, operation, path = '', req, select, tableName, u
268
343
  // INSERT LOCALES
269
344
  // //////////////////////////////////
270
345
  if (localesToInsert.length > 0) {
271
- const localeTableName = `${tableName}${adapter.localesSuffix}`;
272
346
  const localeTable = adapter.tables[`${tableName}${adapter.localesSuffix}`];
273
- if (operation === 'update') {
274
- await adapter.deleteWhere({
347
+ if (operation === 'update' && isUpdatingAfterInsertConflict) {
348
+ for (const localeRow of localesToInsert){
349
+ await adapter.insert({
350
+ db,
351
+ onConflictDoUpdate: {
352
+ set: localeRow,
353
+ target: [
354
+ localeTable._locale,
355
+ localeTable._parentID
356
+ ]
357
+ },
358
+ tableName: localeTableName,
359
+ values: localeRow
360
+ });
361
+ }
362
+ } else {
363
+ if (operation === 'update') {
364
+ await adapter.deleteWhere({
365
+ db,
366
+ tableName: localeTableName,
367
+ where: eq(localeTable._parentID, insertedRow.id)
368
+ });
369
+ }
370
+ await adapter.insert({
275
371
  db,
276
372
  tableName: localeTableName,
277
- where: eq(localeTable._parentID, insertedRow.id)
373
+ values: localesToInsert
278
374
  });
279
375
  }
280
- await adapter.insert({
281
- db,
282
- tableName: localeTableName,
283
- values: localesToInsert
284
- });
285
376
  }
286
377
  // //////////////////////////////////
287
378
  // INSERT RELATIONSHIPS
@@ -289,7 +380,7 @@ customID, joinQuery: _joinQuery, operation, path = '', req, select, tableName, u
289
380
  const relationshipsTableName = `${tableName}${adapter.relationshipsSuffix}`;
290
381
  if (operation === 'update') {
291
382
  // Filter out specific item deletions (those with itemToRemove) from general path deletions
292
- const generalRelationshipDeletes = rowToInsert.relationshipsToDelete.filter((rel)=>!('itemToRemove' in rel));
383
+ const generalRelationshipDeletes = nestedWrite.relationshipsToDelete.filter((rel)=>!('itemToRemove' in rel));
293
384
  await deleteExistingRowsByPath({
294
385
  adapter,
295
386
  db,
@@ -314,9 +405,9 @@ customID, joinQuery: _joinQuery, operation, path = '', req, select, tableName, u
314
405
  // //////////////////////////////////
315
406
  // HANDLE RELATIONSHIP $push OPERATIONS
316
407
  // //////////////////////////////////
317
- if (rowToInsert.relationshipsToAppend.length > 0) {
408
+ if (nestedWrite.relationshipsToAppend.length > 0) {
318
409
  // Prepare all relationships for batch insert (order will be set after max query)
319
- const relationshipsToInsert = rowToInsert.relationshipsToAppend.map((rel)=>{
410
+ const relationshipsToInsert = nestedWrite.relationshipsToAppend.map((rel)=>{
320
411
  const parentId = id || insertedRow.id;
321
412
  const row = {
322
413
  parent: parentId,
@@ -414,10 +505,10 @@ customID, joinQuery: _joinQuery, operation, path = '', req, select, tableName, u
414
505
  // //////////////////////////////////
415
506
  // HANDLE RELATIONSHIP $remove OPERATIONS
416
507
  // //////////////////////////////////
417
- if (rowToInsert.relationshipsToDelete.some((rel)=>'itemToRemove' in rel)) {
508
+ if (nestedWrite.relationshipsToDelete.some((rel)=>'itemToRemove' in rel)) {
418
509
  const relationshipTable = adapter.tables[relationshipsTableName];
419
510
  if (relationshipTable) {
420
- for (const relToDelete of rowToInsert.relationshipsToDelete){
511
+ for (const relToDelete of nestedWrite.relationshipsToDelete){
421
512
  if ('itemToRemove' in relToDelete && relToDelete.itemToRemove) {
422
513
  const item = relToDelete.itemToRemove;
423
514
  const parentId = id || insertedRow.id;
@@ -471,7 +562,7 @@ customID, joinQuery: _joinQuery, operation, path = '', req, select, tableName, u
471
562
  pathColumnName: 'path',
472
563
  rows: [
473
564
  ...textsToInsert,
474
- ...rowToInsert.textsToDelete
565
+ ...nestedWrite.textsToDelete
475
566
  ],
476
567
  tableName: textsTableName
477
568
  });
@@ -497,7 +588,7 @@ customID, joinQuery: _joinQuery, operation, path = '', req, select, tableName, u
497
588
  pathColumnName: 'path',
498
589
  rows: [
499
590
  ...numbersToInsert,
500
- ...rowToInsert.numbersToDelete
591
+ ...nestedWrite.numbersToDelete
501
592
  ],
502
593
  tableName: numbersTableName
503
594
  });
@@ -514,7 +605,7 @@ customID, joinQuery: _joinQuery, operation, path = '', req, select, tableName, u
514
605
  // //////////////////////////////////
515
606
  const insertedBlockRows = {};
516
607
  if (operation === 'update') {
517
- for (const tableName of rowToInsert.blocksToDelete){
608
+ for (const tableName of nestedWrite.blocksToDelete){
518
609
  const blockTable = adapter.tables[tableName];
519
610
  await adapter.deleteWhere({
520
611
  db,
@@ -570,7 +661,7 @@ customID, joinQuery: _joinQuery, operation, path = '', req, select, tableName, u
570
661
  // INSERT ARRAYS RECURSIVELY
571
662
  // //////////////////////////////////
572
663
  if (operation === 'update') {
573
- for (const arrayTableName of Object.keys(rowToInsert.arrays)){
664
+ for (const arrayTableName of Object.keys(nestedWrite.arrays)){
574
665
  await deleteExistingArrayRows({
575
666
  adapter,
576
667
  db,
@@ -582,8 +673,8 @@ customID, joinQuery: _joinQuery, operation, path = '', req, select, tableName, u
582
673
  await insertArrays({
583
674
  adapter,
584
675
  arrays: [
585
- rowToInsert.arrays,
586
- rowToInsert.arraysToPush
676
+ nestedWrite.arrays,
677
+ nestedWrite.arraysToPush
587
678
  ],
588
679
  db,
589
680
  parentRows: [
@@ -595,14 +686,36 @@ customID, joinQuery: _joinQuery, operation, path = '', req, select, tableName, u
595
686
  // //////////////////////////////////
596
687
  // INSERT hasMany SELECTS
597
688
  // //////////////////////////////////
598
- for (const [selectTableName, tableRows] of Object.entries(selectsToInsert)){
689
+ const selectTableNames = new Set([
690
+ ...Object.keys(nestedWrite.selectsToDelete),
691
+ ...Object.keys(selectsToInsert)
692
+ ]);
693
+ for (const selectTableName of selectTableNames){
694
+ const tableRows = selectsToInsert[selectTableName] ?? [];
599
695
  const selectTable = adapter.tables[selectTableName];
600
696
  if (operation === 'update') {
601
- await adapter.deleteWhere({
602
- db,
603
- tableName: selectTableName,
604
- where: eq(selectTable.parent, insertedRow.id)
605
- });
697
+ for (const selectToDelete of nestedWrite.selectsToDelete[selectTableName] ?? []){
698
+ let selectParent = selectToDelete.parent ?? insertedRow.id;
699
+ if ((typeof selectParent === 'number' || typeof selectParent === 'string') && selectParent in arraysBlocksUUIDMap) {
700
+ selectParent = arraysBlocksUUIDMap[selectParent];
701
+ }
702
+ const deleteConstraints = [
703
+ eq(selectTable.parent, selectParent)
704
+ ];
705
+ if (typeof selectToDelete.locale === 'string') {
706
+ if (!selectTable.locale) {
707
+ throw new Error(`Could not limit the select replacement for table "${selectTableName}" to locale "${selectToDelete.locale}".`);
708
+ }
709
+ deleteConstraints.push(eq(selectTable.locale, selectToDelete.locale));
710
+ } else if (selectTable.locale) {
711
+ deleteConstraints.push(isNull(selectTable.locale));
712
+ }
713
+ await adapter.deleteWhere({
714
+ db,
715
+ tableName: selectTableName,
716
+ where: and(...deleteConstraints)
717
+ });
718
+ }
606
719
  }
607
720
  if (Object.keys(arraysBlocksUUIDMap).length > 0) {
608
721
  tableRows.forEach((row)=>{