@payloadcms/drizzle 4.0.0-internal.77191e5 → 4.0.0-internal.7803e2c

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 (231) hide show
  1. package/dist/count.d.ts.map +1 -1
  2. package/dist/count.js +25 -3
  3. package/dist/count.js.map +1 -1
  4. package/dist/countGlobalVersions.js +8 -3
  5. package/dist/countGlobalVersions.js.map +1 -1
  6. package/dist/countVersions.d.ts.map +1 -1
  7. package/dist/countVersions.js +29 -4
  8. package/dist/countVersions.js.map +1 -1
  9. package/dist/createGlobalVersion.d.ts.map +1 -1
  10. package/dist/createGlobalVersion.js +17 -2
  11. package/dist/createGlobalVersion.js.map +1 -1
  12. package/dist/createVersion.d.ts.map +1 -1
  13. package/dist/createVersion.js +12 -1
  14. package/dist/createVersion.js.map +1 -1
  15. package/dist/deleteBranchGlobal.d.ts +10 -0
  16. package/dist/deleteBranchGlobal.d.ts.map +1 -0
  17. package/dist/deleteBranchGlobal.js +27 -0
  18. package/dist/deleteBranchGlobal.js.map +1 -0
  19. package/dist/deleteOne.d.ts.map +1 -1
  20. package/dist/deleteOne.js +25 -1
  21. package/dist/deleteOne.js.map +1 -1
  22. package/dist/exports/postgres.d.ts +2 -1
  23. package/dist/exports/postgres.d.ts.map +1 -1
  24. package/dist/exports/postgres.js +2 -1
  25. package/dist/exports/postgres.js.map +1 -1
  26. package/dist/exports/sqlite.d.ts +2 -1
  27. package/dist/exports/sqlite.d.ts.map +1 -1
  28. package/dist/exports/sqlite.js +2 -1
  29. package/dist/exports/sqlite.js.map +1 -1
  30. package/dist/find/buildFindManyArgs.d.ts +3 -2
  31. package/dist/find/buildFindManyArgs.d.ts.map +1 -1
  32. package/dist/find/buildFindManyArgs.js +2 -1
  33. package/dist/find/buildFindManyArgs.js.map +1 -1
  34. package/dist/find/buildPolymorphicJoinQuery.d.ts +5 -3
  35. package/dist/find/buildPolymorphicJoinQuery.d.ts.map +1 -1
  36. package/dist/find/buildPolymorphicJoinQuery.js +43 -15
  37. package/dist/find/buildPolymorphicJoinQuery.js.map +1 -1
  38. package/dist/find/buildPolymorphicJoinWhere.js +1 -1
  39. package/dist/find/buildPolymorphicJoinWhere.js.map +1 -1
  40. package/dist/find/createPolymorphicJoinWherePlan.d.ts +2 -1
  41. package/dist/find/createPolymorphicJoinWherePlan.d.ts.map +1 -1
  42. package/dist/find/createPolymorphicJoinWherePlan.js +14 -5
  43. package/dist/find/createPolymorphicJoinWherePlan.js.map +1 -1
  44. package/dist/find/findMany.d.ts +6 -1
  45. package/dist/find/findMany.d.ts.map +1 -1
  46. package/dist/find/findMany.js +16 -3
  47. package/dist/find/findMany.js.map +1 -1
  48. package/dist/find/traverseFields.d.ts +3 -2
  49. package/dist/find/traverseFields.d.ts.map +1 -1
  50. package/dist/find/traverseFields.js +64 -8
  51. package/dist/find/traverseFields.js.map +1 -1
  52. package/dist/find.d.ts.map +1 -1
  53. package/dist/find.js +32 -4
  54. package/dist/find.js.map +1 -1
  55. package/dist/findDistinct.d.ts.map +1 -1
  56. package/dist/findDistinct.js +104 -8
  57. package/dist/findDistinct.js.map +1 -1
  58. package/dist/findGlobal.d.ts.map +1 -1
  59. package/dist/findGlobal.js +24 -5
  60. package/dist/findGlobal.js.map +1 -1
  61. package/dist/findGlobalVersions.js +8 -3
  62. package/dist/findGlobalVersions.js.map +1 -1
  63. package/dist/findOne.d.ts +1 -1
  64. package/dist/findOne.d.ts.map +1 -1
  65. package/dist/findOne.js +30 -3
  66. package/dist/findOne.js.map +1 -1
  67. package/dist/findVersions.d.ts.map +1 -1
  68. package/dist/findVersions.js +32 -5
  69. package/dist/findVersions.js.map +1 -1
  70. package/dist/index.d.ts +3 -8
  71. package/dist/index.d.ts.map +1 -1
  72. package/dist/index.js +3 -8
  73. package/dist/index.js.map +1 -1
  74. package/dist/migrate.d.ts.map +1 -1
  75. package/dist/migrate.js +6 -2
  76. package/dist/migrate.js.map +1 -1
  77. package/dist/migrateDown.d.ts.map +1 -1
  78. package/dist/migrateDown.js +5 -2
  79. package/dist/migrateDown.js.map +1 -1
  80. package/dist/migrateFresh.d.ts.map +1 -1
  81. package/dist/migrateFresh.js +5 -2
  82. package/dist/migrateFresh.js.map +1 -1
  83. package/dist/migrateRefresh.d.ts.map +1 -1
  84. package/dist/migrateRefresh.js +6 -2
  85. package/dist/migrateRefresh.js.map +1 -1
  86. package/dist/migrateReset.d.ts.map +1 -1
  87. package/dist/migrateReset.js +6 -2
  88. package/dist/migrateReset.js.map +1 -1
  89. package/dist/postgres/insert.d.ts.map +1 -1
  90. package/dist/postgres/insert.js +4 -2
  91. package/dist/postgres/insert.js.map +1 -1
  92. package/dist/postgres/predefinedMigrations/sizes-to-variants/index.d.ts +35 -0
  93. package/dist/postgres/predefinedMigrations/sizes-to-variants/index.d.ts.map +1 -0
  94. package/dist/postgres/predefinedMigrations/sizes-to-variants/index.js +185 -0
  95. package/dist/postgres/predefinedMigrations/sizes-to-variants/index.js.map +1 -0
  96. package/dist/postgres/predefinedMigrations/v2-v3/fetchAndResave/index.d.ts.map +1 -1
  97. package/dist/postgres/predefinedMigrations/v2-v3/fetchAndResave/index.js +8 -4
  98. package/dist/postgres/predefinedMigrations/v2-v3/fetchAndResave/index.js.map +1 -1
  99. package/dist/postgres/predefinedMigrations/v2-v3/index.js +1 -1
  100. package/dist/postgres/predefinedMigrations/v2-v3/index.js.map +1 -1
  101. package/dist/postgres/requireDrizzleKit.d.ts +4 -0
  102. package/dist/postgres/requireDrizzleKit.d.ts.map +1 -1
  103. package/dist/postgres/requireDrizzleKit.js +16 -10
  104. package/dist/postgres/requireDrizzleKit.js.map +1 -1
  105. package/dist/postgres/types.d.ts +4 -0
  106. package/dist/postgres/types.d.ts.map +1 -1
  107. package/dist/postgres/types.js.map +1 -1
  108. package/dist/queries/buildAndOrConditions.d.ts +3 -2
  109. package/dist/queries/buildAndOrConditions.d.ts.map +1 -1
  110. package/dist/queries/buildAndOrConditions.js +2 -1
  111. package/dist/queries/buildAndOrConditions.js.map +1 -1
  112. package/dist/queries/buildBranchVisibility.d.ts +11 -0
  113. package/dist/queries/buildBranchVisibility.d.ts.map +1 -0
  114. package/dist/queries/buildBranchVisibility.js +48 -0
  115. package/dist/queries/buildBranchVisibility.js.map +1 -0
  116. package/dist/queries/buildOrderBy.d.ts +3 -2
  117. package/dist/queries/buildOrderBy.d.ts.map +1 -1
  118. package/dist/queries/buildOrderBy.js +2 -1
  119. package/dist/queries/buildOrderBy.js.map +1 -1
  120. package/dist/queries/buildQuery.d.ts +3 -2
  121. package/dist/queries/buildQuery.d.ts.map +1 -1
  122. package/dist/queries/buildQuery.js +4 -2
  123. package/dist/queries/buildQuery.js.map +1 -1
  124. package/dist/queries/getTableColumnFromPath.d.ts +3 -2
  125. package/dist/queries/getTableColumnFromPath.d.ts.map +1 -1
  126. package/dist/queries/getTableColumnFromPath.js +167 -29
  127. package/dist/queries/getTableColumnFromPath.js.map +1 -1
  128. package/dist/queries/parseParams.d.ts +3 -2
  129. package/dist/queries/parseParams.d.ts.map +1 -1
  130. package/dist/queries/parseParams.js +4 -1
  131. package/dist/queries/parseParams.js.map +1 -1
  132. package/dist/queryDrafts.d.ts.map +1 -1
  133. package/dist/queryDrafts.js +27 -5
  134. package/dist/queryDrafts.js.map +1 -1
  135. package/dist/schema/build.d.ts.map +1 -1
  136. package/dist/schema/build.js +28 -20
  137. package/dist/schema/build.js.map +1 -1
  138. package/dist/sqlite/createRequireDrizzleKit.d.ts +6 -0
  139. package/dist/sqlite/createRequireDrizzleKit.d.ts.map +1 -0
  140. package/dist/sqlite/createRequireDrizzleKit.js +15 -0
  141. package/dist/sqlite/createRequireDrizzleKit.js.map +1 -0
  142. package/dist/sqlite/execute.js.map +1 -1
  143. package/dist/sqlite/insert.d.ts.map +1 -1
  144. package/dist/sqlite/insert.js +9 -4
  145. package/dist/sqlite/insert.js.map +1 -1
  146. package/dist/sqlite/predefinedMigrations/sizes-to-variants/index.d.ts +15 -0
  147. package/dist/sqlite/predefinedMigrations/sizes-to-variants/index.d.ts.map +1 -0
  148. package/dist/sqlite/predefinedMigrations/sizes-to-variants/index.js +114 -0
  149. package/dist/sqlite/predefinedMigrations/sizes-to-variants/index.js.map +1 -0
  150. package/dist/sqlite/types.d.ts +4 -0
  151. package/dist/sqlite/types.d.ts.map +1 -1
  152. package/dist/sqlite/types.js.map +1 -1
  153. package/dist/transactions/beginTransaction.d.ts.map +1 -1
  154. package/dist/transactions/beginTransaction.js +13 -5
  155. package/dist/transactions/beginTransaction.js.map +1 -1
  156. package/dist/transactions/commitTransaction.d.ts.map +1 -1
  157. package/dist/transactions/commitTransaction.js +1 -5
  158. package/dist/transactions/commitTransaction.js.map +1 -1
  159. package/dist/transform/read/traverseFields.js.map +1 -1
  160. package/dist/transform/write/array.d.ts +3 -2
  161. package/dist/transform/write/array.d.ts.map +1 -1
  162. package/dist/transform/write/array.js +2 -1
  163. package/dist/transform/write/array.js.map +1 -1
  164. package/dist/transform/write/blocks.d.ts +3 -2
  165. package/dist/transform/write/blocks.d.ts.map +1 -1
  166. package/dist/transform/write/blocks.js +2 -1
  167. package/dist/transform/write/blocks.js.map +1 -1
  168. package/dist/transform/write/index.d.ts.map +1 -1
  169. package/dist/transform/write/index.js +2 -0
  170. package/dist/transform/write/index.js.map +1 -1
  171. package/dist/transform/write/traverseFields.d.ts +2 -1
  172. package/dist/transform/write/traverseFields.d.ts.map +1 -1
  173. package/dist/transform/write/traverseFields.js +43 -7
  174. package/dist/transform/write/traverseFields.js.map +1 -1
  175. package/dist/transform/write/types.d.ts +7 -0
  176. package/dist/transform/write/types.d.ts.map +1 -1
  177. package/dist/transform/write/types.js.map +1 -1
  178. package/dist/types.d.ts +3 -2
  179. package/dist/types.d.ts.map +1 -1
  180. package/dist/types.js.map +1 -1
  181. package/dist/updateGlobal.d.ts +5 -1
  182. package/dist/updateGlobal.d.ts.map +1 -1
  183. package/dist/updateGlobal.js +96 -4
  184. package/dist/updateGlobal.js.map +1 -1
  185. package/dist/updateOne.d.ts.map +1 -1
  186. package/dist/updateOne.js +54 -5
  187. package/dist/updateOne.js.map +1 -1
  188. package/dist/upsertBranchGlobalChange.d.ts +3 -0
  189. package/dist/upsertBranchGlobalChange.d.ts.map +1 -0
  190. package/dist/upsertBranchGlobalChange.js +35 -0
  191. package/dist/upsertBranchGlobalChange.js.map +1 -0
  192. package/dist/upsertRow/deleteExistingRowsByPath.d.ts.map +1 -1
  193. package/dist/upsertRow/deleteExistingRowsByPath.js +17 -12
  194. package/dist/upsertRow/deleteExistingRowsByPath.js.map +1 -1
  195. package/dist/upsertRow/index.d.ts +1 -1
  196. package/dist/upsertRow/index.d.ts.map +1 -1
  197. package/dist/upsertRow/index.js +132 -42
  198. package/dist/upsertRow/index.js.map +1 -1
  199. package/dist/upsertRow/types.d.ts +3 -0
  200. package/dist/upsertRow/types.d.ts.map +1 -1
  201. package/dist/upsertRow/types.js.map +1 -1
  202. package/dist/utilities/blocksToJsonMigrator.d.ts.map +1 -1
  203. package/dist/utilities/blocksToJsonMigrator.js +7 -18
  204. package/dist/utilities/blocksToJsonMigrator.js.map +1 -1
  205. package/dist/utilities/buildCreateMigration.js +1 -1
  206. package/dist/utilities/buildCreateMigration.js.map +1 -1
  207. package/dist/utilities/buildDynamicPredefinedSizesToVariantsMigration.d.ts +15 -0
  208. package/dist/utilities/buildDynamicPredefinedSizesToVariantsMigration.d.ts.map +1 -0
  209. package/dist/utilities/buildDynamicPredefinedSizesToVariantsMigration.js +110 -0
  210. package/dist/utilities/buildDynamicPredefinedSizesToVariantsMigration.js.map +1 -0
  211. package/dist/utilities/createSchemaGenerator.d.ts.map +1 -1
  212. package/dist/utilities/createSchemaGenerator.js +7 -12
  213. package/dist/utilities/createSchemaGenerator.js.map +1 -1
  214. package/dist/utilities/executeSchemaHooks.js +1 -1
  215. package/dist/utilities/executeSchemaHooks.js.map +1 -1
  216. package/dist/utilities/formatGeneratedFile.d.ts +10 -0
  217. package/dist/utilities/formatGeneratedFile.d.ts.map +1 -0
  218. package/dist/utilities/formatGeneratedFile.js +58 -0
  219. package/dist/utilities/formatGeneratedFile.js.map +1 -0
  220. package/dist/utilities/getSizesToVariantsRenames.d.ts +54 -0
  221. package/dist/utilities/getSizesToVariantsRenames.d.ts.map +1 -0
  222. package/dist/utilities/getSizesToVariantsRenames.js +251 -0
  223. package/dist/utilities/getSizesToVariantsRenames.js.map +1 -0
  224. package/dist/utilities/getTransaction.js.map +1 -1
  225. package/dist/utilities/pushDevSchema.js +1 -1
  226. package/dist/utilities/pushDevSchema.js.map +1 -1
  227. package/package.json +17 -19
  228. package/dist/sqlite/requireDrizzleKit.d.ts +0 -3
  229. package/dist/sqlite/requireDrizzleKit.d.ts.map +0 -1
  230. package/dist/sqlite/requireDrizzleKit.js +0 -12
  231. package/dist/sqlite/requireDrizzleKit.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"updateOne.d.ts","sourceRoot":"","sources":["../src/updateOne.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAgBxC,eAAO,MAAM,SAAS,EAAE,SAiIvB,CAAA"}
1
+ {"version":3,"file":"updateOne.d.ts","sourceRoot":"","sources":["../src/updateOne.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAuBxC,eAAO,MAAM,SAAS,EAAE,SA2KvB,CAAA"}
package/dist/updateOne.js CHANGED
@@ -1,3 +1,5 @@
1
+ import { and, eq } from 'drizzle-orm';
2
+ import { applyBranchIDProjection, resolveBranchQuery, resolveBranchRowID, withBranchIDSelect } from 'payload';
1
3
  import toSnakeCase from 'to-snake-case';
2
4
  import { buildQuery } from './queries/buildQuery.js';
3
5
  import { selectDistinct } from './queries/selectDistinct.js';
@@ -8,19 +10,31 @@ import { shouldUseOptimizedUpsertRow } from './upsertRow/shouldUseOptimizedUpser
8
10
  import { getPrimaryDb } from './utilities/getPrimaryDb.js';
9
11
  import { getTransaction } from './utilities/getTransaction.js';
10
12
  import { markWrite } from './utilities/readAfterWrite.js';
11
- export const updateOne = async function updateOne({ id, collection: collectionSlug, data, joins: joinQuery, locale, options = {
13
+ export const updateOne = async function updateOne({ id, branch, collection: collectionSlug, data, joins: joinQuery, locale, options = {
12
14
  upsert: false
13
15
  }, req, returning, select, where: whereArg }) {
14
16
  const collection = this.payload.collections[collectionSlug].config;
15
17
  const tableName = this.tableNameMap.get(toSnakeCase(collection.slug));
16
- let idToUpdate = id;
18
+ let idToUpdate = id === undefined || id === null ? id : await resolveBranchRowID({
19
+ id,
20
+ branch,
21
+ collectionSlug,
22
+ req
23
+ });
17
24
  let whereToUpdate;
18
25
  const db = getPrimaryDb(this, await getTransaction(this, req));
19
26
  if (!idToUpdate) {
27
+ whereArg = await resolveBranchQuery({
28
+ branch,
29
+ collectionSlug,
30
+ req,
31
+ where: whereArg
32
+ });
20
33
  const { joins, selectFields, where } = buildQuery({
21
34
  adapter: this,
22
35
  fields: collection.flattenedFields,
23
36
  locale,
37
+ req,
24
38
  tableName,
25
39
  where: whereArg
26
40
  });
@@ -28,6 +42,9 @@ export const updateOne = async function updateOne({ id, collection: collectionSl
28
42
  // queries keep resolving a matching id first and then update that row unconditionally
29
43
  whereToUpdate = joins.length === 0 ? where : undefined;
30
44
  if (options.atomic === true) {
45
+ if (joins.length > 0) {
46
+ throw new Error('Atomic where updates do not support predicates that require joins');
47
+ }
31
48
  if (!shouldUseOptimizedUpsertRow({
32
49
  data,
33
50
  fields: collection.flattenedFields
@@ -44,12 +61,20 @@ export const updateOne = async function updateOne({ id, collection: collectionSl
44
61
  if (arraysToPush && Object.keys(arraysToPush).length) {
45
62
  throw new Error('Atomic where updates do not support array operations');
46
63
  }
64
+ const table = this.tables[tableName];
65
+ const matchingRowQuery = db.select({
66
+ id: table.id
67
+ }).from(table).where(where).limit(1);
68
+ // PostgreSQL must lock the candidate before applying LIMIT so a waiting caller can
69
+ // continue to another match if a concurrent update makes the first row ineligible.
70
+ // SQLite serializes writers and does not support SELECT ... FOR UPDATE.
71
+ const matchingRow = this.name === 'postgres' ? matchingRowQuery.for('update') : matchingRowQuery;
47
72
  markWrite(this);
48
- const docs = await db.update(this.tables[tableName]).set(row).where(where).returning();
73
+ const docs = await db.update(table).set(row).where(and(eq(table.id, matchingRow), where)).returning();
49
74
  if (!docs[0]) {
50
75
  return null;
51
76
  }
52
- return transform({
77
+ const result = transform({
53
78
  adapter: this,
54
79
  config: this.payload.config,
55
80
  data: docs[0],
@@ -57,6 +82,15 @@ export const updateOne = async function updateOne({ id, collection: collectionSl
57
82
  joinQuery: false,
58
83
  tableName
59
84
  });
85
+ applyBranchIDProjection({
86
+ branch,
87
+ collectionSlug,
88
+ docs: [
89
+ result
90
+ ],
91
+ req
92
+ });
93
+ return result;
60
94
  }
61
95
  // selectDistinct will only return if there are joins
62
96
  const selectDistinctResult = await selectDistinct({
@@ -96,13 +130,28 @@ export const updateOne = async function updateOne({ id, collection: collectionSl
96
130
  joinQuery,
97
131
  operation: 'update',
98
132
  req,
99
- select,
133
+ select: withBranchIDSelect({
134
+ branch,
135
+ collectionSlug,
136
+ req,
137
+ select
138
+ }),
100
139
  tableName,
101
140
  where: whereToUpdate
102
141
  });
103
142
  if (returning === false) {
104
143
  return null;
105
144
  }
145
+ // The row written on a branch is the shadow row, so the document it returns
146
+ // carries that row's primary key rather than the document's canonical ID.
147
+ applyBranchIDProjection({
148
+ branch,
149
+ collectionSlug,
150
+ docs: [
151
+ result
152
+ ],
153
+ req
154
+ });
106
155
  return result;
107
156
  };
108
157
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/updateOne.ts"],"sourcesContent":["import type { SQL } from 'drizzle-orm'\nimport type { LibSQLDatabase } from 'drizzle-orm/libsql'\nimport type { UpdateOne } from 'payload'\n\nimport toSnakeCase from 'to-snake-case'\n\nimport type { DrizzleAdapter } from './types.js'\n\nimport { buildQuery } from './queries/buildQuery.js'\nimport { selectDistinct } from './queries/selectDistinct.js'\nimport { transform } from './transform/read/index.js'\nimport { transformForWrite } from './transform/write/index.js'\nimport { upsertRow } from './upsertRow/index.js'\nimport { shouldUseOptimizedUpsertRow } from './upsertRow/shouldUseOptimizedUpsertRow.js'\nimport { getPrimaryDb } from './utilities/getPrimaryDb.js'\nimport { getTransaction } from './utilities/getTransaction.js'\nimport { markWrite } from './utilities/readAfterWrite.js'\n\nexport const updateOne: UpdateOne = async function updateOne(\n this: DrizzleAdapter,\n {\n id,\n collection: collectionSlug,\n data,\n joins: joinQuery,\n locale,\n options = { upsert: false },\n req,\n returning,\n select,\n where: whereArg,\n },\n) {\n const collection = this.payload.collections[collectionSlug].config\n const tableName = this.tableNameMap.get(toSnakeCase(collection.slug))\n let idToUpdate = id\n let whereToUpdate: SQL<unknown> | undefined\n\n const db = getPrimaryDb(this, await getTransaction(this, req))\n\n if (!idToUpdate) {\n const { joins, selectFields, where } = buildQuery({\n adapter: this,\n fields: collection.flattenedFields,\n locale,\n tableName,\n where: whereArg,\n })\n // A `where` that needs joins cannot be applied to the UPDATE statement itself, so those\n // queries keep resolving a matching id first and then update that row unconditionally\n whereToUpdate = joins.length === 0 ? where : undefined\n\n if (options.atomic === true) {\n if (!shouldUseOptimizedUpsertRow({ data, fields: collection.flattenedFields })) {\n throw new Error('Atomic where updates only support fields stored on the main table')\n }\n\n const { arraysToPush, row } = transformForWrite({\n adapter: this,\n data,\n enableAtomicWrites: true,\n fields: collection.flattenedFields,\n tableName,\n })\n\n if (arraysToPush && Object.keys(arraysToPush).length) {\n throw new Error('Atomic where updates do not support array operations')\n }\n\n markWrite(this)\n\n const docs = await (db as LibSQLDatabase)\n .update(this.tables[tableName])\n .set(row)\n .where(where)\n .returning()\n\n if (!docs[0]) {\n return null\n }\n\n return transform({\n adapter: this,\n config: this.payload.config,\n data: docs[0],\n fields: collection.flattenedFields,\n joinQuery: false,\n tableName,\n })\n }\n\n // selectDistinct will only return if there are joins\n const selectDistinctResult = await selectDistinct({\n adapter: this,\n db,\n joins,\n query: ({ query }) => query.limit(1),\n selectFields,\n tableName,\n where,\n })\n\n if (selectDistinctResult?.[0]?.id) {\n idToUpdate = selectDistinctResult?.[0]?.id\n // If id wasn't passed but `where` without any joins, retrieve it with findFirst\n } else if (whereArg && !joins.length) {\n const table = this.tables[tableName]\n\n const docsToUpdate = await (db as LibSQLDatabase)\n .select({\n id: table.id,\n })\n .from(table)\n .where(where)\n .limit(1)\n idToUpdate = docsToUpdate?.[0]?.id\n }\n }\n\n if (!idToUpdate && !options.upsert) {\n // TODO: In 4.0, if returning === false, we should differentiate between:\n // - No document found to update\n // - Document found, but returning === false\n return null\n }\n\n const result = await upsertRow({\n id: idToUpdate,\n adapter: this,\n collectionSlug,\n data,\n db,\n fields: collection.flattenedFields,\n ignoreResult: returning === false,\n joinQuery,\n operation: 'update',\n req,\n select,\n tableName,\n where: whereToUpdate,\n })\n\n if (returning === false) {\n return null\n }\n\n return result\n}\n"],"names":["toSnakeCase","buildQuery","selectDistinct","transform","transformForWrite","upsertRow","shouldUseOptimizedUpsertRow","getPrimaryDb","getTransaction","markWrite","updateOne","id","collection","collectionSlug","data","joins","joinQuery","locale","options","upsert","req","returning","select","where","whereArg","payload","collections","config","tableName","tableNameMap","get","slug","idToUpdate","whereToUpdate","db","selectFields","adapter","fields","flattenedFields","length","undefined","atomic","Error","arraysToPush","row","enableAtomicWrites","Object","keys","docs","update","tables","set","selectDistinctResult","query","limit","table","docsToUpdate","from","result","ignoreResult","operation"],"mappings":"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"}
1
+ {"version":3,"sources":["../src/updateOne.ts"],"sourcesContent":["import type { SQL } from 'drizzle-orm'\nimport type { LibSQLDatabase } from 'drizzle-orm/libsql'\nimport type { UpdateOne } from 'payload'\n\nimport { and, eq } from 'drizzle-orm'\nimport {\n applyBranchIDProjection,\n resolveBranchQuery,\n resolveBranchRowID,\n withBranchIDSelect,\n} from 'payload'\nimport toSnakeCase from 'to-snake-case'\n\nimport type { DrizzleAdapter, PostgresDB } from './types.js'\n\nimport { buildQuery } from './queries/buildQuery.js'\nimport { selectDistinct } from './queries/selectDistinct.js'\nimport { transform } from './transform/read/index.js'\nimport { transformForWrite } from './transform/write/index.js'\nimport { upsertRow } from './upsertRow/index.js'\nimport { shouldUseOptimizedUpsertRow } from './upsertRow/shouldUseOptimizedUpsertRow.js'\nimport { getPrimaryDb } from './utilities/getPrimaryDb.js'\nimport { getTransaction } from './utilities/getTransaction.js'\nimport { markWrite } from './utilities/readAfterWrite.js'\n\nexport const updateOne: UpdateOne = async function updateOne(\n this: DrizzleAdapter,\n {\n id,\n branch,\n collection: collectionSlug,\n data,\n joins: joinQuery,\n locale,\n options = { upsert: false },\n req,\n returning,\n select,\n where: whereArg,\n },\n) {\n const collection = this.payload.collections[collectionSlug].config\n const tableName = this.tableNameMap.get(toSnakeCase(collection.slug))\n let idToUpdate =\n id === undefined || id === null\n ? id\n : await resolveBranchRowID({ id, branch, collectionSlug, req })\n let whereToUpdate: SQL<unknown> | undefined\n\n const db = getPrimaryDb(this, await getTransaction(this, req))\n\n if (!idToUpdate) {\n whereArg = await resolveBranchQuery({ branch, collectionSlug, req, where: whereArg })\n\n const { joins, selectFields, where } = buildQuery({\n adapter: this,\n fields: collection.flattenedFields,\n locale,\n req,\n tableName,\n where: whereArg,\n })\n // A `where` that needs joins cannot be applied to the UPDATE statement itself, so those\n // queries keep resolving a matching id first and then update that row unconditionally\n whereToUpdate = joins.length === 0 ? where : undefined\n\n if (options.atomic === true) {\n if (joins.length > 0) {\n throw new Error('Atomic where updates do not support predicates that require joins')\n }\n\n if (!shouldUseOptimizedUpsertRow({ data, fields: collection.flattenedFields })) {\n throw new Error('Atomic where updates only support fields stored on the main table')\n }\n\n const { arraysToPush, row } = transformForWrite({\n adapter: this,\n data,\n enableAtomicWrites: true,\n fields: collection.flattenedFields,\n tableName,\n })\n\n if (arraysToPush && Object.keys(arraysToPush).length) {\n throw new Error('Atomic where updates do not support array operations')\n }\n\n const table = this.tables[tableName]\n const matchingRowQuery = (db as PostgresDB)\n .select({ id: table.id })\n .from(table)\n .where(where)\n .limit(1)\n\n // PostgreSQL must lock the candidate before applying LIMIT so a waiting caller can\n // continue to another match if a concurrent update makes the first row ineligible.\n // SQLite serializes writers and does not support SELECT ... FOR UPDATE.\n const matchingRow =\n this.name === 'postgres' ? matchingRowQuery.for('update') : matchingRowQuery\n\n markWrite(this)\n\n const docs = await (db as LibSQLDatabase)\n .update(table)\n .set(row)\n .where(and(eq(table.id, matchingRow), where))\n .returning()\n\n if (!docs[0]) {\n return null\n }\n\n const result = transform({\n adapter: this,\n config: this.payload.config,\n data: docs[0],\n fields: collection.flattenedFields,\n joinQuery: false,\n tableName,\n })\n\n applyBranchIDProjection({\n branch,\n collectionSlug,\n docs: [result as Record<string, unknown>],\n req,\n })\n\n return result\n }\n\n // selectDistinct will only return if there are joins\n const selectDistinctResult = await selectDistinct({\n adapter: this,\n db,\n joins,\n query: ({ query }) => query.limit(1),\n selectFields,\n tableName,\n where,\n })\n\n if (selectDistinctResult?.[0]?.id) {\n idToUpdate = selectDistinctResult?.[0]?.id\n // If id wasn't passed but `where` without any joins, retrieve it with findFirst\n } else if (whereArg && !joins.length) {\n const table = this.tables[tableName]\n\n const docsToUpdate = await (db as LibSQLDatabase)\n .select({\n id: table.id,\n })\n .from(table)\n .where(where)\n .limit(1)\n idToUpdate = docsToUpdate?.[0]?.id\n }\n }\n\n if (!idToUpdate && !options.upsert) {\n // TODO: In 4.0, if returning === false, we should differentiate between:\n // - No document found to update\n // - Document found, but returning === false\n return null\n }\n\n const result = await upsertRow({\n id: idToUpdate,\n adapter: this,\n collectionSlug,\n data,\n db,\n fields: collection.flattenedFields,\n ignoreResult: returning === false,\n joinQuery,\n operation: 'update',\n req,\n select: withBranchIDSelect({ branch, collectionSlug, req, select }),\n tableName,\n where: whereToUpdate,\n })\n\n if (returning === false) {\n return null\n }\n\n // The row written on a branch is the shadow row, so the document it returns\n // carries that row's primary key rather than the document's canonical ID.\n applyBranchIDProjection({\n branch,\n collectionSlug,\n docs: [result as Record<string, unknown>],\n req,\n })\n\n return result\n}\n"],"names":["and","eq","applyBranchIDProjection","resolveBranchQuery","resolveBranchRowID","withBranchIDSelect","toSnakeCase","buildQuery","selectDistinct","transform","transformForWrite","upsertRow","shouldUseOptimizedUpsertRow","getPrimaryDb","getTransaction","markWrite","updateOne","id","branch","collection","collectionSlug","data","joins","joinQuery","locale","options","upsert","req","returning","select","where","whereArg","payload","collections","config","tableName","tableNameMap","get","slug","idToUpdate","undefined","whereToUpdate","db","selectFields","adapter","fields","flattenedFields","length","atomic","Error","arraysToPush","row","enableAtomicWrites","Object","keys","table","tables","matchingRowQuery","from","limit","matchingRow","name","for","docs","update","set","result","selectDistinctResult","query","docsToUpdate","ignoreResult","operation"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { UpsertBranchGlobalChange } from 'payload';
2
+ export declare const upsertBranchGlobalChange: UpsertBranchGlobalChange;
3
+ //# sourceMappingURL=upsertBranchGlobalChange.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upsertBranchGlobalChange.d.ts","sourceRoot":"","sources":["../src/upsertBranchGlobalChange.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAA;AAWvD,eAAO,MAAM,wBAAwB,EAAE,wBAyBpC,CAAA"}
@@ -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":"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,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"}
@@ -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<null | 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,+KAqB3E,IAAI,KAAG,OAAO,CAAC,IAAI,GAAG,CAAC,CA2uBzB,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"}