@payloadcms/drizzle 4.0.0-internal.a6582c6 → 4.0.0-internal.a9d2e4e

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 (305) 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/createTableName.d.ts.map +1 -1
  13. package/dist/createTableName.js +2 -7
  14. package/dist/createTableName.js.map +1 -1
  15. package/dist/createVersion.d.ts.map +1 -1
  16. package/dist/createVersion.js +12 -1
  17. package/dist/createVersion.js.map +1 -1
  18. package/dist/deleteBranchGlobal.d.ts +10 -0
  19. package/dist/deleteBranchGlobal.d.ts.map +1 -0
  20. package/dist/deleteBranchGlobal.js +27 -0
  21. package/dist/deleteBranchGlobal.js.map +1 -0
  22. package/dist/deleteOne.d.ts.map +1 -1
  23. package/dist/deleteOne.js +25 -1
  24. package/dist/deleteOne.js.map +1 -1
  25. package/dist/exports/postgres.d.ts +4 -1
  26. package/dist/exports/postgres.d.ts.map +1 -1
  27. package/dist/exports/postgres.js +4 -1
  28. package/dist/exports/postgres.js.map +1 -1
  29. package/dist/exports/sqlite.d.ts +2 -1
  30. package/dist/exports/sqlite.d.ts.map +1 -1
  31. package/dist/exports/sqlite.js +2 -1
  32. package/dist/exports/sqlite.js.map +1 -1
  33. package/dist/find/buildFindManyArgs.d.ts +3 -2
  34. package/dist/find/buildFindManyArgs.d.ts.map +1 -1
  35. package/dist/find/buildFindManyArgs.js +2 -1
  36. package/dist/find/buildFindManyArgs.js.map +1 -1
  37. package/dist/find/buildPolymorphicJoinQuery.d.ts +40 -0
  38. package/dist/find/buildPolymorphicJoinQuery.d.ts.map +1 -0
  39. package/dist/find/buildPolymorphicJoinQuery.js +163 -0
  40. package/dist/find/buildPolymorphicJoinQuery.js.map +1 -0
  41. package/dist/find/buildPolymorphicJoinWhere.d.ts +20 -0
  42. package/dist/find/buildPolymorphicJoinWhere.d.ts.map +1 -0
  43. package/dist/find/buildPolymorphicJoinWhere.js +301 -0
  44. package/dist/find/buildPolymorphicJoinWhere.js.map +1 -0
  45. package/dist/find/createPolymorphicJoinWherePlan.d.ts +38 -0
  46. package/dist/find/createPolymorphicJoinWherePlan.d.ts.map +1 -0
  47. package/dist/find/createPolymorphicJoinWherePlan.js +200 -0
  48. package/dist/find/createPolymorphicJoinWherePlan.js.map +1 -0
  49. package/dist/find/findMany.d.ts +6 -1
  50. package/dist/find/findMany.d.ts.map +1 -1
  51. package/dist/find/findMany.js +16 -3
  52. package/dist/find/findMany.js.map +1 -1
  53. package/dist/find/traverseFields.d.ts +3 -2
  54. package/dist/find/traverseFields.d.ts.map +1 -1
  55. package/dist/find/traverseFields.js +82 -198
  56. package/dist/find/traverseFields.js.map +1 -1
  57. package/dist/find.d.ts.map +1 -1
  58. package/dist/find.js +32 -4
  59. package/dist/find.js.map +1 -1
  60. package/dist/findDistinct.d.ts.map +1 -1
  61. package/dist/findDistinct.js +104 -8
  62. package/dist/findDistinct.js.map +1 -1
  63. package/dist/findGlobal.d.ts.map +1 -1
  64. package/dist/findGlobal.js +24 -5
  65. package/dist/findGlobal.js.map +1 -1
  66. package/dist/findGlobalVersions.js +8 -3
  67. package/dist/findGlobalVersions.js.map +1 -1
  68. package/dist/findOne.d.ts +1 -1
  69. package/dist/findOne.d.ts.map +1 -1
  70. package/dist/findOne.js +30 -3
  71. package/dist/findOne.js.map +1 -1
  72. package/dist/findVersions.d.ts.map +1 -1
  73. package/dist/findVersions.js +32 -5
  74. package/dist/findVersions.js.map +1 -1
  75. package/dist/index.d.ts +6 -10
  76. package/dist/index.d.ts.map +1 -1
  77. package/dist/index.js +4 -8
  78. package/dist/index.js.map +1 -1
  79. package/dist/migrate.d.ts.map +1 -1
  80. package/dist/migrate.js +41 -15
  81. package/dist/migrate.js.map +1 -1
  82. package/dist/migrateDown.d.ts +2 -1
  83. package/dist/migrateDown.d.ts.map +1 -1
  84. package/dist/migrateDown.js +17 -4
  85. package/dist/migrateDown.js.map +1 -1
  86. package/dist/migrateFresh.d.ts +4 -2
  87. package/dist/migrateFresh.d.ts.map +1 -1
  88. package/dist/migrateFresh.js +26 -9
  89. package/dist/migrateFresh.js.map +1 -1
  90. package/dist/migrateRefresh.d.ts +2 -1
  91. package/dist/migrateRefresh.d.ts.map +1 -1
  92. package/dist/migrateRefresh.js +20 -5
  93. package/dist/migrateRefresh.js.map +1 -1
  94. package/dist/migrateReset.d.ts +2 -1
  95. package/dist/migrateReset.d.ts.map +1 -1
  96. package/dist/migrateReset.js +18 -4
  97. package/dist/migrateReset.js.map +1 -1
  98. package/dist/migrateStatus.d.ts +2 -1
  99. package/dist/migrateStatus.d.ts.map +1 -1
  100. package/dist/migrateStatus.js +11 -6
  101. package/dist/migrateStatus.js.map +1 -1
  102. package/dist/postgres/createJSONQuery/index.js +3 -3
  103. package/dist/postgres/createJSONQuery/index.js.map +1 -1
  104. package/dist/postgres/init.d.ts.map +1 -1
  105. package/dist/postgres/init.js +6 -0
  106. package/dist/postgres/init.js.map +1 -1
  107. package/dist/postgres/insert.d.ts.map +1 -1
  108. package/dist/postgres/insert.js +4 -2
  109. package/dist/postgres/insert.js.map +1 -1
  110. package/dist/postgres/predefinedMigrations/sizes-to-variants/index.d.ts +35 -0
  111. package/dist/postgres/predefinedMigrations/sizes-to-variants/index.d.ts.map +1 -0
  112. package/dist/postgres/predefinedMigrations/sizes-to-variants/index.js +185 -0
  113. package/dist/postgres/predefinedMigrations/sizes-to-variants/index.js.map +1 -0
  114. package/dist/postgres/predefinedMigrations/v2-v3/fetchAndResave/index.d.ts.map +1 -1
  115. package/dist/postgres/predefinedMigrations/v2-v3/fetchAndResave/index.js +8 -4
  116. package/dist/postgres/predefinedMigrations/v2-v3/fetchAndResave/index.js.map +1 -1
  117. package/dist/postgres/predefinedMigrations/v2-v3/index.js +2 -2
  118. package/dist/postgres/predefinedMigrations/v2-v3/index.js.map +1 -1
  119. package/dist/postgres/query/assertOperatorHandlerExtensionsInstalled.d.ts +15 -0
  120. package/dist/postgres/query/assertOperatorHandlerExtensionsInstalled.d.ts.map +1 -0
  121. package/dist/postgres/query/assertOperatorHandlerExtensionsInstalled.js +25 -0
  122. package/dist/postgres/query/assertOperatorHandlerExtensionsInstalled.js.map +1 -0
  123. package/dist/postgres/query/postgresUnaccent.d.ts +13 -0
  124. package/dist/postgres/query/postgresUnaccent.d.ts.map +1 -0
  125. package/dist/postgres/query/postgresUnaccent.js +40 -0
  126. package/dist/postgres/query/postgresUnaccent.js.map +1 -0
  127. package/dist/postgres/requireDrizzleKit.d.ts +4 -0
  128. package/dist/postgres/requireDrizzleKit.d.ts.map +1 -1
  129. package/dist/postgres/requireDrizzleKit.js +16 -10
  130. package/dist/postgres/requireDrizzleKit.js.map +1 -1
  131. package/dist/postgres/types.d.ts +17 -2
  132. package/dist/postgres/types.d.ts.map +1 -1
  133. package/dist/postgres/types.js.map +1 -1
  134. package/dist/queries/buildAndOrConditions.d.ts +3 -2
  135. package/dist/queries/buildAndOrConditions.d.ts.map +1 -1
  136. package/dist/queries/buildAndOrConditions.js +2 -1
  137. package/dist/queries/buildAndOrConditions.js.map +1 -1
  138. package/dist/queries/buildBranchVisibility.d.ts +11 -0
  139. package/dist/queries/buildBranchVisibility.d.ts.map +1 -0
  140. package/dist/queries/buildBranchVisibility.js +48 -0
  141. package/dist/queries/buildBranchVisibility.js.map +1 -0
  142. package/dist/queries/buildOperatorConstraint.d.ts +22 -0
  143. package/dist/queries/buildOperatorConstraint.d.ts.map +1 -0
  144. package/dist/queries/buildOperatorConstraint.js +63 -0
  145. package/dist/queries/buildOperatorConstraint.js.map +1 -0
  146. package/dist/queries/buildOrderBy.d.ts +3 -2
  147. package/dist/queries/buildOrderBy.d.ts.map +1 -1
  148. package/dist/queries/buildOrderBy.js +2 -1
  149. package/dist/queries/buildOrderBy.js.map +1 -1
  150. package/dist/queries/buildQuery.d.ts +3 -2
  151. package/dist/queries/buildQuery.d.ts.map +1 -1
  152. package/dist/queries/buildQuery.js +4 -2
  153. package/dist/queries/buildQuery.js.map +1 -1
  154. package/dist/queries/getTableColumnFromPath.d.ts +15 -5
  155. package/dist/queries/getTableColumnFromPath.d.ts.map +1 -1
  156. package/dist/queries/getTableColumnFromPath.js +226 -56
  157. package/dist/queries/getTableColumnFromPath.js.map +1 -1
  158. package/dist/queries/operatorMap.d.ts +7 -3
  159. package/dist/queries/operatorMap.d.ts.map +1 -1
  160. package/dist/queries/operatorMap.js.map +1 -1
  161. package/dist/queries/parseParams.d.ts +3 -2
  162. package/dist/queries/parseParams.d.ts.map +1 -1
  163. package/dist/queries/parseParams.js +266 -11
  164. package/dist/queries/parseParams.js.map +1 -1
  165. package/dist/queries/resolveRelationshipPath.d.ts +36 -0
  166. package/dist/queries/resolveRelationshipPath.d.ts.map +1 -0
  167. package/dist/queries/resolveRelationshipPath.js +66 -0
  168. package/dist/queries/resolveRelationshipPath.js.map +1 -0
  169. package/dist/queries/validateOperatorHandlers.d.ts +8 -0
  170. package/dist/queries/validateOperatorHandlers.d.ts.map +1 -0
  171. package/dist/queries/validateOperatorHandlers.js +30 -0
  172. package/dist/queries/validateOperatorHandlers.js.map +1 -0
  173. package/dist/queryDrafts.d.ts.map +1 -1
  174. package/dist/queryDrafts.js +27 -5
  175. package/dist/queryDrafts.js.map +1 -1
  176. package/dist/schema/build.d.ts.map +1 -1
  177. package/dist/schema/build.js +28 -20
  178. package/dist/schema/build.js.map +1 -1
  179. package/dist/schema/traverseFields.js +5 -5
  180. package/dist/schema/traverseFields.js.map +1 -1
  181. package/dist/sqlite/createJSONQuery/convertPathToJSONTraversal.js +3 -2
  182. package/dist/sqlite/createJSONQuery/convertPathToJSONTraversal.js.map +1 -1
  183. package/dist/sqlite/createJSONQuery/index.d.ts.map +1 -1
  184. package/dist/sqlite/createJSONQuery/index.js +6 -5
  185. package/dist/sqlite/createJSONQuery/index.js.map +1 -1
  186. package/dist/sqlite/createRequireDrizzleKit.d.ts +6 -0
  187. package/dist/sqlite/createRequireDrizzleKit.d.ts.map +1 -0
  188. package/dist/sqlite/createRequireDrizzleKit.js +15 -0
  189. package/dist/sqlite/createRequireDrizzleKit.js.map +1 -0
  190. package/dist/sqlite/execute.js.map +1 -1
  191. package/dist/sqlite/insert.d.ts.map +1 -1
  192. package/dist/sqlite/insert.js +9 -4
  193. package/dist/sqlite/insert.js.map +1 -1
  194. package/dist/sqlite/predefinedMigrations/sizes-to-variants/index.d.ts +15 -0
  195. package/dist/sqlite/predefinedMigrations/sizes-to-variants/index.d.ts.map +1 -0
  196. package/dist/sqlite/predefinedMigrations/sizes-to-variants/index.js +114 -0
  197. package/dist/sqlite/predefinedMigrations/sizes-to-variants/index.js.map +1 -0
  198. package/dist/sqlite/types.d.ts +4 -0
  199. package/dist/sqlite/types.d.ts.map +1 -1
  200. package/dist/sqlite/types.js.map +1 -1
  201. package/dist/transactions/beginTransaction.d.ts.map +1 -1
  202. package/dist/transactions/beginTransaction.js +13 -5
  203. package/dist/transactions/beginTransaction.js.map +1 -1
  204. package/dist/transactions/commitTransaction.d.ts.map +1 -1
  205. package/dist/transactions/commitTransaction.js +1 -5
  206. package/dist/transactions/commitTransaction.js.map +1 -1
  207. package/dist/transform/read/traverseFields.js.map +1 -1
  208. package/dist/transform/write/array.d.ts +3 -2
  209. package/dist/transform/write/array.d.ts.map +1 -1
  210. package/dist/transform/write/array.js +2 -1
  211. package/dist/transform/write/array.js.map +1 -1
  212. package/dist/transform/write/blocks.d.ts +3 -2
  213. package/dist/transform/write/blocks.d.ts.map +1 -1
  214. package/dist/transform/write/blocks.js +2 -1
  215. package/dist/transform/write/blocks.js.map +1 -1
  216. package/dist/transform/write/index.d.ts.map +1 -1
  217. package/dist/transform/write/index.js +2 -0
  218. package/dist/transform/write/index.js.map +1 -1
  219. package/dist/transform/write/traverseFields.d.ts +2 -1
  220. package/dist/transform/write/traverseFields.d.ts.map +1 -1
  221. package/dist/transform/write/traverseFields.js +51 -21
  222. package/dist/transform/write/traverseFields.js.map +1 -1
  223. package/dist/transform/write/types.d.ts +7 -0
  224. package/dist/transform/write/types.d.ts.map +1 -1
  225. package/dist/transform/write/types.js.map +1 -1
  226. package/dist/types.d.ts +53 -4
  227. package/dist/types.d.ts.map +1 -1
  228. package/dist/types.js.map +1 -1
  229. package/dist/updateGlobal.d.ts +5 -1
  230. package/dist/updateGlobal.d.ts.map +1 -1
  231. package/dist/updateGlobal.js +96 -4
  232. package/dist/updateGlobal.js.map +1 -1
  233. package/dist/updateOne.d.ts.map +1 -1
  234. package/dist/updateOne.js +93 -4
  235. package/dist/updateOne.js.map +1 -1
  236. package/dist/upsertBranchGlobalChange.d.ts +3 -0
  237. package/dist/upsertBranchGlobalChange.d.ts.map +1 -0
  238. package/dist/upsertBranchGlobalChange.js +35 -0
  239. package/dist/upsertBranchGlobalChange.js.map +1 -0
  240. package/dist/upsertRow/deleteExistingRowsByPath.d.ts.map +1 -1
  241. package/dist/upsertRow/deleteExistingRowsByPath.js +17 -12
  242. package/dist/upsertRow/deleteExistingRowsByPath.js.map +1 -1
  243. package/dist/upsertRow/index.d.ts +1 -1
  244. package/dist/upsertRow/index.d.ts.map +1 -1
  245. package/dist/upsertRow/index.js +156 -46
  246. package/dist/upsertRow/index.js.map +1 -1
  247. package/dist/upsertRow/types.d.ts +3 -0
  248. package/dist/upsertRow/types.d.ts.map +1 -1
  249. package/dist/upsertRow/types.js.map +1 -1
  250. package/dist/utilities/blocksToJsonMigrator.d.ts.map +1 -1
  251. package/dist/utilities/blocksToJsonMigrator.js +7 -18
  252. package/dist/utilities/blocksToJsonMigrator.js.map +1 -1
  253. package/dist/utilities/buildCreateMigration.d.ts.map +1 -1
  254. package/dist/utilities/buildCreateMigration.js +13 -9
  255. package/dist/utilities/buildCreateMigration.js.map +1 -1
  256. package/dist/utilities/buildDynamicPredefinedSizesToVariantsMigration.d.ts +15 -0
  257. package/dist/utilities/buildDynamicPredefinedSizesToVariantsMigration.d.ts.map +1 -0
  258. package/dist/utilities/buildDynamicPredefinedSizesToVariantsMigration.js +110 -0
  259. package/dist/utilities/buildDynamicPredefinedSizesToVariantsMigration.js.map +1 -0
  260. package/dist/utilities/buildForeignKeyName.d.ts.map +1 -1
  261. package/dist/utilities/buildForeignKeyName.js +3 -2
  262. package/dist/utilities/buildForeignKeyName.js.map +1 -1
  263. package/dist/utilities/buildIndexName.d.ts.map +1 -1
  264. package/dist/utilities/buildIndexName.js +3 -2
  265. package/dist/utilities/buildIndexName.js.map +1 -1
  266. package/dist/utilities/checkTruncatedIdentifiers.d.ts +13 -0
  267. package/dist/utilities/checkTruncatedIdentifiers.d.ts.map +1 -0
  268. package/dist/utilities/checkTruncatedIdentifiers.js +56 -0
  269. package/dist/utilities/checkTruncatedIdentifiers.js.map +1 -0
  270. package/dist/utilities/createSchemaGenerator.d.ts.map +1 -1
  271. package/dist/utilities/createSchemaGenerator.js +10 -12
  272. package/dist/utilities/createSchemaGenerator.js.map +1 -1
  273. package/dist/utilities/executeSchemaHooks.js +1 -1
  274. package/dist/utilities/executeSchemaHooks.js.map +1 -1
  275. package/dist/utilities/formatGeneratedFile.d.ts +10 -0
  276. package/dist/utilities/formatGeneratedFile.d.ts.map +1 -0
  277. package/dist/utilities/formatGeneratedFile.js +58 -0
  278. package/dist/utilities/formatGeneratedFile.js.map +1 -0
  279. package/dist/utilities/getSizesToVariantsRenames.d.ts +54 -0
  280. package/dist/utilities/getSizesToVariantsRenames.d.ts.map +1 -0
  281. package/dist/utilities/getSizesToVariantsRenames.js +251 -0
  282. package/dist/utilities/getSizesToVariantsRenames.js.map +1 -0
  283. package/dist/utilities/getTransaction.js.map +1 -1
  284. package/dist/utilities/parseJSONPathSegment.d.ts +9 -0
  285. package/dist/utilities/parseJSONPathSegment.d.ts.map +1 -0
  286. package/dist/utilities/parseJSONPathSegment.js +17 -0
  287. package/dist/utilities/parseJSONPathSegment.js.map +1 -0
  288. package/dist/utilities/pushDevSchema.js +1 -1
  289. package/dist/utilities/pushDevSchema.js.map +1 -1
  290. package/dist/utilities/validateExistingBlockIsIdentical.d.ts +1 -5
  291. package/dist/utilities/validateExistingBlockIsIdentical.d.ts.map +1 -1
  292. package/dist/utilities/validateExistingBlockIsIdentical.js.map +1 -1
  293. package/dist/utilities/validateIdentifierLength.d.ts +12 -0
  294. package/dist/utilities/validateIdentifierLength.d.ts.map +1 -0
  295. package/dist/utilities/validateIdentifierLength.js +18 -0
  296. package/dist/utilities/validateIdentifierLength.js.map +1 -0
  297. package/package.json +17 -19
  298. package/dist/sqlite/requireDrizzleKit.d.ts +0 -3
  299. package/dist/sqlite/requireDrizzleKit.d.ts.map +0 -1
  300. package/dist/sqlite/requireDrizzleKit.js +0 -12
  301. package/dist/sqlite/requireDrizzleKit.js.map +0 -1
  302. package/dist/upsertRow/handleUpsertError.spec.js +0 -42
  303. package/dist/upsertRow/handleUpsertError.spec.js.map +0 -1
  304. package/dist/utilities/isValidStringID.spec.js +0 -15
  305. package/dist/utilities/isValidStringID.spec.js.map +0 -1
@@ -0,0 +1,114 @@
1
+ import { sql } from 'drizzle-orm';
2
+ import { assertNoSizesToVariantsColumnCollisions, getSizesToVariantsRenames, isGeneratedLegacyIndexName } from '../../../utilities/getSizesToVariantsRenames.js';
3
+ /**
4
+ * Moves every upload collection's stored image sizes between the legacy `sizes_*` columns and
5
+ * `variants_*` (main and versions tables), renaming each column in place so no data is copied.
6
+ * SQLite can't rename an index, so each index on a renamed column is dropped and recreated under
7
+ * the name the current schema expects. Skips columns that are already renamed, so it's safe to
8
+ * re-run.
9
+ */ export async function migrateSqliteSizesToVariants({ db, direction = 'up', payload }) {
10
+ const adapter = payload.db;
11
+ const plan = getSizesToVariantsRenames({
12
+ adapter,
13
+ direction
14
+ });
15
+ const plannedTables = [];
16
+ for (const tablePlan of plan){
17
+ const existingColumns = await getColumnNames({
18
+ db,
19
+ tableName: tablePlan.tableName
20
+ });
21
+ assertNoSizesToVariantsColumnCollisions({
22
+ columns: tablePlan.columns,
23
+ existingColumns,
24
+ tableName: tablePlan.tableName
25
+ });
26
+ plannedTables.push({
27
+ ...tablePlan,
28
+ existingColumns
29
+ });
30
+ }
31
+ for (const { columns, existingColumns, indexes, tableName } of plannedTables){
32
+ const columnsAfterRename = new Set(existingColumns);
33
+ let renamedCount = 0;
34
+ for (const { from, to } of columns){
35
+ if (!existingColumns.has(from) || existingColumns.has(to)) {
36
+ continue;
37
+ }
38
+ columnsAfterRename.delete(from);
39
+ columnsAfterRename.add(to);
40
+ await db.run(sql`
41
+ ALTER TABLE ${sql.identifier(tableName)}
42
+ RENAME COLUMN ${sql.identifier(from)} TO ${sql.identifier(to)}
43
+ `);
44
+ renamedCount++;
45
+ }
46
+ const existingIndexes = await getIndexes({
47
+ db,
48
+ tableName
49
+ });
50
+ for (const index of indexes){
51
+ if (!index.columns.every((column)=>columnsAfterRename.has(column))) {
52
+ continue;
53
+ }
54
+ const destinationIndex = existingIndexes.find(({ name })=>name === index.to);
55
+ const sourceIndex = destinationIndex ? undefined : index.from ? existingIndexes.find(({ name })=>name === index.from) : index.legacyNameBase ? existingIndexes.find(({ name, columns })=>columns.join(',') === index.columns.join(',') && isGeneratedLegacyIndexName({
56
+ indexName: name,
57
+ legacyNameBase: index.legacyNameBase
58
+ })) : undefined;
59
+ if (destinationIndex) {
60
+ if (destinationIndex.columns.join(',') !== index.columns.join(',') || destinationIndex.unique !== index.unique) {
61
+ throw new Error(`Cannot run the sizes-to-variants migration because index "${index.to}" on table "${tableName}" does not match the expected columns or uniqueness.`);
62
+ }
63
+ } else {
64
+ const unique = index.unique ? sql.raw('UNIQUE ') : sql.empty();
65
+ const columnList = sql.join(index.columns.map((column)=>sql.identifier(column)), sql.raw(', '));
66
+ await db.run(sql`
67
+ CREATE ${unique}INDEX ${sql.identifier(index.to)}
68
+ ON ${sql.identifier(tableName)} (${columnList})
69
+ `);
70
+ }
71
+ if (sourceIndex && sourceIndex.name !== index.to) {
72
+ await db.run(sql`DROP INDEX ${sql.identifier(sourceIndex.name)}`);
73
+ }
74
+ }
75
+ payload.logger.info({
76
+ msg: `sizes-to-variants (${direction}): renamed ${renamedCount} column(s) on "${tableName}"`
77
+ });
78
+ }
79
+ }
80
+ async function getColumnNames({ db, tableName }) {
81
+ const rows = await db.all(sql`SELECT name FROM pragma_table_info(${tableName})`);
82
+ return new Set(rows.map(({ name })=>name));
83
+ }
84
+ async function getIndexes({ db, tableName }) {
85
+ // `origin = 'c'` keeps only `CREATE INDEX` indexes, skipping SQLite's internal autoindexes.
86
+ const rows = await db.all(sql`
87
+ SELECT
88
+ il.name AS index_name,
89
+ il."unique" AS is_unique,
90
+ ii.name AS column_name,
91
+ ii.seqno AS seqno
92
+ FROM pragma_index_list(${tableName}) AS il
93
+ JOIN pragma_index_info(il.name) AS ii
94
+ WHERE il.origin = 'c'
95
+ ORDER BY il.name, ii.seqno
96
+ `);
97
+ const indexes = new Map();
98
+ for (const { column_name, index_name, is_unique } of rows){
99
+ const index = indexes.get(index_name) ?? {
100
+ columns: [],
101
+ unique: Boolean(is_unique)
102
+ };
103
+ index.columns.push(column_name);
104
+ indexes.set(index_name, index);
105
+ }
106
+ return [
107
+ ...indexes
108
+ ].map(([name, index])=>({
109
+ name,
110
+ ...index
111
+ }));
112
+ }
113
+
114
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/sqlite/predefinedMigrations/sizes-to-variants/index.ts"],"sourcesContent":["import type { Payload } from 'payload'\n\nimport { sql } from 'drizzle-orm'\n\nimport type { DrizzleAdapter } from '../../../types.js'\nimport type { SizesToVariantsDirection } from '../../../utilities/getSizesToVariantsRenames.js'\n\nimport {\n assertNoSizesToVariantsColumnCollisions,\n getSizesToVariantsRenames,\n isGeneratedLegacyIndexName,\n} from '../../../utilities/getSizesToVariantsRenames.js'\n\n/**\n * Moves every upload collection's stored image sizes between the legacy `sizes_*` columns and\n * `variants_*` (main and versions tables), renaming each column in place so no data is copied.\n * SQLite can't rename an index, so each index on a renamed column is dropped and recreated under\n * the name the current schema expects. Skips columns that are already renamed, so it's safe to\n * re-run.\n */\nexport async function migrateSqliteSizesToVariants({\n db,\n direction = 'up',\n payload,\n}: {\n db: any\n direction?: SizesToVariantsDirection\n payload: Payload\n}): Promise<void> {\n const adapter = payload.db as unknown as DrizzleAdapter\n const plan = getSizesToVariantsRenames({ adapter, direction })\n const plannedTables: Array<\n (typeof plan)[number] & {\n existingColumns: Set<string>\n }\n > = []\n\n for (const tablePlan of plan) {\n const existingColumns = await getColumnNames({ db, tableName: tablePlan.tableName })\n\n assertNoSizesToVariantsColumnCollisions({\n columns: tablePlan.columns,\n existingColumns,\n tableName: tablePlan.tableName,\n })\n\n plannedTables.push({ ...tablePlan, existingColumns })\n }\n\n for (const { columns, existingColumns, indexes, tableName } of plannedTables) {\n const columnsAfterRename = new Set(existingColumns)\n let renamedCount = 0\n\n for (const { from, to } of columns) {\n if (!existingColumns.has(from) || existingColumns.has(to)) {\n continue\n }\n\n columnsAfterRename.delete(from)\n columnsAfterRename.add(to)\n\n await db.run(sql`\n ALTER TABLE ${sql.identifier(tableName)}\n RENAME COLUMN ${sql.identifier(from)} TO ${sql.identifier(to)}\n `)\n renamedCount++\n }\n\n const existingIndexes = await getIndexes({ db, tableName })\n\n for (const index of indexes) {\n if (!index.columns.every((column) => columnsAfterRename.has(column))) {\n continue\n }\n\n const destinationIndex = existingIndexes.find(({ name }) => name === index.to)\n const sourceIndex = destinationIndex\n ? undefined\n : index.from\n ? existingIndexes.find(({ name }) => name === index.from)\n : index.legacyNameBase\n ? existingIndexes.find(\n ({ name, columns }) =>\n columns.join(',') === index.columns.join(',') &&\n isGeneratedLegacyIndexName({\n indexName: name,\n legacyNameBase: index.legacyNameBase,\n }),\n )\n : undefined\n\n if (destinationIndex) {\n if (\n destinationIndex.columns.join(',') !== index.columns.join(',') ||\n destinationIndex.unique !== index.unique\n ) {\n throw new Error(\n `Cannot run the sizes-to-variants migration because index \"${index.to}\" on table \"${tableName}\" does not match the expected columns or uniqueness.`,\n )\n }\n } else {\n const unique = index.unique ? sql.raw('UNIQUE ') : sql.empty()\n const columnList = sql.join(\n index.columns.map((column) => sql.identifier(column)),\n sql.raw(', '),\n )\n\n await db.run(sql`\n CREATE ${unique}INDEX ${sql.identifier(index.to)}\n ON ${sql.identifier(tableName)} (${columnList})\n `)\n }\n\n if (sourceIndex && sourceIndex.name !== index.to) {\n await db.run(sql`DROP INDEX ${sql.identifier(sourceIndex.name)}`)\n }\n }\n\n payload.logger.info({\n msg: `sizes-to-variants (${direction}): renamed ${renamedCount} column(s) on \"${tableName}\"`,\n })\n }\n}\n\nasync function getColumnNames({\n db,\n tableName,\n}: {\n db: any\n tableName: string\n}): Promise<Set<string>> {\n const rows: { name: string }[] = await db.all(\n sql`SELECT name FROM pragma_table_info(${tableName})`,\n )\n\n return new Set(rows.map(({ name }) => name))\n}\n\nasync function getIndexes({\n db,\n tableName,\n}: {\n db: any\n tableName: string\n}): Promise<{ columns: string[]; name: string; unique: boolean }[]> {\n // `origin = 'c'` keeps only `CREATE INDEX` indexes, skipping SQLite's internal autoindexes.\n const rows: { column_name: string; index_name: string; is_unique: number; seqno: number }[] =\n await db.all(sql`\n SELECT\n il.name AS index_name,\n il.\"unique\" AS is_unique,\n ii.name AS column_name,\n ii.seqno AS seqno\n FROM pragma_index_list(${tableName}) AS il\n JOIN pragma_index_info(il.name) AS ii\n WHERE il.origin = 'c'\n ORDER BY il.name, ii.seqno\n `)\n\n const indexes = new Map<string, { columns: string[]; unique: boolean }>()\n\n for (const { column_name, index_name, is_unique } of rows) {\n const index = indexes.get(index_name) ?? { columns: [], unique: Boolean(is_unique) }\n\n index.columns.push(column_name)\n indexes.set(index_name, index)\n }\n\n return [...indexes].map(([name, index]) => ({ name, ...index }))\n}\n"],"names":["sql","assertNoSizesToVariantsColumnCollisions","getSizesToVariantsRenames","isGeneratedLegacyIndexName","migrateSqliteSizesToVariants","db","direction","payload","adapter","plan","plannedTables","tablePlan","existingColumns","getColumnNames","tableName","columns","push","indexes","columnsAfterRename","Set","renamedCount","from","to","has","delete","add","run","identifier","existingIndexes","getIndexes","index","every","column","destinationIndex","find","name","sourceIndex","undefined","legacyNameBase","join","indexName","unique","Error","raw","empty","columnList","map","logger","info","msg","rows","all","Map","column_name","index_name","is_unique","get","Boolean","set"],"mappings":"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"}
@@ -97,6 +97,10 @@ export type Execute<T> = (args: {
97
97
  }) => SQLiteRaw<Promise<T>> | SQLiteRaw<ResultSet>;
98
98
  export type Insert = (args: {
99
99
  db: LibSQLDatabase;
100
+ onConflictDoNothing?: {
101
+ target?: SQLiteColumn | SQLiteColumn[];
102
+ where?: SQL;
103
+ };
100
104
  onConflictDoUpdate?: SQLiteInsertOnConflictDoUpdateConfig<any>;
101
105
  tableName: string;
102
106
  values: Record<string, unknown> | Record<string, unknown>[];
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/sqlite/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/sqlite/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/sqlite/types.ts"],"sourcesContent":["import type { Client, ResultSet } from '@libsql/client'\nimport type { DrizzleConfig, Relation, Relations, SQL } from 'drizzle-orm'\nimport type { DrizzleD1Database } from 'drizzle-orm/d1'\nimport type { LibSQLDatabase } from 'drizzle-orm/libsql'\nimport type {\n AnySQLiteColumn,\n SQLiteColumn,\n SQLiteInsertOnConflictDoUpdateConfig,\n SQLiteTableWithColumns,\n SQLiteTransactionConfig,\n} from 'drizzle-orm/sqlite-core'\nimport type { SQLiteRaw } from 'drizzle-orm/sqlite-core/query-builders/raw'\nimport type { Payload, PayloadRequest } from 'payload'\n\nimport type { Operators } from '../queries/operatorMap.js'\nimport type { BuildQueryJoinAliases, DrizzleAdapter } from '../types.js'\nimport type { extendDrizzleTable } from '../utilities/extendDrizzleTable.js'\n\ntype SQLiteSchema = {\n relations: Record<string, GenericRelation>\n tables: Record<string, SQLiteTableWithColumns<any>>\n}\n\ntype SQLiteSchemaHookArgs = {\n extendTable: typeof extendDrizzleTable\n schema: SQLiteSchema\n}\n\nexport type SQLiteSchemaHook = (args: SQLiteSchemaHookArgs) => Promise<SQLiteSchema> | SQLiteSchema\n\nexport type BaseSQLiteArgs = {\n /**\n * Transform the schema after it's built.\n * You can use it to customize the schema with features that aren't supported by Payload.\n * Examples may include: composite indices, generated columns, vectors\n */\n afterSchemaInit?: SQLiteSchemaHook[]\n /**\n * Enable this flag if you want to thread your own ID to create operation data, for example:\n * ```ts\n * // doc created with id 1\n * const doc = await payload.create({ collection: 'posts', data: {id: 1, title: \"my title\"}})\n * ```\n */\n allowIDOnCreate?: boolean\n /**\n * Enable [AUTOINCREMENT](https://www.sqlite.org/autoinc.html) for Primary Keys.\n * This ensures that the same ID cannot be reused from previously deleted rows.\n */\n autoIncrement?: boolean\n /**\n * Transform the schema before it's built.\n * You can use it to preserve an existing database schema and if there are any collissions Payload will override them.\n * To generate Drizzle schema from the database, see [Drizzle Kit introspection](https://orm.drizzle.team/kit-docs/commands#introspect--pull)\n */\n beforeSchemaInit?: SQLiteSchemaHook[]\n /**\n * Store blocks as JSON column instead of storing them in a relational structure.\n */\n blocksAsJSON?: boolean\n /** Generated schema from payload generate:db-schema file path */\n generateSchemaOutputFile?: string\n idType?: 'number' | 'uuid' | 'uuidv7'\n localesSuffix?: string\n logger?: DrizzleConfig['logger']\n migrationDir?: string\n prodMigrations?: {\n down: (args: MigrateDownArgs) => Promise<void>\n name: string\n up: (args: MigrateUpArgs) => Promise<void>\n }[]\n push?: boolean\n relationshipsSuffix?: string\n schemaName?: string\n transactionOptions?: false | SQLiteTransactionConfig\n versionsSuffix?: string\n}\n\nexport type GenericColumns = {\n [x: string]: AnySQLiteColumn\n}\n\nexport type GenericTable = SQLiteTableWithColumns<{\n columns: GenericColumns\n dialect: string\n name: string\n schema: string\n}>\n\nexport type GenericRelation = Relations<string, Record<string, Relation<string>>>\n\nexport type CountDistinct = (args: {\n column?: SQLiteColumn<any>\n db: LibSQLDatabase\n joins: BuildQueryJoinAliases\n tableName: string\n where: SQL\n}) => Promise<number>\n\nexport type DeleteWhere = (args: {\n db: LibSQLDatabase\n tableName: string\n where: SQL\n}) => Promise<void>\n\nexport type DropDatabase = (args: { adapter: BaseSQLiteAdapter }) => Promise<void>\n\nexport type Execute<T> = (args: {\n db?: DrizzleD1Database | LibSQLDatabase\n drizzle?: DrizzleD1Database | LibSQLDatabase\n raw?: string\n sql?: SQL<unknown>\n}) => SQLiteRaw<Promise<T>> | SQLiteRaw<ResultSet>\n\nexport type Insert = (args: {\n db: LibSQLDatabase\n onConflictDoUpdate?: SQLiteInsertOnConflictDoUpdateConfig<any>\n tableName: string\n values: Record<string, unknown> | Record<string, unknown>[]\n}) => Promise<Record<string, unknown>[]>\n\n// Explicitly omit drizzle property for complete override in SQLiteAdapter, required in ts 5.5\ntype SQLiteDrizzleAdapter = Omit<\n DrizzleAdapter,\n | 'countDistinct'\n | 'deleteWhere'\n | 'drizzle'\n | 'dropDatabase'\n | 'execute'\n | 'idType'\n | 'insert'\n | 'operators'\n | 'relations'\n>\n\nexport interface GeneratedDatabaseSchema {\n schemaUntyped: Record<string, unknown>\n}\n\ntype ResolveSchemaType<T> = 'schema' extends keyof T\n ? T['schema']\n : GeneratedDatabaseSchema['schemaUntyped']\n\ntype Drizzle = { $client: Client } & LibSQLDatabase<ResolveSchemaType<GeneratedDatabaseSchema>>\n\nexport type BaseSQLiteAdapter = {\n afterSchemaInit: SQLiteSchemaHook[]\n autoIncrement: boolean\n beforeSchemaInit: SQLiteSchemaHook[]\n client: Client\n countDistinct: CountDistinct\n defaultDrizzleSnapshot: any\n deleteWhere: DeleteWhere\n dropDatabase: DropDatabase\n execute: Execute<unknown>\n /**\n * An object keyed on each table, with a key value pair where the constraint name is the key, followed by the dot-notation field name\n * Used for returning properly formed errors from unique fields\n */\n fieldConstraints: Record<string, Record<string, string>>\n idType: BaseSQLiteArgs['idType']\n initializing: Promise<void>\n insert: Insert\n localesSuffix?: string\n logger: DrizzleConfig['logger']\n operators: Operators\n prodMigrations?: {\n down: (args: MigrateDownArgs) => Promise<void>\n name: string\n up: (args: MigrateUpArgs) => Promise<void>\n }[]\n push: boolean\n rejectInitializing: () => void\n relations: Record<string, GenericRelation>\n relationshipsSuffix?: string\n resolveInitializing: () => void\n schema: Record<string, GenericRelation | GenericTable>\n schemaName?: BaseSQLiteArgs['schemaName']\n tableNameMap: Map<string, string>\n tables: Record<string, GenericTable>\n transactionOptions: SQLiteTransactionConfig\n versionsSuffix?: string\n} & SQLiteDrizzleAdapter\n\nexport type IDType = 'integer' | 'numeric' | 'text'\n\nexport type MigrateUpArgs = {\n /**\n * The SQLite Drizzle instance that you can use to execute SQL directly within the current transaction.\n * @example\n * ```ts\n * import { type MigrateUpArgs, sql } from '@payloadcms/db-sqlite'\n *\n * export async function up({ db, payload, req }: MigrateUpArgs): Promise<void> {\n * const { rows: posts } = await db.run(sql`SELECT * FROM posts`)\n * }\n * ```\n */\n db: Drizzle\n /**\n * The Payload instance that you can use to execute Local API methods\n * To use the current transaction you must pass `req` to arguments\n * @example\n * ```ts\n * import { type MigrateUpArgs } from '@payloadcms/db-sqlite'\n *\n * export async function up({ db, payload, req }: MigrateUpArgs): Promise<void> {\n * const posts = await payload.find({ collection: 'posts', req })\n * }\n * ```\n */\n payload: Payload\n /**\n * The `PayloadRequest` object that contains the current transaction\n */\n req: PayloadRequest\n}\nexport type MigrateDownArgs = {\n /**\n * The SQLite Drizzle instance that you can use to execute SQL directly within the current transaction.\n * @example\n * ```ts\n * import { type MigrateDownArgs, sql } from '@payloadcms/db-sqlite'\n *\n * export async function down({ db, payload, req }: MigrateDownArgs): Promise<void> {\n * const { rows: posts } = await db.run(sql`SELECT * FROM posts`)\n * }\n * ```\n */\n db: Drizzle\n /**\n * The Payload instance that you can use to execute Local API methods\n * To use the current transaction you must pass `req` to arguments\n * @example\n * ```ts\n * import { type MigrateDownArgs } from '@payloadcms/db-sqlite'\n *\n * export async function down({ db, payload, req }: MigrateDownArgs): Promise<void> {\n * const posts = await payload.find({ collection: 'posts', req })\n * }\n * ```\n */\n payload: Payload\n /**\n * The `PayloadRequest` object that contains the current transaction\n */\n req: PayloadRequest\n}\n"],"names":[],"mappings":"AAyNA,WA8BC"}
1
+ {"version":3,"sources":["../../src/sqlite/types.ts"],"sourcesContent":["import type { Client, ResultSet } from '@libsql/client'\nimport type { DrizzleConfig, Relation, Relations, SQL } from 'drizzle-orm'\nimport type { DrizzleD1Database } from 'drizzle-orm/d1'\nimport type { LibSQLDatabase } from 'drizzle-orm/libsql'\nimport type {\n AnySQLiteColumn,\n SQLiteColumn,\n SQLiteInsertOnConflictDoUpdateConfig,\n SQLiteTableWithColumns,\n SQLiteTransactionConfig,\n} from 'drizzle-orm/sqlite-core'\nimport type { SQLiteRaw } from 'drizzle-orm/sqlite-core/query-builders/raw'\nimport type { Payload, PayloadRequest } from 'payload'\n\nimport type { Operators } from '../queries/operatorMap.js'\nimport type { BuildQueryJoinAliases, DrizzleAdapter } from '../types.js'\nimport type { extendDrizzleTable } from '../utilities/extendDrizzleTable.js'\n\ntype SQLiteSchema = {\n relations: Record<string, GenericRelation>\n tables: Record<string, SQLiteTableWithColumns<any>>\n}\n\ntype SQLiteSchemaHookArgs = {\n extendTable: typeof extendDrizzleTable\n schema: SQLiteSchema\n}\n\nexport type SQLiteSchemaHook = (args: SQLiteSchemaHookArgs) => Promise<SQLiteSchema> | SQLiteSchema\n\nexport type BaseSQLiteArgs = {\n /**\n * Transform the schema after it's built.\n * You can use it to customize the schema with features that aren't supported by Payload.\n * Examples may include: composite indices, generated columns, vectors\n */\n afterSchemaInit?: SQLiteSchemaHook[]\n /**\n * Enable this flag if you want to thread your own ID to create operation data, for example:\n * ```ts\n * // doc created with id 1\n * const doc = await payload.create({ collection: 'posts', data: {id: 1, title: \"my title\"}})\n * ```\n */\n allowIDOnCreate?: boolean\n /**\n * Enable [AUTOINCREMENT](https://www.sqlite.org/autoinc.html) for Primary Keys.\n * This ensures that the same ID cannot be reused from previously deleted rows.\n */\n autoIncrement?: boolean\n /**\n * Transform the schema before it's built.\n * You can use it to preserve an existing database schema and if there are any collissions Payload will override them.\n * To generate Drizzle schema from the database, see [Drizzle Kit introspection](https://orm.drizzle.team/kit-docs/commands#introspect--pull)\n */\n beforeSchemaInit?: SQLiteSchemaHook[]\n /**\n * Store blocks as JSON column instead of storing them in a relational structure.\n */\n blocksAsJSON?: boolean\n /** Generated schema from payload generate:db-schema file path */\n generateSchemaOutputFile?: string\n idType?: 'number' | 'uuid' | 'uuidv7'\n localesSuffix?: string\n logger?: DrizzleConfig['logger']\n migrationDir?: string\n prodMigrations?: {\n down: (args: MigrateDownArgs) => Promise<void>\n name: string\n up: (args: MigrateUpArgs) => Promise<void>\n }[]\n push?: boolean\n relationshipsSuffix?: string\n schemaName?: string\n transactionOptions?: false | SQLiteTransactionConfig\n versionsSuffix?: string\n}\n\nexport type GenericColumns = {\n [x: string]: AnySQLiteColumn\n}\n\nexport type GenericTable = SQLiteTableWithColumns<{\n columns: GenericColumns\n dialect: string\n name: string\n schema: string\n}>\n\nexport type GenericRelation = Relations<string, Record<string, Relation<string>>>\n\nexport type CountDistinct = (args: {\n column?: SQLiteColumn<any>\n db: LibSQLDatabase\n joins: BuildQueryJoinAliases\n tableName: string\n where: SQL\n}) => Promise<number>\n\nexport type DeleteWhere = (args: {\n db: LibSQLDatabase\n tableName: string\n where: SQL\n}) => Promise<void>\n\nexport type DropDatabase = (args: { adapter: BaseSQLiteAdapter }) => Promise<void>\n\nexport type Execute<T> = (args: {\n db?: DrizzleD1Database | LibSQLDatabase\n drizzle?: DrizzleD1Database | LibSQLDatabase\n raw?: string\n sql?: SQL<unknown>\n}) => SQLiteRaw<Promise<T>> | SQLiteRaw<ResultSet>\n\nexport type Insert = (args: {\n db: LibSQLDatabase\n onConflictDoNothing?: {\n target?: SQLiteColumn | SQLiteColumn[]\n where?: SQL\n }\n onConflictDoUpdate?: SQLiteInsertOnConflictDoUpdateConfig<any>\n tableName: string\n values: Record<string, unknown> | Record<string, unknown>[]\n}) => Promise<Record<string, unknown>[]>\n\n// Explicitly omit drizzle property for complete override in SQLiteAdapter, required in ts 5.5\ntype SQLiteDrizzleAdapter = Omit<\n DrizzleAdapter,\n | 'countDistinct'\n | 'deleteWhere'\n | 'drizzle'\n | 'dropDatabase'\n | 'execute'\n | 'idType'\n | 'insert'\n | 'operators'\n | 'relations'\n>\n\nexport interface GeneratedDatabaseSchema {\n schemaUntyped: Record<string, unknown>\n}\n\ntype ResolveSchemaType<T> = 'schema' extends keyof T\n ? T['schema']\n : GeneratedDatabaseSchema['schemaUntyped']\n\ntype Drizzle = { $client: Client } & LibSQLDatabase<ResolveSchemaType<GeneratedDatabaseSchema>>\n\nexport type BaseSQLiteAdapter = {\n afterSchemaInit: SQLiteSchemaHook[]\n autoIncrement: boolean\n beforeSchemaInit: SQLiteSchemaHook[]\n client: Client\n countDistinct: CountDistinct\n defaultDrizzleSnapshot: any\n deleteWhere: DeleteWhere\n dropDatabase: DropDatabase\n execute: Execute<unknown>\n /**\n * An object keyed on each table, with a key value pair where the constraint name is the key, followed by the dot-notation field name\n * Used for returning properly formed errors from unique fields\n */\n fieldConstraints: Record<string, Record<string, string>>\n idType: BaseSQLiteArgs['idType']\n initializing: Promise<void>\n insert: Insert\n localesSuffix?: string\n logger: DrizzleConfig['logger']\n operators: Operators\n prodMigrations?: {\n down: (args: MigrateDownArgs) => Promise<void>\n name: string\n up: (args: MigrateUpArgs) => Promise<void>\n }[]\n push: boolean\n rejectInitializing: () => void\n relations: Record<string, GenericRelation>\n relationshipsSuffix?: string\n resolveInitializing: () => void\n schema: Record<string, GenericRelation | GenericTable>\n schemaName?: BaseSQLiteArgs['schemaName']\n tableNameMap: Map<string, string>\n tables: Record<string, GenericTable>\n transactionOptions: SQLiteTransactionConfig\n versionsSuffix?: string\n} & SQLiteDrizzleAdapter\n\nexport type IDType = 'integer' | 'numeric' | 'text'\n\nexport type MigrateUpArgs = {\n /**\n * The SQLite Drizzle instance that you can use to execute SQL directly within the current transaction.\n * @example\n * ```ts\n * import { type MigrateUpArgs, sql } from '@payloadcms/db-sqlite'\n *\n * export async function up({ db, payload, req }: MigrateUpArgs): Promise<void> {\n * const { rows: posts } = await db.run(sql`SELECT * FROM posts`)\n * }\n * ```\n */\n db: Drizzle\n /**\n * The Payload instance that you can use to execute Local API methods\n * To use the current transaction you must pass `req` to arguments\n * @example\n * ```ts\n * import { type MigrateUpArgs } from '@payloadcms/db-sqlite'\n *\n * export async function up({ db, payload, req }: MigrateUpArgs): Promise<void> {\n * const posts = await payload.find({ collection: 'posts', req })\n * }\n * ```\n */\n payload: Payload\n /**\n * The `PayloadRequest` object that contains the current transaction\n */\n req: PayloadRequest\n}\nexport type MigrateDownArgs = {\n /**\n * The SQLite Drizzle instance that you can use to execute SQL directly within the current transaction.\n * @example\n * ```ts\n * import { type MigrateDownArgs, sql } from '@payloadcms/db-sqlite'\n *\n * export async function down({ db, payload, req }: MigrateDownArgs): Promise<void> {\n * const { rows: posts } = await db.run(sql`SELECT * FROM posts`)\n * }\n * ```\n */\n db: Drizzle\n /**\n * The Payload instance that you can use to execute Local API methods\n * To use the current transaction you must pass `req` to arguments\n * @example\n * ```ts\n * import { type MigrateDownArgs } from '@payloadcms/db-sqlite'\n *\n * export async function down({ db, payload, req }: MigrateDownArgs): Promise<void> {\n * const posts = await payload.find({ collection: 'posts', req })\n * }\n * ```\n */\n payload: Payload\n /**\n * The `PayloadRequest` object that contains the current transaction\n */\n req: PayloadRequest\n}\n"],"names":[],"mappings":"AA6NA,WA8BC"}
@@ -1 +1 @@
1
- {"version":3,"file":"beginTransaction.d.ts","sourceRoot":"","sources":["../../src/transactions/beginTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAM/C,eAAO,MAAM,gBAAgB,EAAE,gBAgE9B,CAAA"}
1
+ {"version":3,"file":"beginTransaction.d.ts","sourceRoot":"","sources":["../../src/transactions/beginTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAM/C,eAAO,MAAM,gBAAgB,EAAE,gBAwE9B,CAAA"}
@@ -8,6 +8,8 @@ export const beginTransaction = async function beginTransaction(options) {
8
8
  let transaction;
9
9
  let transactionReady;
10
10
  let transactionFailed;
11
+ let hasTransactionStarted = false;
12
+ const rollbackSignal = new Error('Payload transaction rollback requested');
11
13
  // Await initialization here
12
14
  // Prevent race conditions where the adapter may be
13
15
  // re-initializing, and `this.drizzle` is potentially undefined
@@ -25,20 +27,26 @@ export const beginTransaction = async function beginTransaction(options) {
25
27
  return done;
26
28
  };
27
29
  reject = ()=>{
28
- // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors
29
- rej();
30
+ rej(rollbackSignal);
30
31
  return done;
31
32
  };
32
33
  transactionReady();
33
34
  });
34
35
  }, options || this.transactionOptions).catch((err)=>{
35
- // Connection failed before callback ran - reject instead of hanging forever
36
- transactionFailed(err);
36
+ if (!hasTransactionStarted) {
37
+ // Connection failed before callback ran - reject instead of hanging forever
38
+ transactionFailed(err);
39
+ } else if (err !== rollbackSignal) {
40
+ throw err;
41
+ }
37
42
  });
38
43
  // Need to wait until the transaction is ready
39
44
  // before binding its `resolve` and `reject` methods below
40
45
  await new Promise((res, rej)=>{
41
- transactionReady = res;
46
+ transactionReady = ()=>{
47
+ hasTransactionStarted = true;
48
+ res();
49
+ };
42
50
  transactionFailed = rej;
43
51
  });
44
52
  this.sessions[id] = {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/transactions/beginTransaction.ts"],"sourcesContent":["import type { BeginTransaction } from 'payload'\n\nimport { v4 as uuid } from 'uuid'\n\nimport type { DrizzleAdapter, DrizzleTransaction } from '../types.js'\n\nexport const beginTransaction: BeginTransaction = async function beginTransaction(\n this: DrizzleAdapter,\n options: DrizzleAdapter['transactionOptions'],\n) {\n let id\n try {\n id = uuid()\n\n let reject: () => Promise<void>\n let resolve: () => Promise<void>\n let transaction: DrizzleTransaction\n\n let transactionReady: () => void\n let transactionFailed: (err: unknown) => void\n\n // Await initialization here\n // Prevent race conditions where the adapter may be\n // re-initializing, and `this.drizzle` is potentially undefined\n await this.initializing\n\n // Drizzle only exposes a transactions API that is sufficient if you\n // can directly pass around the `tx` argument. But our operations are spread\n // over many files and we don't want to pass the `tx` around like that,\n // so instead, we \"lift\" up the `resolve` and `reject` methods\n // and will call them in our respective transaction methods\n const done = this.drizzle\n .transaction(async (tx) => {\n transaction = tx\n await new Promise<void>((res, rej) => {\n resolve = () => {\n res()\n return done\n }\n reject = () => {\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\n rej()\n return done\n }\n transactionReady()\n })\n }, options || this.transactionOptions)\n .catch((err) => {\n // Connection failed before callback ran - reject instead of hanging forever\n transactionFailed(err)\n })\n\n // Need to wait until the transaction is ready\n // before binding its `resolve` and `reject` methods below\n await new Promise<void>((res, rej) => {\n transactionReady = res\n transactionFailed = rej\n })\n\n this.sessions[id] = {\n db: transaction,\n reject,\n resolve,\n }\n } catch (err) {\n this.payload.logger.error({ err, msg: `Error: cannot begin transaction: ${err.message}` })\n throw new Error(`Error: cannot begin transaction: ${err.message}`)\n }\n\n return id\n}\n"],"names":["v4","uuid","beginTransaction","options","id","reject","resolve","transaction","transactionReady","transactionFailed","initializing","done","drizzle","tx","Promise","res","rej","transactionOptions","catch","err","sessions","db","payload","logger","error","msg","message","Error"],"mappings":"AAEA,SAASA,MAAMC,IAAI,QAAQ,OAAM;AAIjC,OAAO,MAAMC,mBAAqC,eAAeA,iBAE/DC,OAA6C;IAE7C,IAAIC;IACJ,IAAI;QACFA,KAAKH;QAEL,IAAII;QACJ,IAAIC;QACJ,IAAIC;QAEJ,IAAIC;QACJ,IAAIC;QAEJ,4BAA4B;QAC5B,mDAAmD;QACnD,+DAA+D;QAC/D,MAAM,IAAI,CAACC,YAAY;QAEvB,oEAAoE;QACpE,4EAA4E;QAC5E,uEAAuE;QACvE,8DAA8D;QAC9D,2DAA2D;QAC3D,MAAMC,OAAO,IAAI,CAACC,OAAO,CACtBL,WAAW,CAAC,OAAOM;YAClBN,cAAcM;YACd,MAAM,IAAIC,QAAc,CAACC,KAAKC;gBAC5BV,UAAU;oBACRS;oBACA,OAAOJ;gBACT;gBACAN,SAAS;oBACP,2EAA2E;oBAC3EW;oBACA,OAAOL;gBACT;gBACAH;YACF;QACF,GAAGL,WAAW,IAAI,CAACc,kBAAkB,EACpCC,KAAK,CAAC,CAACC;YACN,4EAA4E;YAC5EV,kBAAkBU;QACpB;QAEF,8CAA8C;QAC9C,0DAA0D;QAC1D,MAAM,IAAIL,QAAc,CAACC,KAAKC;YAC5BR,mBAAmBO;YACnBN,oBAAoBO;QACtB;QAEA,IAAI,CAACI,QAAQ,CAAChB,GAAG,GAAG;YAClBiB,IAAId;YACJF;YACAC;QACF;IACF,EAAE,OAAOa,KAAK;QACZ,IAAI,CAACG,OAAO,CAACC,MAAM,CAACC,KAAK,CAAC;YAAEL;YAAKM,KAAK,CAAC,iCAAiC,EAAEN,IAAIO,OAAO,EAAE;QAAC;QACxF,MAAM,IAAIC,MAAM,CAAC,iCAAiC,EAAER,IAAIO,OAAO,EAAE;IACnE;IAEA,OAAOtB;AACT,EAAC"}
1
+ {"version":3,"sources":["../../src/transactions/beginTransaction.ts"],"sourcesContent":["import type { BeginTransaction } from 'payload'\n\nimport { v4 as uuid } from 'uuid'\n\nimport type { DrizzleAdapter, DrizzleTransaction } from '../types.js'\n\nexport const beginTransaction: BeginTransaction = async function beginTransaction(\n this: DrizzleAdapter,\n options: DrizzleAdapter['transactionOptions'],\n) {\n let id\n try {\n id = uuid()\n\n let reject: () => Promise<void>\n let resolve: () => Promise<void>\n let transaction: DrizzleTransaction\n\n let transactionReady: () => void\n let transactionFailed: (err: unknown) => void\n let hasTransactionStarted = false\n const rollbackSignal = new Error('Payload transaction rollback requested')\n\n // Await initialization here\n // Prevent race conditions where the adapter may be\n // re-initializing, and `this.drizzle` is potentially undefined\n await this.initializing\n\n // Drizzle only exposes a transactions API that is sufficient if you\n // can directly pass around the `tx` argument. But our operations are spread\n // over many files and we don't want to pass the `tx` around like that,\n // so instead, we \"lift\" up the `resolve` and `reject` methods\n // and will call them in our respective transaction methods\n const done = this.drizzle\n .transaction(async (tx) => {\n transaction = tx\n await new Promise<void>((res, rej) => {\n resolve = () => {\n res()\n return done\n }\n reject = () => {\n rej(rollbackSignal)\n return done\n }\n transactionReady()\n })\n }, options || this.transactionOptions)\n .catch((err) => {\n if (!hasTransactionStarted) {\n // Connection failed before callback ran - reject instead of hanging forever\n transactionFailed(err)\n } else if (err !== rollbackSignal) {\n throw err\n }\n })\n\n // Need to wait until the transaction is ready\n // before binding its `resolve` and `reject` methods below\n await new Promise<void>((res, rej) => {\n transactionReady = () => {\n hasTransactionStarted = true\n res()\n }\n transactionFailed = rej\n })\n\n this.sessions[id] = {\n db: transaction,\n reject,\n resolve,\n }\n } catch (err) {\n this.payload.logger.error({ err, msg: `Error: cannot begin transaction: ${err.message}` })\n throw new Error(`Error: cannot begin transaction: ${err.message}`)\n }\n\n return id\n}\n"],"names":["v4","uuid","beginTransaction","options","id","reject","resolve","transaction","transactionReady","transactionFailed","hasTransactionStarted","rollbackSignal","Error","initializing","done","drizzle","tx","Promise","res","rej","transactionOptions","catch","err","sessions","db","payload","logger","error","msg","message"],"mappings":"AAEA,SAASA,MAAMC,IAAI,QAAQ,OAAM;AAIjC,OAAO,MAAMC,mBAAqC,eAAeA,iBAE/DC,OAA6C;IAE7C,IAAIC;IACJ,IAAI;QACFA,KAAKH;QAEL,IAAII;QACJ,IAAIC;QACJ,IAAIC;QAEJ,IAAIC;QACJ,IAAIC;QACJ,IAAIC,wBAAwB;QAC5B,MAAMC,iBAAiB,IAAIC,MAAM;QAEjC,4BAA4B;QAC5B,mDAAmD;QACnD,+DAA+D;QAC/D,MAAM,IAAI,CAACC,YAAY;QAEvB,oEAAoE;QACpE,4EAA4E;QAC5E,uEAAuE;QACvE,8DAA8D;QAC9D,2DAA2D;QAC3D,MAAMC,OAAO,IAAI,CAACC,OAAO,CACtBR,WAAW,CAAC,OAAOS;YAClBT,cAAcS;YACd,MAAM,IAAIC,QAAc,CAACC,KAAKC;gBAC5Bb,UAAU;oBACRY;oBACA,OAAOJ;gBACT;gBACAT,SAAS;oBACPc,IAAIR;oBACJ,OAAOG;gBACT;gBACAN;YACF;QACF,GAAGL,WAAW,IAAI,CAACiB,kBAAkB,EACpCC,KAAK,CAAC,CAACC;YACN,IAAI,CAACZ,uBAAuB;gBAC1B,4EAA4E;gBAC5ED,kBAAkBa;YACpB,OAAO,IAAIA,QAAQX,gBAAgB;gBACjC,MAAMW;YACR;QACF;QAEF,8CAA8C;QAC9C,0DAA0D;QAC1D,MAAM,IAAIL,QAAc,CAACC,KAAKC;YAC5BX,mBAAmB;gBACjBE,wBAAwB;gBACxBQ;YACF;YACAT,oBAAoBU;QACtB;QAEA,IAAI,CAACI,QAAQ,CAACnB,GAAG,GAAG;YAClBoB,IAAIjB;YACJF;YACAC;QACF;IACF,EAAE,OAAOgB,KAAK;QACZ,IAAI,CAACG,OAAO,CAACC,MAAM,CAACC,KAAK,CAAC;YAAEL;YAAKM,KAAK,CAAC,iCAAiC,EAAEN,IAAIO,OAAO,EAAE;QAAC;QACxF,MAAM,IAAIjB,MAAM,CAAC,iCAAiC,EAAEU,IAAIO,OAAO,EAAE;IACnE;IAEA,OAAOzB;AACT,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"commitTransaction.d.ts","sourceRoot":"","sources":["../../src/transactions/commitTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAEhD,eAAO,MAAM,iBAAiB,EAAE,iBAqB/B,CAAA"}
1
+ {"version":3,"file":"commitTransaction.d.ts","sourceRoot":"","sources":["../../src/transactions/commitTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAEhD,eAAO,MAAM,iBAAiB,EAAE,iBAiB/B,CAAA"}
@@ -8,11 +8,7 @@ export const commitTransaction = async function commitTransaction(incomingID = '
8
8
  // Delete from registry FIRST to prevent race conditions
9
9
  // This ensures other operations can't retrieve this session while we're ending it
10
10
  delete this.sessions[transactionID];
11
- try {
12
- await session.resolve();
13
- } catch (_) {
14
- await session.reject();
15
- }
11
+ await session.resolve();
16
12
  };
17
13
 
18
14
  //# sourceMappingURL=commitTransaction.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/transactions/commitTransaction.ts"],"sourcesContent":["import type { CommitTransaction } from 'payload'\n\nexport const commitTransaction: CommitTransaction = async function commitTransaction(\n incomingID = '',\n) {\n const transactionID = incomingID instanceof Promise ? await incomingID : incomingID\n\n // if the session was deleted it has already been aborted\n if (!this.sessions[transactionID]) {\n return\n }\n\n const session = this.sessions[transactionID]\n\n // Delete from registry FIRST to prevent race conditions\n // This ensures other operations can't retrieve this session while we're ending it\n delete this.sessions[transactionID]\n\n try {\n await session.resolve()\n } catch (_) {\n await session.reject()\n }\n}\n"],"names":["commitTransaction","incomingID","transactionID","Promise","sessions","session","resolve","_","reject"],"mappings":"AAEA,OAAO,MAAMA,oBAAuC,eAAeA,kBACjEC,aAAa,EAAE;IAEf,MAAMC,gBAAgBD,sBAAsBE,UAAU,MAAMF,aAAaA;IAEzE,yDAAyD;IACzD,IAAI,CAAC,IAAI,CAACG,QAAQ,CAACF,cAAc,EAAE;QACjC;IACF;IAEA,MAAMG,UAAU,IAAI,CAACD,QAAQ,CAACF,cAAc;IAE5C,wDAAwD;IACxD,kFAAkF;IAClF,OAAO,IAAI,CAACE,QAAQ,CAACF,cAAc;IAEnC,IAAI;QACF,MAAMG,QAAQC,OAAO;IACvB,EAAE,OAAOC,GAAG;QACV,MAAMF,QAAQG,MAAM;IACtB;AACF,EAAC"}
1
+ {"version":3,"sources":["../../src/transactions/commitTransaction.ts"],"sourcesContent":["import type { CommitTransaction } from 'payload'\n\nexport const commitTransaction: CommitTransaction = async function commitTransaction(\n incomingID = '',\n) {\n const transactionID = incomingID instanceof Promise ? await incomingID : incomingID\n\n // if the session was deleted it has already been aborted\n if (!this.sessions[transactionID]) {\n return\n }\n\n const session = this.sessions[transactionID]\n\n // Delete from registry FIRST to prevent race conditions\n // This ensures other operations can't retrieve this session while we're ending it\n delete this.sessions[transactionID]\n\n await session.resolve()\n}\n"],"names":["commitTransaction","incomingID","transactionID","Promise","sessions","session","resolve"],"mappings":"AAEA,OAAO,MAAMA,oBAAuC,eAAeA,kBACjEC,aAAa,EAAE;IAEf,MAAMC,gBAAgBD,sBAAsBE,UAAU,MAAMF,aAAaA;IAEzE,yDAAyD;IACzD,IAAI,CAAC,IAAI,CAACG,QAAQ,CAACF,cAAc,EAAE;QACjC;IACF;IAEA,MAAMG,UAAU,IAAI,CAACD,QAAQ,CAACF,cAAc;IAE5C,wDAAwD;IACxD,kFAAkF;IAClF,OAAO,IAAI,CAACE,QAAQ,CAACF,cAAc;IAEnC,MAAMG,QAAQC,OAAO;AACvB,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/transform/read/traverseFields.ts"],"sourcesContent":["import type { FlattenedBlock, FlattenedField, JoinQuery, SanitizedConfig } from 'payload'\n\nimport { fieldIsVirtual, fieldShouldBeLocalized } from 'payload/shared'\nimport toSnakeCase from 'to-snake-case'\n\nimport type { DrizzleAdapter } from '../../types.js'\nimport type { BlocksMap } from '../../utilities/createBlocksMap.js'\n\nimport { getArrayRelationName } from '../../utilities/getArrayRelationName.js'\nimport { resolveBlockTableName } from '../../utilities/validateExistingBlockIsIdentical.js'\nimport { transformHasManyNumber } from './hasManyNumber.js'\nimport { transformHasManyText } from './hasManyText.js'\nimport { transformRelationship } from './relationship.js'\n\ntype TraverseFieldsArgs = {\n /**\n * The DB adapter\n */\n adapter: DrizzleAdapter\n /**\n * Pre-formatted blocks map\n */\n blocks: BlocksMap\n /**\n * The full Payload config\n */\n config: SanitizedConfig\n currentTableName: string\n /**\n * The data reference to be mutated within this recursive function\n */\n dataRef: Record<string, unknown>\n /**\n * Data that needs to be removed from the result after all fields have populated\n */\n deletions: (() => void)[]\n /**\n * Column prefix can be built up by group and named tab fields\n */\n fieldPrefix: string\n /**\n * An array of Payload fields to traverse\n */\n fields: FlattenedField[]\n /**\n *\n */\n joinQuery?: JoinQuery\n /**\n * All hasMany number fields, as returned by Drizzle, keyed on an object by field path\n */\n numbers: Record<string, Record<string, unknown>[]>\n parentIsLocalized: boolean\n /**\n * The current field path (in dot notation), used to merge in relationships\n */\n path: string\n /**\n * All related documents, as returned by Drizzle, keyed on an object by field path\n */\n relationships: Record<string, Record<string, unknown>[]>\n /**\n * Data structure representing the nearest table from db\n */\n table: Record<string, unknown>\n tablePath: string\n /**\n * All hasMany text fields, as returned by Drizzle, keyed on an object by field path\n */\n texts: Record<string, Record<string, unknown>[]>\n topLevelTableName: string\n /**\n * Set to a locale if this group of fields is within a localized array or block.\n */\n withinArrayOrBlockLocale?: string\n}\n\n// Traverse fields recursively, transforming data\n// for each field type into required Payload shape\nexport const traverseFields = <T extends Record<string, unknown>>({\n adapter,\n blocks,\n config,\n currentTableName,\n dataRef,\n deletions,\n fieldPrefix,\n fields,\n joinQuery,\n numbers,\n parentIsLocalized,\n path,\n relationships,\n table,\n tablePath,\n texts,\n topLevelTableName,\n withinArrayOrBlockLocale,\n}: TraverseFieldsArgs): T => {\n const sanitizedPath = path ? `${path}.` : path\n const localeCodes =\n adapter.payload.config.localization && adapter.payload.config.localization.localeCodes\n\n const formatted = fields.reduce((result, field) => {\n if (fieldIsVirtual(field)) {\n return result\n }\n\n const fieldName = `${fieldPrefix || ''}${field.name}`\n let fieldData = table[fieldName]\n const localizedFieldData = {}\n const valuesToTransform: {\n ref: Record<string, unknown>\n table: Record<string, unknown>\n }[] = []\n\n if (fieldPrefix) {\n deletions.push(() => delete table[fieldName])\n }\n\n const isLocalized = fieldShouldBeLocalized({ field, parentIsLocalized })\n\n if (field.type === 'array') {\n const arrayTableName = adapter.tableNameMap.get(\n `${currentTableName}_${tablePath}${toSnakeCase(field.name)}`,\n )\n\n fieldData = table[getArrayRelationName({ field, path: fieldName, tableName: arrayTableName })]\n\n if (Array.isArray(fieldData)) {\n if (isLocalized) {\n result[field.name] = fieldData.reduce((arrayResult, row) => {\n if (typeof row._locale === 'string') {\n if (!arrayResult[row._locale]) {\n arrayResult[row._locale] = []\n }\n const locale = row._locale\n const data = {}\n delete row._locale\n if (row._uuid) {\n row.id = row._uuid\n delete row._uuid\n }\n\n const rowResult = traverseFields<T>({\n adapter,\n blocks,\n config,\n currentTableName: arrayTableName,\n dataRef: data,\n deletions,\n fieldPrefix: '',\n fields: field.flattenedFields,\n numbers,\n parentIsLocalized: parentIsLocalized || field.localized,\n path: `${sanitizedPath}${field.name}.${row._order - 1}`,\n relationships,\n table: row,\n tablePath: '',\n texts,\n topLevelTableName,\n withinArrayOrBlockLocale: locale,\n })\n\n if ('_order' in rowResult) {\n delete rowResult._order\n }\n\n arrayResult[locale].push(rowResult)\n }\n\n return arrayResult\n }, {})\n } else {\n result[field.name] = fieldData.reduce((acc, row, i) => {\n if (row._uuid) {\n row.id = row._uuid\n delete row._uuid\n }\n\n if ('_order' in row) {\n delete row._order\n }\n\n if (\n !withinArrayOrBlockLocale ||\n (withinArrayOrBlockLocale && withinArrayOrBlockLocale === row._locale)\n ) {\n if (row._locale) {\n delete row._locale\n }\n\n acc.push(\n traverseFields<T>({\n adapter,\n blocks,\n config,\n currentTableName: arrayTableName,\n dataRef: row,\n deletions,\n fieldPrefix: '',\n fields: field.flattenedFields,\n numbers,\n parentIsLocalized: parentIsLocalized || field.localized,\n path: `${sanitizedPath}${field.name}.${i}`,\n relationships,\n table: row,\n tablePath: '',\n texts,\n topLevelTableName,\n withinArrayOrBlockLocale,\n }),\n )\n }\n\n return acc\n }, [])\n }\n }\n\n return result\n }\n\n if (field.type === 'blocks' && !adapter.blocksAsJSON) {\n const blockFieldPath = `${sanitizedPath}${field.name}`\n const blocksByPath = blocks[blockFieldPath]\n\n if (Array.isArray(blocksByPath)) {\n if (isLocalized) {\n result[field.name] = {}\n\n blocksByPath.forEach((row) => {\n if (row._uuid) {\n row.id = row._uuid\n delete row._uuid\n }\n if (typeof row._locale === 'string') {\n if (!result[field.name][row._locale]) {\n result[field.name][row._locale] = []\n }\n result[field.name][row._locale].push(row)\n delete row._locale\n }\n })\n\n Object.entries(result[field.name]).forEach(([locale, localizedBlocks]) => {\n result[field.name][locale] = localizedBlocks.map((row) => {\n const block =\n adapter.payload.blocks[row.blockType] ??\n (field.blocks.find(\n (block) => typeof block !== 'string' && block.slug === row.blockType,\n ) as FlattenedBlock | undefined)\n\n const tableName = resolveBlockTableName(\n block,\n adapter.tableNameMap.get(`${topLevelTableName}_blocks_${toSnakeCase(block.slug)}`),\n )\n\n if (block) {\n const blockResult = traverseFields<T>({\n adapter,\n blocks,\n config,\n currentTableName: tableName,\n dataRef: row,\n deletions,\n fieldPrefix: '',\n fields: block.flattenedFields,\n numbers,\n parentIsLocalized: parentIsLocalized || field.localized,\n path: `${blockFieldPath}.${row._order - 1}`,\n relationships,\n table: row,\n tablePath: '',\n texts,\n topLevelTableName,\n withinArrayOrBlockLocale: locale,\n })\n\n delete blockResult._order\n return blockResult\n }\n\n return {}\n })\n })\n } else {\n // Add locale-specific index to have a proper blockFieldPath for current locale\n // because blocks can be in the same array for different locales!\n if (withinArrayOrBlockLocale && config.localization) {\n for (const locale of config.localization.localeCodes) {\n let localeIndex = 0\n\n for (let i = 0; i < blocksByPath.length; i++) {\n const row = blocksByPath[i]\n if (row._locale === locale) {\n row._index = localeIndex\n localeIndex++\n }\n }\n }\n }\n\n result[field.name] = blocksByPath.reduce((acc, row, i) => {\n delete row._order\n if (row._uuid) {\n row.id = row._uuid\n delete row._uuid\n }\n\n if (typeof row.blockType !== 'string') {\n return acc\n }\n\n const block =\n adapter.payload.blocks[row.blockType] ??\n (field.blocks.find(\n (block) => typeof block !== 'string' && block.slug === row.blockType,\n ) as FlattenedBlock | undefined)\n\n if (block) {\n if (\n !withinArrayOrBlockLocale ||\n (withinArrayOrBlockLocale && withinArrayOrBlockLocale === row._locale)\n ) {\n if (row._locale) {\n delete row._locale\n }\n if (typeof row._index === 'number') {\n i = row._index\n delete row._index\n }\n\n const tableName = resolveBlockTableName(\n block,\n adapter.tableNameMap.get(\n `${topLevelTableName}_blocks_${toSnakeCase(block.slug)}`,\n ),\n )\n\n acc.push(\n traverseFields<T>({\n adapter,\n blocks,\n config,\n currentTableName: tableName,\n dataRef: row,\n deletions,\n fieldPrefix: '',\n fields: block.flattenedFields,\n numbers,\n parentIsLocalized: parentIsLocalized || field.localized,\n path: `${blockFieldPath}.${i}`,\n relationships,\n table: row,\n tablePath: '',\n texts,\n topLevelTableName,\n withinArrayOrBlockLocale,\n }),\n )\n\n return acc\n }\n } else {\n acc.push({})\n }\n\n return acc\n }, [])\n }\n }\n\n return result\n }\n\n if (\n (field.type === 'relationship' || field.type === 'upload') &&\n (Array.isArray(field.relationTo) || field.hasMany)\n ) {\n const relationPathMatch = relationships[`${sanitizedPath}${field.name}`]\n\n if (!relationPathMatch) {\n if ('hasMany' in field && field.hasMany) {\n if (isLocalized && config.localization && config.localization.locales) {\n result[field.name] = {\n [config.localization.defaultLocale]: [],\n }\n } else {\n result[field.name] = []\n }\n }\n\n return result\n }\n\n if (isLocalized) {\n result[field.name] = {}\n const relationsByLocale: Record<string, Record<string, unknown>[]> = {}\n\n relationPathMatch.forEach((row) => {\n if (typeof row.locale === 'string') {\n if (!relationsByLocale[row.locale]) {\n relationsByLocale[row.locale] = []\n }\n relationsByLocale[row.locale].push(row)\n }\n })\n\n Object.entries(relationsByLocale).forEach(([locale, relations]) => {\n transformRelationship({\n field,\n locale,\n ref: result,\n relations,\n })\n })\n } else {\n transformRelationship({\n field,\n ref: result,\n relations: relationPathMatch,\n withinArrayOrBlockLocale,\n })\n }\n return result\n }\n\n if (field.type === 'join') {\n const { count, limit = field.defaultLimit ?? 10 } =\n joinQuery?.[`${fieldPrefix.replaceAll('_', '.')}${field.name}`] || {}\n\n // raw hasMany results from SQLite\n if (typeof fieldData === 'string') {\n fieldData = JSON.parse(fieldData)\n }\n\n let fieldResult:\n | { docs: unknown[]; hasNextPage: boolean; totalDocs?: number }\n | Record<string, { docs: unknown[]; hasNextPage: boolean; totalDocs?: number }>\n if (Array.isArray(fieldData)) {\n if (isLocalized && adapter.payload.config.localization) {\n fieldResult = fieldData.reduce(\n (joinResult, row) => {\n if (typeof row.locale === 'string') {\n joinResult[row.locale].docs.push(row.id)\n }\n\n return joinResult\n },\n\n // initialize with defaults so empty won't be undefined\n adapter.payload.config.localization.localeCodes.reduce((acc, code) => {\n acc[code] = {\n docs: [],\n hasNextPage: false,\n }\n return acc\n }, {}),\n )\n Object.keys(fieldResult).forEach((locale) => {\n fieldResult[locale].hasNextPage = fieldResult[locale].docs.length > limit\n fieldResult[locale].docs = fieldResult[locale].docs.slice(0, limit)\n })\n } else {\n const hasNextPage = limit !== 0 && fieldData.length > limit\n fieldResult = {\n docs: (hasNextPage ? fieldData.slice(0, limit) : fieldData).map(\n ({ id, relationTo }) => {\n if (relationTo) {\n return { relationTo, value: id }\n }\n return { id }\n },\n ),\n hasNextPage,\n }\n }\n }\n\n if (count) {\n const countPath = `${fieldName}_count`\n if (typeof table[countPath] !== 'undefined') {\n let value = Number(table[countPath])\n if (Number.isNaN(value)) {\n value = 0\n }\n fieldResult.totalDocs = value\n }\n }\n\n result[field.name] = fieldResult\n return result\n }\n\n if (field.type === 'text' && field?.hasMany) {\n const textPathMatch = texts[`${sanitizedPath}${field.name}`]\n if (!textPathMatch) {\n result[field.name] =\n isLocalized && localeCodes\n ? Object.fromEntries(localeCodes.map((locale) => [locale, []]))\n : []\n return result\n }\n\n if (isLocalized) {\n result[field.name] = {}\n const textsByLocale: Record<string, Record<string, unknown>[]> = {}\n\n textPathMatch.forEach((row) => {\n if (typeof row.locale === 'string') {\n if (!textsByLocale[row.locale]) {\n textsByLocale[row.locale] = []\n }\n textsByLocale[row.locale].push(row)\n }\n })\n\n Object.entries(textsByLocale).forEach(([locale, texts]) => {\n transformHasManyText({\n field,\n locale,\n ref: result,\n textRows: texts,\n })\n })\n } else {\n transformHasManyText({\n field,\n ref: result,\n textRows: textPathMatch,\n withinArrayOrBlockLocale,\n })\n }\n\n return result\n }\n\n if (field.type === 'number' && field.hasMany) {\n const numberPathMatch = numbers[`${sanitizedPath}${field.name}`]\n if (!numberPathMatch) {\n result[field.name] =\n isLocalized && localeCodes\n ? Object.fromEntries(localeCodes.map((locale) => [locale, []]))\n : []\n return result\n }\n\n if (isLocalized) {\n result[field.name] = {}\n const numbersByLocale: Record<string, Record<string, unknown>[]> = {}\n\n numberPathMatch.forEach((row) => {\n if (typeof row.locale === 'string') {\n if (!numbersByLocale[row.locale]) {\n numbersByLocale[row.locale] = []\n }\n numbersByLocale[row.locale].push(row)\n }\n })\n\n Object.entries(numbersByLocale).forEach(([locale, numbers]) => {\n transformHasManyNumber({\n field,\n locale,\n numberRows: numbers,\n ref: result,\n })\n })\n } else {\n transformHasManyNumber({\n field,\n numberRows: numberPathMatch,\n ref: result,\n withinArrayOrBlockLocale,\n })\n }\n\n return result\n }\n\n if (field.type === 'select' && field.hasMany) {\n if (Array.isArray(fieldData)) {\n if (isLocalized) {\n result[field.name] = fieldData.reduce((selectResult, row) => {\n if (typeof row.locale === 'string') {\n if (!selectResult[row.locale]) {\n selectResult[row.locale] = []\n }\n selectResult[row.locale].push(row.value)\n }\n\n return selectResult\n }, {})\n } else {\n let selectData = fieldData\n if (withinArrayOrBlockLocale) {\n selectData = selectData.filter(({ locale }) => locale === withinArrayOrBlockLocale)\n }\n result[field.name] = selectData.map(({ value }) => value)\n }\n }\n return result\n }\n\n if (isLocalized && Array.isArray(table._locales)) {\n if (!table._locales.length && localeCodes) {\n localeCodes.forEach((_locale) => (table._locales as unknown[]).push({ _locale }))\n }\n\n table._locales.forEach((localeRow) => {\n valuesToTransform.push({\n ref: localizedFieldData,\n table: {\n ...table,\n ...localeRow,\n },\n })\n })\n } else {\n valuesToTransform.push({ ref: result, table })\n }\n\n valuesToTransform.forEach(({ ref, table }) => {\n const fieldData = table[`${fieldPrefix || ''}${field.name}`]\n const locale = table?._locale\n let val = fieldData\n\n switch (field.type) {\n case 'date': {\n if (typeof fieldData === 'string') {\n val = new Date(fieldData).toISOString()\n }\n\n break\n }\n\n case 'group':\n case 'tab': {\n const groupFieldPrefix = `${fieldPrefix || ''}${field.name}_`\n const groupData = {}\n const locale = table._locale as string\n const refKey = isLocalized && locale ? locale : field.name\n\n if (isLocalized && locale) {\n delete table._locale\n }\n ref[refKey] = traverseFields<Record<string, unknown>>({\n adapter,\n blocks,\n config,\n currentTableName,\n dataRef: groupData as Record<string, unknown>,\n deletions,\n fieldPrefix: groupFieldPrefix,\n fields: field.flattenedFields,\n joinQuery,\n numbers,\n parentIsLocalized: parentIsLocalized || field.localized,\n path: `${sanitizedPath}${field.name}`,\n relationships,\n table,\n tablePath: `${tablePath}${toSnakeCase(field.name)}_`,\n texts,\n topLevelTableName,\n withinArrayOrBlockLocale: locale || withinArrayOrBlockLocale,\n })\n\n return\n }\n\n case 'number': {\n if (typeof fieldData === 'string') {\n val = Number.parseFloat(fieldData)\n }\n\n break\n }\n\n case 'point': {\n if (typeof fieldData === 'string') {\n val = JSON.parse(fieldData)\n }\n\n break\n }\n\n case 'relationship':\n case 'upload': {\n if (\n val &&\n typeof field.relationTo === 'string' &&\n adapter.payload.collections[field.relationTo].customIDType === 'number'\n ) {\n val = Number(val)\n }\n\n break\n }\n case 'text': {\n if (typeof fieldData === 'string') {\n val = String(fieldData)\n }\n\n break\n }\n\n default: {\n break\n }\n }\n if (typeof locale === 'string') {\n ref[locale] = val\n } else {\n result[field.name] = val\n }\n })\n\n if (Object.keys(localizedFieldData).length > 0) {\n result[field.name] = localizedFieldData\n }\n\n return result\n }, dataRef)\n\n if (Array.isArray(table._locales)) {\n deletions.push(() => delete table._locales)\n }\n\n return formatted as T\n}\n"],"names":["fieldIsVirtual","fieldShouldBeLocalized","toSnakeCase","getArrayRelationName","resolveBlockTableName","transformHasManyNumber","transformHasManyText","transformRelationship","traverseFields","adapter","blocks","config","currentTableName","dataRef","deletions","fieldPrefix","fields","joinQuery","numbers","parentIsLocalized","path","relationships","table","tablePath","texts","topLevelTableName","withinArrayOrBlockLocale","sanitizedPath","localeCodes","payload","localization","formatted","reduce","result","field","fieldName","name","fieldData","localizedFieldData","valuesToTransform","push","isLocalized","type","arrayTableName","tableNameMap","get","tableName","Array","isArray","arrayResult","row","_locale","locale","data","_uuid","id","rowResult","flattenedFields","localized","_order","acc","i","blocksAsJSON","blockFieldPath","blocksByPath","forEach","Object","entries","localizedBlocks","map","block","blockType","find","slug","blockResult","localeIndex","length","_index","relationTo","hasMany","relationPathMatch","locales","defaultLocale","relationsByLocale","relations","ref","count","limit","defaultLimit","replaceAll","JSON","parse","fieldResult","joinResult","docs","code","hasNextPage","keys","slice","value","countPath","Number","isNaN","totalDocs","textPathMatch","fromEntries","textsByLocale","textRows","numberPathMatch","numbersByLocale","numberRows","selectResult","selectData","filter","_locales","localeRow","val","Date","toISOString","groupFieldPrefix","groupData","refKey","parseFloat","collections","customIDType","String"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/transform/read/traverseFields.ts"],"sourcesContent":["import type { FlattenedBlock, FlattenedField, JoinQuery, SanitizedConfig } from 'payload'\n\nimport { fieldIsVirtual, fieldShouldBeLocalized } from 'payload/shared'\nimport toSnakeCase from 'to-snake-case'\n\nimport type { DrizzleAdapter } from '../../types.js'\nimport type { BlocksMap } from '../../utilities/createBlocksMap.js'\n\nimport { getArrayRelationName } from '../../utilities/getArrayRelationName.js'\nimport { resolveBlockTableName } from '../../utilities/validateExistingBlockIsIdentical.js'\nimport { transformHasManyNumber } from './hasManyNumber.js'\nimport { transformHasManyText } from './hasManyText.js'\nimport { transformRelationship } from './relationship.js'\n\ntype TraverseFieldsArgs = {\n /**\n * The DB adapter\n */\n adapter: DrizzleAdapter\n /**\n * Pre-formatted blocks map\n */\n blocks: BlocksMap\n /**\n * The full Payload config\n */\n config: SanitizedConfig\n currentTableName: string\n /**\n * The data reference to be mutated within this recursive function\n */\n dataRef: Record<string, unknown>\n /**\n * Data that needs to be removed from the result after all fields have populated\n */\n deletions: (() => void)[]\n /**\n * Column prefix can be built up by group and named tab fields\n */\n fieldPrefix: string\n /**\n * An array of Payload fields to traverse\n */\n fields: FlattenedField[]\n /**\n *\n */\n joinQuery?: JoinQuery\n /**\n * All hasMany number fields, as returned by Drizzle, keyed on an object by field path\n */\n numbers: Record<string, Record<string, unknown>[]>\n parentIsLocalized: boolean\n /**\n * The current field path (in dot notation), used to merge in relationships\n */\n path: string\n /**\n * All related documents, as returned by Drizzle, keyed on an object by field path\n */\n relationships: Record<string, Record<string, unknown>[]>\n /**\n * Data structure representing the nearest table from db\n */\n table: Record<string, unknown>\n tablePath: string\n /**\n * All hasMany text fields, as returned by Drizzle, keyed on an object by field path\n */\n texts: Record<string, Record<string, unknown>[]>\n topLevelTableName: string\n /**\n * Set to a locale if this group of fields is within a localized array or block.\n */\n withinArrayOrBlockLocale?: string\n}\n\n// Traverse fields recursively, transforming data\n// for each field type into required Payload shape\nexport const traverseFields = <T extends Record<string, unknown>>({\n adapter,\n blocks,\n config,\n currentTableName,\n dataRef,\n deletions,\n fieldPrefix,\n fields,\n joinQuery,\n numbers,\n parentIsLocalized,\n path,\n relationships,\n table,\n tablePath,\n texts,\n topLevelTableName,\n withinArrayOrBlockLocale,\n}: TraverseFieldsArgs): T => {\n const sanitizedPath = path ? `${path}.` : path\n const localeCodes =\n adapter.payload.config.localization && adapter.payload.config.localization.localeCodes\n\n const formatted = fields.reduce((result, field) => {\n if (fieldIsVirtual(field)) {\n return result\n }\n\n const fieldName = `${fieldPrefix || ''}${field.name}`\n let fieldData = table[fieldName]\n const localizedFieldData = {}\n const valuesToTransform: {\n ref: Record<string, unknown>\n table: Record<string, unknown>\n }[] = []\n\n if (fieldPrefix) {\n deletions.push(() => delete table[fieldName])\n }\n\n const isLocalized = fieldShouldBeLocalized({ field, parentIsLocalized })\n\n if (field.type === 'array') {\n const arrayTableName = adapter.tableNameMap.get(\n `${currentTableName}_${tablePath}${toSnakeCase(field.name)}`,\n )\n\n fieldData = table[getArrayRelationName({ field, path: fieldName, tableName: arrayTableName })]\n\n if (Array.isArray(fieldData)) {\n if (isLocalized) {\n result[field.name] = fieldData.reduce((arrayResult, row) => {\n if (typeof row._locale === 'string') {\n if (!arrayResult[row._locale]) {\n arrayResult[row._locale] = []\n }\n const locale = row._locale\n const data = {}\n delete row._locale\n if (row._uuid) {\n row.id = row._uuid\n delete row._uuid\n }\n\n const rowResult = traverseFields<T>({\n adapter,\n blocks,\n config,\n currentTableName: arrayTableName,\n dataRef: data,\n deletions,\n fieldPrefix: '',\n fields: field.flattenedFields,\n numbers,\n parentIsLocalized: parentIsLocalized || field.localized,\n path: `${sanitizedPath}${field.name}.${row._order - 1}`,\n relationships,\n table: row,\n tablePath: '',\n texts,\n topLevelTableName,\n withinArrayOrBlockLocale: locale,\n })\n\n if ('_order' in rowResult) {\n delete rowResult._order\n }\n\n arrayResult[locale].push(rowResult)\n }\n\n return arrayResult\n }, {})\n } else {\n result[field.name] = fieldData.reduce((acc, row, i) => {\n if (row._uuid) {\n row.id = row._uuid\n delete row._uuid\n }\n\n if ('_order' in row) {\n delete row._order\n }\n\n if (\n !withinArrayOrBlockLocale ||\n (withinArrayOrBlockLocale && withinArrayOrBlockLocale === row._locale)\n ) {\n if (row._locale) {\n delete row._locale\n }\n\n acc.push(\n traverseFields<T>({\n adapter,\n blocks,\n config,\n currentTableName: arrayTableName,\n dataRef: row,\n deletions,\n fieldPrefix: '',\n fields: field.flattenedFields,\n numbers,\n parentIsLocalized: parentIsLocalized || field.localized,\n path: `${sanitizedPath}${field.name}.${i}`,\n relationships,\n table: row,\n tablePath: '',\n texts,\n topLevelTableName,\n withinArrayOrBlockLocale,\n }),\n )\n }\n\n return acc\n }, [])\n }\n }\n\n return result\n }\n\n if (field.type === 'blocks' && !adapter.blocksAsJSON) {\n const blockFieldPath = `${sanitizedPath}${field.name}`\n const blocksByPath = blocks[blockFieldPath]\n\n if (Array.isArray(blocksByPath)) {\n if (isLocalized) {\n result[field.name] = {}\n\n blocksByPath.forEach((row) => {\n if (row._uuid) {\n row.id = row._uuid\n delete row._uuid\n }\n if (typeof row._locale === 'string') {\n if (!result[field.name][row._locale]) {\n result[field.name][row._locale] = []\n }\n result[field.name][row._locale].push(row)\n delete row._locale\n }\n })\n\n Object.entries(result[field.name]).forEach(([locale, localizedBlocks]) => {\n result[field.name][locale] = localizedBlocks.map((row) => {\n const block =\n adapter.payload.blocks[row.blockType] ??\n (field.blocks.find(\n (block) => typeof block !== 'string' && block.slug === row.blockType,\n ) as FlattenedBlock | undefined)\n\n const tableName = resolveBlockTableName(\n block,\n adapter.tableNameMap.get(`${topLevelTableName}_blocks_${toSnakeCase(block.slug)}`),\n )\n\n if (block) {\n const blockResult = traverseFields<T>({\n adapter,\n blocks,\n config,\n currentTableName: tableName,\n dataRef: row,\n deletions,\n fieldPrefix: '',\n fields: block.flattenedFields,\n numbers,\n parentIsLocalized: parentIsLocalized || field.localized,\n path: `${blockFieldPath}.${row._order - 1}`,\n relationships,\n table: row,\n tablePath: '',\n texts,\n topLevelTableName,\n withinArrayOrBlockLocale: locale,\n })\n\n delete blockResult._order\n return blockResult\n }\n\n return {}\n })\n })\n } else {\n // Add locale-specific index to have a proper blockFieldPath for current locale\n // because blocks can be in the same array for different locales!\n if (withinArrayOrBlockLocale && config.localization) {\n for (const locale of config.localization.localeCodes) {\n let localeIndex = 0\n\n for (let i = 0; i < blocksByPath.length; i++) {\n const row = blocksByPath[i]\n if (row._locale === locale) {\n row._index = localeIndex\n localeIndex++\n }\n }\n }\n }\n\n result[field.name] = blocksByPath.reduce((acc, row, i) => {\n delete row._order\n if (row._uuid) {\n row.id = row._uuid\n delete row._uuid\n }\n\n if (typeof row.blockType !== 'string') {\n return acc\n }\n\n const block =\n adapter.payload.blocks[row.blockType] ??\n (field.blocks.find(\n (block) => typeof block !== 'string' && block.slug === row.blockType,\n ) as FlattenedBlock | undefined)\n\n if (block) {\n if (\n !withinArrayOrBlockLocale ||\n (withinArrayOrBlockLocale && withinArrayOrBlockLocale === row._locale)\n ) {\n if (row._locale) {\n delete row._locale\n }\n if (typeof row._index === 'number') {\n i = row._index\n delete row._index\n }\n\n const tableName = resolveBlockTableName(\n block,\n adapter.tableNameMap.get(\n `${topLevelTableName}_blocks_${toSnakeCase(block.slug)}`,\n ),\n )\n\n acc.push(\n traverseFields<T>({\n adapter,\n blocks,\n config,\n currentTableName: tableName,\n dataRef: row,\n deletions,\n fieldPrefix: '',\n fields: block.flattenedFields,\n numbers,\n parentIsLocalized: parentIsLocalized || field.localized,\n path: `${blockFieldPath}.${i}`,\n relationships,\n table: row,\n tablePath: '',\n texts,\n topLevelTableName,\n withinArrayOrBlockLocale,\n }),\n )\n\n return acc\n }\n } else {\n acc.push({})\n }\n\n return acc\n }, [])\n }\n }\n\n return result\n }\n\n if (\n (field.type === 'relationship' || field.type === 'upload') &&\n (Array.isArray(field.relationTo) || field.hasMany)\n ) {\n const relationPathMatch = relationships[`${sanitizedPath}${field.name}`]\n\n if (!relationPathMatch) {\n if ('hasMany' in field && field.hasMany) {\n if (isLocalized && config.localization && config.localization.locales) {\n result[field.name] = {\n [config.localization.defaultLocale]: [],\n }\n } else {\n result[field.name] = []\n }\n }\n\n return result\n }\n\n if (isLocalized) {\n result[field.name] = {}\n const relationsByLocale: Record<string, Record<string, unknown>[]> = {}\n\n relationPathMatch.forEach((row) => {\n if (typeof row.locale === 'string') {\n if (!relationsByLocale[row.locale]) {\n relationsByLocale[row.locale] = []\n }\n relationsByLocale[row.locale].push(row)\n }\n })\n\n Object.entries(relationsByLocale).forEach(([locale, relations]) => {\n transformRelationship({\n field,\n locale,\n ref: result,\n relations,\n })\n })\n } else {\n transformRelationship({\n field,\n ref: result,\n relations: relationPathMatch,\n withinArrayOrBlockLocale,\n })\n }\n return result\n }\n\n if (field.type === 'join') {\n const { count, limit = field.defaultLimit ?? 10 } =\n joinQuery?.[`${fieldPrefix.replaceAll('_', '.')}${field.name}`] || {}\n\n // raw hasMany results from SQLite\n if (typeof fieldData === 'string') {\n fieldData = JSON.parse(fieldData)\n }\n\n let fieldResult:\n | { docs: unknown[]; hasNextPage: boolean; totalDocs?: number }\n | Record<string, { docs: unknown[]; hasNextPage: boolean; totalDocs?: number }>\n if (Array.isArray(fieldData)) {\n if (isLocalized && adapter.payload.config.localization) {\n fieldResult = fieldData.reduce(\n (joinResult, row) => {\n if (typeof row.locale === 'string') {\n joinResult[row.locale].docs.push(row.id)\n }\n\n return joinResult\n },\n\n // initialize with defaults so empty won't be undefined\n adapter.payload.config.localization.localeCodes.reduce((acc, code) => {\n acc[code] = {\n docs: [],\n hasNextPage: false,\n }\n return acc\n }, {}),\n )\n Object.keys(fieldResult).forEach((locale) => {\n fieldResult[locale].hasNextPage = fieldResult[locale].docs.length > limit\n fieldResult[locale].docs = fieldResult[locale].docs.slice(0, limit)\n })\n } else {\n const hasNextPage = limit !== 0 && fieldData.length > limit\n fieldResult = {\n docs: (hasNextPage ? fieldData.slice(0, limit) : fieldData).map(\n ({ id, relationTo }) => {\n if (relationTo) {\n return { relationTo, value: id }\n }\n return { id }\n },\n ),\n hasNextPage,\n }\n }\n }\n\n if (count) {\n const countPath = `${fieldName}_count`\n if (typeof table[countPath] !== 'undefined') {\n let value = Number(table[countPath])\n if (Number.isNaN(value)) {\n value = 0\n }\n fieldResult.totalDocs = value\n }\n }\n\n result[field.name] = fieldResult\n return result\n }\n\n if (field.type === 'text' && field?.hasMany) {\n const textPathMatch = texts[`${sanitizedPath}${field.name}`]\n if (!textPathMatch) {\n result[field.name] =\n isLocalized && localeCodes\n ? Object.fromEntries(localeCodes.map((locale) => [locale, []]))\n : []\n return result\n }\n\n if (isLocalized) {\n result[field.name] = {}\n const textsByLocale: Record<string, Record<string, unknown>[]> = {}\n\n textPathMatch.forEach((row) => {\n if (typeof row.locale === 'string') {\n if (!textsByLocale[row.locale]) {\n textsByLocale[row.locale] = []\n }\n textsByLocale[row.locale].push(row)\n }\n })\n\n Object.entries(textsByLocale).forEach(([locale, texts]) => {\n transformHasManyText({\n field,\n locale,\n ref: result,\n textRows: texts,\n })\n })\n } else {\n transformHasManyText({\n field,\n ref: result,\n textRows: textPathMatch,\n withinArrayOrBlockLocale,\n })\n }\n\n return result\n }\n\n if (field.type === 'number' && field.hasMany) {\n const numberPathMatch = numbers[`${sanitizedPath}${field.name}`]\n if (!numberPathMatch) {\n result[field.name] =\n isLocalized && localeCodes\n ? Object.fromEntries(localeCodes.map((locale) => [locale, []]))\n : []\n return result\n }\n\n if (isLocalized) {\n result[field.name] = {}\n const numbersByLocale: Record<string, Record<string, unknown>[]> = {}\n\n numberPathMatch.forEach((row) => {\n if (typeof row.locale === 'string') {\n if (!numbersByLocale[row.locale]) {\n numbersByLocale[row.locale] = []\n }\n numbersByLocale[row.locale].push(row)\n }\n })\n\n Object.entries(numbersByLocale).forEach(([locale, numbers]) => {\n transformHasManyNumber({\n field,\n locale,\n numberRows: numbers,\n ref: result,\n })\n })\n } else {\n transformHasManyNumber({\n field,\n numberRows: numberPathMatch,\n ref: result,\n withinArrayOrBlockLocale,\n })\n }\n\n return result\n }\n\n if (field.type === 'select' && field.hasMany) {\n if (Array.isArray(fieldData)) {\n if (isLocalized) {\n result[field.name] = fieldData.reduce((selectResult, row) => {\n if (typeof row.locale === 'string') {\n if (!selectResult[row.locale]) {\n selectResult[row.locale] = []\n }\n selectResult[row.locale].push(row.value)\n }\n\n return selectResult\n }, {})\n } else {\n let selectData = fieldData\n if (withinArrayOrBlockLocale) {\n selectData = selectData.filter(({ locale }) => locale === withinArrayOrBlockLocale)\n }\n result[field.name] = selectData.map(({ value }) => value)\n }\n }\n return result\n }\n\n if (isLocalized && Array.isArray(table._locales)) {\n if (!table._locales.length && localeCodes) {\n localeCodes.forEach((_locale) => (table._locales as unknown[]).push({ _locale }))\n }\n\n table._locales.forEach((localeRow) => {\n valuesToTransform.push({\n ref: localizedFieldData,\n table: {\n ...table,\n ...localeRow,\n },\n })\n })\n } else {\n valuesToTransform.push({ ref: result, table })\n }\n\n valuesToTransform.forEach(({ ref, table }) => {\n const fieldData = table[`${fieldPrefix || ''}${field.name}`]\n const locale = table?._locale\n let val = fieldData\n\n switch (field.type) {\n case 'date': {\n if (typeof fieldData === 'string') {\n val = new Date(fieldData).toISOString()\n }\n\n break\n }\n\n case 'group':\n case 'tab': {\n const groupFieldPrefix = `${fieldPrefix || ''}${field.name}_`\n const groupData = {}\n const locale = table._locale as string\n const refKey = isLocalized && locale ? locale : field.name\n\n if (isLocalized && locale) {\n delete table._locale\n }\n ref[refKey] = traverseFields<Record<string, unknown>>({\n adapter,\n blocks,\n config,\n currentTableName,\n dataRef: groupData,\n deletions,\n fieldPrefix: groupFieldPrefix,\n fields: field.flattenedFields,\n joinQuery,\n numbers,\n parentIsLocalized: parentIsLocalized || field.localized,\n path: `${sanitizedPath}${field.name}`,\n relationships,\n table,\n tablePath: `${tablePath}${toSnakeCase(field.name)}_`,\n texts,\n topLevelTableName,\n withinArrayOrBlockLocale: locale || withinArrayOrBlockLocale,\n })\n\n return\n }\n\n case 'number': {\n if (typeof fieldData === 'string') {\n val = Number.parseFloat(fieldData)\n }\n\n break\n }\n\n case 'point': {\n if (typeof fieldData === 'string') {\n val = JSON.parse(fieldData)\n }\n\n break\n }\n\n case 'relationship':\n case 'upload': {\n if (\n val &&\n typeof field.relationTo === 'string' &&\n adapter.payload.collections[field.relationTo].customIDType === 'number'\n ) {\n val = Number(val)\n }\n\n break\n }\n case 'text': {\n if (typeof fieldData === 'string') {\n val = String(fieldData)\n }\n\n break\n }\n\n default: {\n break\n }\n }\n if (typeof locale === 'string') {\n ref[locale] = val\n } else {\n result[field.name] = val\n }\n })\n\n if (Object.keys(localizedFieldData).length > 0) {\n result[field.name] = localizedFieldData\n }\n\n return result\n }, dataRef)\n\n if (Array.isArray(table._locales)) {\n deletions.push(() => delete table._locales)\n }\n\n return formatted as T\n}\n"],"names":["fieldIsVirtual","fieldShouldBeLocalized","toSnakeCase","getArrayRelationName","resolveBlockTableName","transformHasManyNumber","transformHasManyText","transformRelationship","traverseFields","adapter","blocks","config","currentTableName","dataRef","deletions","fieldPrefix","fields","joinQuery","numbers","parentIsLocalized","path","relationships","table","tablePath","texts","topLevelTableName","withinArrayOrBlockLocale","sanitizedPath","localeCodes","payload","localization","formatted","reduce","result","field","fieldName","name","fieldData","localizedFieldData","valuesToTransform","push","isLocalized","type","arrayTableName","tableNameMap","get","tableName","Array","isArray","arrayResult","row","_locale","locale","data","_uuid","id","rowResult","flattenedFields","localized","_order","acc","i","blocksAsJSON","blockFieldPath","blocksByPath","forEach","Object","entries","localizedBlocks","map","block","blockType","find","slug","blockResult","localeIndex","length","_index","relationTo","hasMany","relationPathMatch","locales","defaultLocale","relationsByLocale","relations","ref","count","limit","defaultLimit","replaceAll","JSON","parse","fieldResult","joinResult","docs","code","hasNextPage","keys","slice","value","countPath","Number","isNaN","totalDocs","textPathMatch","fromEntries","textsByLocale","textRows","numberPathMatch","numbersByLocale","numberRows","selectResult","selectData","filter","_locales","localeRow","val","Date","toISOString","groupFieldPrefix","groupData","refKey","parseFloat","collections","customIDType","String"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import type { FlattenedArrayField } from 'payload';
2
2
  import type { DrizzleAdapter } from '../../types.js';
3
- import type { ArrayRowToInsert, BlockRowToInsert, NumberToDelete, RelationshipToDelete, TextToDelete } from './types.js';
3
+ import type { ArrayRowToInsert, BlockRowToInsert, NumberToDelete, RelationshipToDelete, RowToInsert, TextToDelete } from './types.js';
4
4
  type Args = {
5
5
  adapter: DrizzleAdapter;
6
6
  arrayTableName: string;
@@ -21,6 +21,7 @@ type Args = {
21
21
  selects: {
22
22
  [tableName: string]: Record<string, unknown>[];
23
23
  };
24
+ selectsToDelete: RowToInsert['selectsToDelete'];
24
25
  texts: Record<string, unknown>[];
25
26
  textsToDelete: TextToDelete[];
26
27
  /**
@@ -29,6 +30,6 @@ type Args = {
29
30
  */
30
31
  withinArrayOrBlockLocale?: string;
31
32
  };
32
- export declare const transformArray: ({ adapter, arrayTableName, baseTableName, blocks, blocksToDelete, data, field, locale, numbers, numbersToDelete, parentIsLocalized, path, relationships, relationshipsToDelete, selects, texts, textsToDelete, withinArrayOrBlockLocale, }: Args) => ArrayRowToInsert[];
33
+ export declare const transformArray: ({ adapter, arrayTableName, baseTableName, blocks, blocksToDelete, data, field, locale, numbers, numbersToDelete, parentIsLocalized, path, relationships, relationshipsToDelete, selects, selectsToDelete, texts, textsToDelete, withinArrayOrBlockLocale, }: Args) => ArrayRowToInsert[];
33
34
  export {};
34
35
  //# sourceMappingURL=array.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"array.d.ts","sourceRoot":"","sources":["../../../src/transform/write/array.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAA;AAIlD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,KAAK,EACV,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,oBAAoB,EACpB,YAAY,EACb,MAAM,YAAY,CAAA;AAKnB,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,cAAc,CAAA;IACvB,cAAc,EAAE,MAAM,CAAA;IACtB,aAAa,EAAE,MAAM,CAAA;IACrB,MAAM,EAAE;QACN,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,EAAE,CAAA;KACxC,CAAA;IACD,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC3B,IAAI,EAAE,OAAO,CAAA;IACb,KAAK,EAAE,mBAAmB,CAAA;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;IAClC,eAAe,EAAE,cAAc,EAAE,CAAA;IACjC,iBAAiB,EAAE,OAAO,CAAA;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;IACxC,qBAAqB,EAAE,oBAAoB,EAAE,CAAA;IAC7C,OAAO,EAAE;QACP,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;KAC/C,CAAA;IACD,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;IAChC,aAAa,EAAE,YAAY,EAAE,CAAA;IAC7B;;;OAGG;IACH,wBAAwB,CAAC,EAAE,MAAM,CAAA;CAClC,CAAA;AAED,eAAO,MAAM,cAAc,+OAmBxB,IAAI,uBAyEN,CAAA"}
1
+ {"version":3,"file":"array.d.ts","sourceRoot":"","sources":["../../../src/transform/write/array.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAA;AAIlD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,KAAK,EACV,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,oBAAoB,EACpB,WAAW,EACX,YAAY,EACb,MAAM,YAAY,CAAA;AAKnB,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,cAAc,CAAA;IACvB,cAAc,EAAE,MAAM,CAAA;IACtB,aAAa,EAAE,MAAM,CAAA;IACrB,MAAM,EAAE;QACN,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,EAAE,CAAA;KACxC,CAAA;IACD,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC3B,IAAI,EAAE,OAAO,CAAA;IACb,KAAK,EAAE,mBAAmB,CAAA;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;IAClC,eAAe,EAAE,cAAc,EAAE,CAAA;IACjC,iBAAiB,EAAE,OAAO,CAAA;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;IACxC,qBAAqB,EAAE,oBAAoB,EAAE,CAAA;IAC7C,OAAO,EAAE;QACP,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;KAC/C,CAAA;IACD,eAAe,EAAE,WAAW,CAAC,iBAAiB,CAAC,CAAA;IAC/C,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;IAChC,aAAa,EAAE,YAAY,EAAE,CAAA;IAC7B;;;OAGG;IACH,wBAAwB,CAAC,EAAE,MAAM,CAAA;CAClC,CAAA;AAED,eAAO,MAAM,cAAc,gQAoBxB,IAAI,uBA0EN,CAAA"}
@@ -1,7 +1,7 @@
1
1
  import { fieldShouldBeLocalized } from 'payload/shared';
2
2
  import { isArrayOfRows } from '../../utilities/isArrayOfRows.js';
3
3
  import { traverseFields } from './traverseFields.js';
4
- export const transformArray = ({ adapter, arrayTableName, baseTableName, blocks, blocksToDelete, data, field, locale, numbers, numbersToDelete, parentIsLocalized, path, relationships, relationshipsToDelete, selects, texts, textsToDelete, withinArrayOrBlockLocale })=>{
4
+ export const transformArray = ({ adapter, arrayTableName, baseTableName, blocks, blocksToDelete, data, field, locale, numbers, numbersToDelete, parentIsLocalized, path, relationships, relationshipsToDelete, selects, selectsToDelete, texts, textsToDelete, withinArrayOrBlockLocale })=>{
5
5
  const newRows = [];
6
6
  const hasUUID = adapter.tables[arrayTableName]._uuid;
7
7
  if (isArrayOfRows(data)) {
@@ -60,6 +60,7 @@ export const transformArray = ({ adapter, arrayTableName, baseTableName, blocks,
60
60
  relationshipsToDelete,
61
61
  row: newRow.row,
62
62
  selects,
63
+ selectsToDelete,
63
64
  texts,
64
65
  textsToDelete,
65
66
  withinArrayOrBlockLocale
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/transform/write/array.ts"],"sourcesContent":["import type { FlattenedArrayField } from 'payload'\n\nimport { fieldShouldBeLocalized } from 'payload/shared'\n\nimport type { DrizzleAdapter } from '../../types.js'\nimport type {\n ArrayRowToInsert,\n BlockRowToInsert,\n NumberToDelete,\n RelationshipToDelete,\n TextToDelete,\n} from './types.js'\n\nimport { isArrayOfRows } from '../../utilities/isArrayOfRows.js'\nimport { traverseFields } from './traverseFields.js'\n\ntype Args = {\n adapter: DrizzleAdapter\n arrayTableName: string\n baseTableName: string\n blocks: {\n [blockType: string]: BlockRowToInsert[]\n }\n blocksToDelete: Set<string>\n data: unknown\n field: FlattenedArrayField\n locale?: string\n numbers: Record<string, unknown>[]\n numbersToDelete: NumberToDelete[]\n parentIsLocalized: boolean\n path: string\n relationships: Record<string, unknown>[]\n relationshipsToDelete: RelationshipToDelete[]\n selects: {\n [tableName: string]: Record<string, unknown>[]\n }\n texts: Record<string, unknown>[]\n textsToDelete: TextToDelete[]\n /**\n * Set to a locale code if this set of fields is traversed within a\n * localized array or block field\n */\n withinArrayOrBlockLocale?: string\n}\n\nexport const transformArray = ({\n adapter,\n arrayTableName,\n baseTableName,\n blocks,\n blocksToDelete,\n data,\n field,\n locale,\n numbers,\n numbersToDelete,\n parentIsLocalized,\n path,\n relationships,\n relationshipsToDelete,\n selects,\n texts,\n textsToDelete,\n withinArrayOrBlockLocale,\n}: Args) => {\n const newRows: ArrayRowToInsert[] = []\n\n const hasUUID = adapter.tables[arrayTableName]._uuid\n\n if (isArrayOfRows(data)) {\n data.forEach((arrayRow, i) => {\n const newRow: ArrayRowToInsert = {\n arrays: {},\n arraysToPush: {},\n locales: {},\n row: {\n _order: i + 1,\n },\n }\n\n // If we have declared a _uuid field on arrays,\n // that means the ID has to be unique,\n // and our ids within arrays are not unique.\n // So move the ID to a uuid field for storage\n // and allow the database to generate a serial id automatically\n if (hasUUID) {\n newRow.row._uuid = arrayRow.id\n delete arrayRow.id\n }\n\n if (locale) {\n newRow.locales[locale] = {\n _locale: locale,\n }\n }\n\n if (fieldShouldBeLocalized({ field, parentIsLocalized }) && locale) {\n newRow.row._locale = locale\n }\n\n if (withinArrayOrBlockLocale) {\n newRow.row._locale = withinArrayOrBlockLocale\n }\n\n traverseFields({\n adapter,\n arrays: newRow.arrays,\n arraysToPush: newRow.arraysToPush,\n baseTableName,\n blocks,\n blocksToDelete,\n columnPrefix: '',\n data: arrayRow,\n fieldPrefix: '',\n fields: field.flattenedFields,\n insideArrayOrBlock: true,\n locales: newRow.locales,\n numbers,\n numbersToDelete,\n parentIsLocalized: parentIsLocalized || field.localized,\n parentTableName: arrayTableName,\n path: `${path || ''}${field.name}.${i}.`,\n relationships,\n relationshipsToAppend: [],\n relationshipsToDelete,\n row: newRow.row,\n selects,\n texts,\n textsToDelete,\n withinArrayOrBlockLocale,\n })\n\n newRows.push(newRow)\n })\n }\n\n return newRows\n}\n"],"names":["fieldShouldBeLocalized","isArrayOfRows","traverseFields","transformArray","adapter","arrayTableName","baseTableName","blocks","blocksToDelete","data","field","locale","numbers","numbersToDelete","parentIsLocalized","path","relationships","relationshipsToDelete","selects","texts","textsToDelete","withinArrayOrBlockLocale","newRows","hasUUID","tables","_uuid","forEach","arrayRow","i","newRow","arrays","arraysToPush","locales","row","_order","id","_locale","columnPrefix","fieldPrefix","fields","flattenedFields","insideArrayOrBlock","localized","parentTableName","name","relationshipsToAppend","push"],"mappings":"AAEA,SAASA,sBAAsB,QAAQ,iBAAgB;AAWvD,SAASC,aAAa,QAAQ,mCAAkC;AAChE,SAASC,cAAc,QAAQ,sBAAqB;AA+BpD,OAAO,MAAMC,iBAAiB,CAAC,EAC7BC,OAAO,EACPC,cAAc,EACdC,aAAa,EACbC,MAAM,EACNC,cAAc,EACdC,IAAI,EACJC,KAAK,EACLC,MAAM,EACNC,OAAO,EACPC,eAAe,EACfC,iBAAiB,EACjBC,IAAI,EACJC,aAAa,EACbC,qBAAqB,EACrBC,OAAO,EACPC,KAAK,EACLC,aAAa,EACbC,wBAAwB,EACnB;IACL,MAAMC,UAA8B,EAAE;IAEtC,MAAMC,UAAUnB,QAAQoB,MAAM,CAACnB,eAAe,CAACoB,KAAK;IAEpD,IAAIxB,cAAcQ,OAAO;QACvBA,KAAKiB,OAAO,CAAC,CAACC,UAAUC;YACtB,MAAMC,SAA2B;gBAC/BC,QAAQ,CAAC;gBACTC,cAAc,CAAC;gBACfC,SAAS,CAAC;gBACVC,KAAK;oBACHC,QAAQN,IAAI;gBACd;YACF;YAEA,+CAA+C;YAC/C,sCAAsC;YACtC,4CAA4C;YAC5C,6CAA6C;YAC7C,+DAA+D;YAC/D,IAAIL,SAAS;gBACXM,OAAOI,GAAG,CAACR,KAAK,GAAGE,SAASQ,EAAE;gBAC9B,OAAOR,SAASQ,EAAE;YACpB;YAEA,IAAIxB,QAAQ;gBACVkB,OAAOG,OAAO,CAACrB,OAAO,GAAG;oBACvByB,SAASzB;gBACX;YACF;YAEA,IAAIX,uBAAuB;gBAAEU;gBAAOI;YAAkB,MAAMH,QAAQ;gBAClEkB,OAAOI,GAAG,CAACG,OAAO,GAAGzB;YACvB;YAEA,IAAIU,0BAA0B;gBAC5BQ,OAAOI,GAAG,CAACG,OAAO,GAAGf;YACvB;YAEAnB,eAAe;gBACbE;gBACA0B,QAAQD,OAAOC,MAAM;gBACrBC,cAAcF,OAAOE,YAAY;gBACjCzB;gBACAC;gBACAC;gBACA6B,cAAc;gBACd5B,MAAMkB;gBACNW,aAAa;gBACbC,QAAQ7B,MAAM8B,eAAe;gBAC7BC,oBAAoB;gBACpBT,SAASH,OAAOG,OAAO;gBACvBpB;gBACAC;gBACAC,mBAAmBA,qBAAqBJ,MAAMgC,SAAS;gBACvDC,iBAAiBtC;gBACjBU,MAAM,GAAGA,QAAQ,KAAKL,MAAMkC,IAAI,CAAC,CAAC,EAAEhB,EAAE,CAAC,CAAC;gBACxCZ;gBACA6B,uBAAuB,EAAE;gBACzB5B;gBACAgB,KAAKJ,OAAOI,GAAG;gBACff;gBACAC;gBACAC;gBACAC;YACF;YAEAC,QAAQwB,IAAI,CAACjB;QACf;IACF;IAEA,OAAOP;AACT,EAAC"}
1
+ {"version":3,"sources":["../../../src/transform/write/array.ts"],"sourcesContent":["import type { FlattenedArrayField } from 'payload'\n\nimport { fieldShouldBeLocalized } from 'payload/shared'\n\nimport type { DrizzleAdapter } from '../../types.js'\nimport type {\n ArrayRowToInsert,\n BlockRowToInsert,\n NumberToDelete,\n RelationshipToDelete,\n RowToInsert,\n TextToDelete,\n} from './types.js'\n\nimport { isArrayOfRows } from '../../utilities/isArrayOfRows.js'\nimport { traverseFields } from './traverseFields.js'\n\ntype Args = {\n adapter: DrizzleAdapter\n arrayTableName: string\n baseTableName: string\n blocks: {\n [blockType: string]: BlockRowToInsert[]\n }\n blocksToDelete: Set<string>\n data: unknown\n field: FlattenedArrayField\n locale?: string\n numbers: Record<string, unknown>[]\n numbersToDelete: NumberToDelete[]\n parentIsLocalized: boolean\n path: string\n relationships: Record<string, unknown>[]\n relationshipsToDelete: RelationshipToDelete[]\n selects: {\n [tableName: string]: Record<string, unknown>[]\n }\n selectsToDelete: RowToInsert['selectsToDelete']\n texts: Record<string, unknown>[]\n textsToDelete: TextToDelete[]\n /**\n * Set to a locale code if this set of fields is traversed within a\n * localized array or block field\n */\n withinArrayOrBlockLocale?: string\n}\n\nexport const transformArray = ({\n adapter,\n arrayTableName,\n baseTableName,\n blocks,\n blocksToDelete,\n data,\n field,\n locale,\n numbers,\n numbersToDelete,\n parentIsLocalized,\n path,\n relationships,\n relationshipsToDelete,\n selects,\n selectsToDelete,\n texts,\n textsToDelete,\n withinArrayOrBlockLocale,\n}: Args) => {\n const newRows: ArrayRowToInsert[] = []\n\n const hasUUID = adapter.tables[arrayTableName]._uuid\n\n if (isArrayOfRows(data)) {\n data.forEach((arrayRow, i) => {\n const newRow: ArrayRowToInsert = {\n arrays: {},\n arraysToPush: {},\n locales: {},\n row: {\n _order: i + 1,\n },\n }\n\n // If we have declared a _uuid field on arrays,\n // that means the ID has to be unique,\n // and our ids within arrays are not unique.\n // So move the ID to a uuid field for storage\n // and allow the database to generate a serial id automatically\n if (hasUUID) {\n newRow.row._uuid = arrayRow.id\n delete arrayRow.id\n }\n\n if (locale) {\n newRow.locales[locale] = {\n _locale: locale,\n }\n }\n\n if (fieldShouldBeLocalized({ field, parentIsLocalized }) && locale) {\n newRow.row._locale = locale\n }\n\n if (withinArrayOrBlockLocale) {\n newRow.row._locale = withinArrayOrBlockLocale\n }\n\n traverseFields({\n adapter,\n arrays: newRow.arrays,\n arraysToPush: newRow.arraysToPush,\n baseTableName,\n blocks,\n blocksToDelete,\n columnPrefix: '',\n data: arrayRow,\n fieldPrefix: '',\n fields: field.flattenedFields,\n insideArrayOrBlock: true,\n locales: newRow.locales,\n numbers,\n numbersToDelete,\n parentIsLocalized: parentIsLocalized || field.localized,\n parentTableName: arrayTableName,\n path: `${path || ''}${field.name}.${i}.`,\n relationships,\n relationshipsToAppend: [],\n relationshipsToDelete,\n row: newRow.row,\n selects,\n selectsToDelete,\n texts,\n textsToDelete,\n withinArrayOrBlockLocale,\n })\n\n newRows.push(newRow)\n })\n }\n\n return newRows\n}\n"],"names":["fieldShouldBeLocalized","isArrayOfRows","traverseFields","transformArray","adapter","arrayTableName","baseTableName","blocks","blocksToDelete","data","field","locale","numbers","numbersToDelete","parentIsLocalized","path","relationships","relationshipsToDelete","selects","selectsToDelete","texts","textsToDelete","withinArrayOrBlockLocale","newRows","hasUUID","tables","_uuid","forEach","arrayRow","i","newRow","arrays","arraysToPush","locales","row","_order","id","_locale","columnPrefix","fieldPrefix","fields","flattenedFields","insideArrayOrBlock","localized","parentTableName","name","relationshipsToAppend","push"],"mappings":"AAEA,SAASA,sBAAsB,QAAQ,iBAAgB;AAYvD,SAASC,aAAa,QAAQ,mCAAkC;AAChE,SAASC,cAAc,QAAQ,sBAAqB;AAgCpD,OAAO,MAAMC,iBAAiB,CAAC,EAC7BC,OAAO,EACPC,cAAc,EACdC,aAAa,EACbC,MAAM,EACNC,cAAc,EACdC,IAAI,EACJC,KAAK,EACLC,MAAM,EACNC,OAAO,EACPC,eAAe,EACfC,iBAAiB,EACjBC,IAAI,EACJC,aAAa,EACbC,qBAAqB,EACrBC,OAAO,EACPC,eAAe,EACfC,KAAK,EACLC,aAAa,EACbC,wBAAwB,EACnB;IACL,MAAMC,UAA8B,EAAE;IAEtC,MAAMC,UAAUpB,QAAQqB,MAAM,CAACpB,eAAe,CAACqB,KAAK;IAEpD,IAAIzB,cAAcQ,OAAO;QACvBA,KAAKkB,OAAO,CAAC,CAACC,UAAUC;YACtB,MAAMC,SAA2B;gBAC/BC,QAAQ,CAAC;gBACTC,cAAc,CAAC;gBACfC,SAAS,CAAC;gBACVC,KAAK;oBACHC,QAAQN,IAAI;gBACd;YACF;YAEA,+CAA+C;YAC/C,sCAAsC;YACtC,4CAA4C;YAC5C,6CAA6C;YAC7C,+DAA+D;YAC/D,IAAIL,SAAS;gBACXM,OAAOI,GAAG,CAACR,KAAK,GAAGE,SAASQ,EAAE;gBAC9B,OAAOR,SAASQ,EAAE;YACpB;YAEA,IAAIzB,QAAQ;gBACVmB,OAAOG,OAAO,CAACtB,OAAO,GAAG;oBACvB0B,SAAS1B;gBACX;YACF;YAEA,IAAIX,uBAAuB;gBAAEU;gBAAOI;YAAkB,MAAMH,QAAQ;gBAClEmB,OAAOI,GAAG,CAACG,OAAO,GAAG1B;YACvB;YAEA,IAAIW,0BAA0B;gBAC5BQ,OAAOI,GAAG,CAACG,OAAO,GAAGf;YACvB;YAEApB,eAAe;gBACbE;gBACA2B,QAAQD,OAAOC,MAAM;gBACrBC,cAAcF,OAAOE,YAAY;gBACjC1B;gBACAC;gBACAC;gBACA8B,cAAc;gBACd7B,MAAMmB;gBACNW,aAAa;gBACbC,QAAQ9B,MAAM+B,eAAe;gBAC7BC,oBAAoB;gBACpBT,SAASH,OAAOG,OAAO;gBACvBrB;gBACAC;gBACAC,mBAAmBA,qBAAqBJ,MAAMiC,SAAS;gBACvDC,iBAAiBvC;gBACjBU,MAAM,GAAGA,QAAQ,KAAKL,MAAMmC,IAAI,CAAC,CAAC,EAAEhB,EAAE,CAAC,CAAC;gBACxCb;gBACA8B,uBAAuB,EAAE;gBACzB7B;gBACAiB,KAAKJ,OAAOI,GAAG;gBACfhB;gBACAC;gBACAC;gBACAC;gBACAC;YACF;YAEAC,QAAQwB,IAAI,CAACjB;QACf;IACF;IAEA,OAAOP;AACT,EAAC"}