@payloadcms/drizzle 3.0.0-canary.2c2c95f → 3.0.0-canary.2d0dd26

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 (336) hide show
  1. package/dist/count.d.ts.map +1 -1
  2. package/dist/count.js +2 -2
  3. package/dist/count.js.map +1 -1
  4. package/dist/countGlobalVersions.d.ts +3 -0
  5. package/dist/countGlobalVersions.d.ts.map +1 -0
  6. package/dist/countGlobalVersions.js +27 -0
  7. package/dist/countGlobalVersions.js.map +1 -0
  8. package/dist/countVersions.d.ts +3 -0
  9. package/dist/countVersions.d.ts.map +1 -0
  10. package/dist/countVersions.js +27 -0
  11. package/dist/countVersions.js.map +1 -0
  12. package/dist/create.d.ts.map +1 -1
  13. package/dist/create.js +3 -2
  14. package/dist/create.js.map +1 -1
  15. package/dist/createGlobal.js +1 -1
  16. package/dist/createGlobal.js.map +1 -1
  17. package/dist/createGlobalVersion.d.ts +1 -1
  18. package/dist/createGlobalVersion.d.ts.map +1 -1
  19. package/dist/createGlobalVersion.js +8 -3
  20. package/dist/createGlobalVersion.js.map +1 -1
  21. package/dist/createTableName.d.ts.map +1 -1
  22. package/dist/createTableName.js +6 -2
  23. package/dist/createTableName.js.map +1 -1
  24. package/dist/createVersion.d.ts +1 -1
  25. package/dist/createVersion.d.ts.map +1 -1
  26. package/dist/createVersion.js +23 -15
  27. package/dist/createVersion.js.map +1 -1
  28. package/dist/deleteMany.js +1 -1
  29. package/dist/deleteMany.js.map +1 -1
  30. package/dist/deleteOne.d.ts.map +1 -1
  31. package/dist/deleteOne.js +7 -4
  32. package/dist/deleteOne.js.map +1 -1
  33. package/dist/deleteVersions.js +2 -2
  34. package/dist/deleteVersions.js.map +1 -1
  35. package/dist/destroy.d.ts.map +1 -1
  36. package/dist/destroy.js +3 -1
  37. package/dist/destroy.js.map +1 -1
  38. package/dist/exports/postgres.d.ts +15 -0
  39. package/dist/exports/postgres.d.ts.map +1 -0
  40. package/dist/exports/postgres.js +16 -0
  41. package/dist/exports/postgres.js.map +1 -0
  42. package/dist/find/buildFindManyArgs.d.ts +15 -7
  43. package/dist/find/buildFindManyArgs.d.ts.map +1 -1
  44. package/dist/find/buildFindManyArgs.js +40 -17
  45. package/dist/find/buildFindManyArgs.js.map +1 -1
  46. package/dist/find/findMany.d.ts +2 -1
  47. package/dist/find/findMany.d.ts.map +1 -1
  48. package/dist/find/findMany.js +12 -7
  49. package/dist/find/findMany.js.map +1 -1
  50. package/dist/find/traverseFields.d.ts +18 -4
  51. package/dist/find/traverseFields.d.ts.map +1 -1
  52. package/dist/find/traverseFields.js +359 -69
  53. package/dist/find/traverseFields.js.map +1 -1
  54. package/dist/find.d.ts.map +1 -1
  55. package/dist/find.js +4 -2
  56. package/dist/find.js.map +1 -1
  57. package/dist/findGlobal.d.ts.map +1 -1
  58. package/dist/findGlobal.js +2 -1
  59. package/dist/findGlobal.js.map +1 -1
  60. package/dist/findGlobalVersions.d.ts.map +1 -1
  61. package/dist/findGlobalVersions.js +4 -3
  62. package/dist/findGlobalVersions.js.map +1 -1
  63. package/dist/findMigrationDir.d.ts.map +1 -1
  64. package/dist/findMigrationDir.js +3 -1
  65. package/dist/findMigrationDir.js.map +1 -1
  66. package/dist/findOne.d.ts +1 -1
  67. package/dist/findOne.d.ts.map +1 -1
  68. package/dist/findOne.js +3 -1
  69. package/dist/findOne.js.map +1 -1
  70. package/dist/findVersions.d.ts.map +1 -1
  71. package/dist/findVersions.js +4 -3
  72. package/dist/findVersions.js.map +1 -1
  73. package/dist/index.d.ts +5 -0
  74. package/dist/index.d.ts.map +1 -1
  75. package/dist/index.js +5 -0
  76. package/dist/index.js.map +1 -1
  77. package/dist/migrate.d.ts +1 -1
  78. package/dist/migrate.d.ts.map +1 -1
  79. package/dist/migrate.js +10 -10
  80. package/dist/migrate.js.map +1 -1
  81. package/dist/migrateDown.d.ts.map +1 -1
  82. package/dist/migrateDown.js +1 -1
  83. package/dist/migrateDown.js.map +1 -1
  84. package/dist/migrateFresh.d.ts.map +1 -1
  85. package/dist/migrateFresh.js +4 -0
  86. package/dist/migrateFresh.js.map +1 -1
  87. package/dist/migrateRefresh.d.ts.map +1 -1
  88. package/dist/migrateRefresh.js +2 -1
  89. package/dist/migrateRefresh.js.map +1 -1
  90. package/dist/migrateReset.d.ts.map +1 -1
  91. package/dist/migrateReset.js +5 -3
  92. package/dist/migrateReset.js.map +1 -1
  93. package/dist/migrateStatus.js +0 -1
  94. package/dist/migrateStatus.js.map +1 -1
  95. package/dist/postgres/countDistinct.d.ts +3 -0
  96. package/dist/postgres/countDistinct.d.ts.map +1 -0
  97. package/dist/postgres/countDistinct.js +23 -0
  98. package/dist/postgres/countDistinct.js.map +1 -0
  99. package/dist/postgres/createDatabase.d.ts +14 -0
  100. package/dist/postgres/createDatabase.d.ts.map +1 -0
  101. package/dist/postgres/createDatabase.js +76 -0
  102. package/dist/postgres/createDatabase.js.map +1 -0
  103. package/dist/postgres/createExtensions.d.ts +3 -0
  104. package/dist/postgres/createExtensions.d.ts.map +1 -0
  105. package/dist/postgres/createExtensions.js +16 -0
  106. package/dist/postgres/createExtensions.js.map +1 -0
  107. package/dist/postgres/createJSONQuery/index.d.ts +3 -0
  108. package/dist/postgres/createJSONQuery/index.d.ts.map +1 -0
  109. package/dist/postgres/createJSONQuery/index.js +42 -0
  110. package/dist/postgres/createJSONQuery/index.js.map +1 -0
  111. package/dist/postgres/createMigration.d.ts +3 -0
  112. package/dist/postgres/createMigration.d.ts.map +1 -0
  113. package/dist/postgres/createMigration.js +88 -0
  114. package/dist/postgres/createMigration.js.map +1 -0
  115. package/dist/postgres/defaultSnapshot.d.ts +3 -0
  116. package/dist/postgres/defaultSnapshot.d.ts.map +1 -0
  117. package/dist/postgres/defaultSnapshot.js +20 -0
  118. package/dist/postgres/defaultSnapshot.js.map +1 -0
  119. package/dist/postgres/deleteWhere.d.ts +3 -0
  120. package/dist/postgres/deleteWhere.d.ts.map +1 -0
  121. package/dist/postgres/deleteWhere.js +6 -0
  122. package/dist/postgres/deleteWhere.js.map +1 -0
  123. package/dist/postgres/dropDatabase.d.ts +3 -0
  124. package/dist/postgres/dropDatabase.d.ts.map +1 -0
  125. package/dist/postgres/dropDatabase.js +9 -0
  126. package/dist/postgres/dropDatabase.js.map +1 -0
  127. package/dist/postgres/execute.d.ts +3 -0
  128. package/dist/postgres/execute.d.ts.map +1 -0
  129. package/dist/postgres/execute.js +11 -0
  130. package/dist/postgres/execute.js.map +1 -0
  131. package/dist/postgres/getMigrationTemplate.d.ts +4 -0
  132. package/dist/postgres/getMigrationTemplate.d.ts.map +1 -0
  133. package/dist/postgres/getMigrationTemplate.js +13 -0
  134. package/dist/postgres/getMigrationTemplate.js.map +1 -0
  135. package/dist/postgres/init.d.ts +3 -0
  136. package/dist/postgres/init.d.ts.map +1 -0
  137. package/dist/postgres/init.js +104 -0
  138. package/dist/postgres/init.js.map +1 -0
  139. package/dist/postgres/insert.d.ts +3 -0
  140. package/dist/postgres/insert.d.ts.map +1 -0
  141. package/dist/postgres/insert.js +12 -0
  142. package/dist/postgres/insert.js.map +1 -0
  143. package/dist/postgres/requireDrizzleKit.d.ts +3 -0
  144. package/dist/postgres/requireDrizzleKit.d.ts.map +1 -0
  145. package/dist/postgres/requireDrizzleKit.js +5 -0
  146. package/dist/postgres/requireDrizzleKit.js.map +1 -0
  147. package/dist/postgres/schema/build.d.ts +42 -0
  148. package/dist/postgres/schema/build.d.ts.map +1 -0
  149. package/dist/postgres/schema/build.js +404 -0
  150. package/dist/postgres/schema/build.js.map +1 -0
  151. package/dist/postgres/schema/createIndex.d.ts +11 -0
  152. package/dist/postgres/schema/createIndex.d.ts.map +1 -0
  153. package/dist/postgres/schema/createIndex.js +20 -0
  154. package/dist/postgres/schema/createIndex.js.map +1 -0
  155. package/dist/postgres/schema/geometryColumn.d.ts +12 -0
  156. package/dist/postgres/schema/geometryColumn.d.ts.map +1 -0
  157. package/dist/postgres/schema/geometryColumn.js +18 -0
  158. package/dist/postgres/schema/geometryColumn.js.map +1 -0
  159. package/dist/postgres/schema/idToUUID.d.ts +3 -0
  160. package/dist/postgres/schema/idToUUID.d.ts.map +1 -0
  161. package/dist/postgres/schema/idToUUID.js +11 -0
  162. package/dist/postgres/schema/idToUUID.js.map +1 -0
  163. package/dist/postgres/schema/parentIDColumnMap.d.ts +4 -0
  164. package/dist/postgres/schema/parentIDColumnMap.d.ts.map +1 -0
  165. package/dist/postgres/schema/parentIDColumnMap.js +9 -0
  166. package/dist/postgres/schema/parentIDColumnMap.js.map +1 -0
  167. package/dist/postgres/schema/setColumnID.d.ts +11 -0
  168. package/dist/postgres/schema/setColumnID.d.ts.map +1 -0
  169. package/dist/postgres/schema/setColumnID.js +24 -0
  170. package/dist/postgres/schema/setColumnID.js.map +1 -0
  171. package/dist/postgres/schema/traverseFields.d.ts +42 -0
  172. package/dist/postgres/schema/traverseFields.d.ts.map +1 -0
  173. package/dist/postgres/schema/traverseFields.js +743 -0
  174. package/dist/postgres/schema/traverseFields.js.map +1 -0
  175. package/dist/postgres/schema/withDefault.d.ts +4 -0
  176. package/dist/postgres/schema/withDefault.d.ts.map +1 -0
  177. package/dist/postgres/schema/withDefault.js +15 -0
  178. package/dist/postgres/schema/withDefault.js.map +1 -0
  179. package/dist/postgres/types.d.ts +142 -0
  180. package/dist/postgres/types.d.ts.map +1 -0
  181. package/dist/postgres/types.js +3 -0
  182. package/dist/postgres/types.js.map +1 -0
  183. package/dist/queries/addJoinTable.d.ts +11 -0
  184. package/dist/queries/addJoinTable.d.ts.map +1 -0
  185. package/dist/queries/addJoinTable.js +13 -0
  186. package/dist/queries/addJoinTable.js.map +1 -0
  187. package/dist/queries/buildAndOrConditions.d.ts +1 -1
  188. package/dist/queries/buildAndOrConditions.d.ts.map +1 -1
  189. package/dist/queries/buildAndOrConditions.js +2 -4
  190. package/dist/queries/buildAndOrConditions.js.map +1 -1
  191. package/dist/queries/buildOrderBy.d.ts +18 -0
  192. package/dist/queries/buildOrderBy.d.ts.map +1 -0
  193. package/dist/queries/buildOrderBy.js +56 -0
  194. package/dist/queries/buildOrderBy.js.map +1 -0
  195. package/dist/queries/buildQuery.d.ts +8 -7
  196. package/dist/queries/buildQuery.d.ts.map +1 -1
  197. package/dist/queries/buildQuery.js +12 -47
  198. package/dist/queries/buildQuery.js.map +1 -1
  199. package/dist/queries/getTableColumnFromPath.d.ts +6 -2
  200. package/dist/queries/getTableColumnFromPath.d.ts.map +1 -1
  201. package/dist/queries/getTableColumnFromPath.js +271 -224
  202. package/dist/queries/getTableColumnFromPath.js.map +1 -1
  203. package/dist/queries/operatorMap.d.ts.map +1 -1
  204. package/dist/queries/operatorMap.js +0 -4
  205. package/dist/queries/operatorMap.js.map +1 -1
  206. package/dist/queries/parseParams.d.ts +1 -1
  207. package/dist/queries/parseParams.d.ts.map +1 -1
  208. package/dist/queries/parseParams.js +85 -6
  209. package/dist/queries/parseParams.js.map +1 -1
  210. package/dist/queries/sanitizeQueryValue.d.ts +12 -1
  211. package/dist/queries/sanitizeQueryValue.d.ts.map +1 -1
  212. package/dist/queries/sanitizeQueryValue.js +89 -25
  213. package/dist/queries/sanitizeQueryValue.js.map +1 -1
  214. package/dist/queries/selectDistinct.d.ts +3 -4
  215. package/dist/queries/selectDistinct.d.ts.map +1 -1
  216. package/dist/queries/selectDistinct.js.map +1 -1
  217. package/dist/queryDrafts.d.ts.map +1 -1
  218. package/dist/queryDrafts.js +6 -6
  219. package/dist/queryDrafts.js.map +1 -1
  220. package/dist/transactions/beginTransaction.js +7 -4
  221. package/dist/transactions/beginTransaction.js.map +1 -1
  222. package/dist/transactions/commitTransaction.d.ts.map +1 -1
  223. package/dist/transactions/commitTransaction.js +3 -1
  224. package/dist/transactions/commitTransaction.js.map +1 -1
  225. package/dist/transform/read/hasManyNumber.d.ts +2 -1
  226. package/dist/transform/read/hasManyNumber.d.ts.map +1 -1
  227. package/dist/transform/read/hasManyNumber.js +12 -2
  228. package/dist/transform/read/hasManyNumber.js.map +1 -1
  229. package/dist/transform/read/hasManyText.d.ts +2 -1
  230. package/dist/transform/read/hasManyText.d.ts.map +1 -1
  231. package/dist/transform/read/hasManyText.js +12 -2
  232. package/dist/transform/read/hasManyText.js.map +1 -1
  233. package/dist/transform/read/index.d.ts +3 -2
  234. package/dist/transform/read/index.d.ts.map +1 -1
  235. package/dist/transform/read/index.js +3 -2
  236. package/dist/transform/read/index.js.map +1 -1
  237. package/dist/transform/read/relationship.d.ts +2 -1
  238. package/dist/transform/read/relationship.d.ts.map +1 -1
  239. package/dist/transform/read/relationship.js +15 -6
  240. package/dist/transform/read/relationship.js.map +1 -1
  241. package/dist/transform/read/traverseFields.d.ts +10 -3
  242. package/dist/transform/read/traverseFields.d.ts.map +1 -1
  243. package/dist/transform/read/traverseFields.js +206 -113
  244. package/dist/transform/read/traverseFields.js.map +1 -1
  245. package/dist/transform/write/array.d.ts +6 -1
  246. package/dist/transform/write/array.d.ts.map +1 -1
  247. package/dist/transform/write/array.js +7 -3
  248. package/dist/transform/write/array.js.map +1 -1
  249. package/dist/transform/write/blocks.d.ts +8 -3
  250. package/dist/transform/write/blocks.d.ts.map +1 -1
  251. package/dist/transform/write/blocks.js +19 -7
  252. package/dist/transform/write/blocks.js.map +1 -1
  253. package/dist/transform/write/index.d.ts.map +1 -1
  254. package/dist/transform/write/index.js +1 -1
  255. package/dist/transform/write/index.js.map +1 -1
  256. package/dist/transform/write/relationships.d.ts.map +1 -1
  257. package/dist/transform/write/relationships.js +6 -2
  258. package/dist/transform/write/relationships.js.map +1 -1
  259. package/dist/transform/write/selects.d.ts.map +1 -1
  260. package/dist/transform/write/selects.js +1 -1
  261. package/dist/transform/write/selects.js.map +1 -1
  262. package/dist/transform/write/traverseFields.d.ts +6 -1
  263. package/dist/transform/write/traverseFields.d.ts.map +1 -1
  264. package/dist/transform/write/traverseFields.js +62 -19
  265. package/dist/transform/write/traverseFields.js.map +1 -1
  266. package/dist/types.d.ts +16 -14
  267. package/dist/types.d.ts.map +1 -1
  268. package/dist/types.js.map +1 -1
  269. package/dist/update.d.ts.map +1 -1
  270. package/dist/update.js +5 -3
  271. package/dist/update.js.map +1 -1
  272. package/dist/updateGlobal.d.ts +1 -1
  273. package/dist/updateGlobal.d.ts.map +1 -1
  274. package/dist/updateGlobal.js +3 -2
  275. package/dist/updateGlobal.js.map +1 -1
  276. package/dist/updateGlobalVersion.d.ts +1 -1
  277. package/dist/updateGlobalVersion.d.ts.map +1 -1
  278. package/dist/updateGlobalVersion.js +5 -4
  279. package/dist/updateGlobalVersion.js.map +1 -1
  280. package/dist/updateVersion.d.ts +1 -1
  281. package/dist/updateVersion.d.ts.map +1 -1
  282. package/dist/updateVersion.js +5 -4
  283. package/dist/updateVersion.js.map +1 -1
  284. package/dist/upsertRow/deleteExistingRowsByPath.d.ts.map +1 -1
  285. package/dist/upsertRow/deleteExistingRowsByPath.js +6 -2
  286. package/dist/upsertRow/deleteExistingRowsByPath.js.map +1 -1
  287. package/dist/upsertRow/index.d.ts +1 -1
  288. package/dist/upsertRow/index.d.ts.map +1 -1
  289. package/dist/upsertRow/index.js +52 -14
  290. package/dist/upsertRow/index.js.map +1 -1
  291. package/dist/upsertRow/insertArrays.d.ts.map +1 -1
  292. package/dist/upsertRow/insertArrays.js +5 -2
  293. package/dist/upsertRow/insertArrays.js.map +1 -1
  294. package/dist/upsertRow/types.d.ts +10 -5
  295. package/dist/upsertRow/types.d.ts.map +1 -1
  296. package/dist/upsertRow/types.js.map +1 -1
  297. package/dist/utilities/buildIndexName.d.ts +7 -0
  298. package/dist/utilities/buildIndexName.d.ts.map +1 -0
  299. package/dist/utilities/buildIndexName.js +14 -0
  300. package/dist/utilities/buildIndexName.js.map +1 -0
  301. package/dist/utilities/createBlocksMap.d.ts.map +1 -1
  302. package/dist/utilities/createBlocksMap.js +4 -2
  303. package/dist/utilities/createBlocksMap.js.map +1 -1
  304. package/dist/utilities/createRelationshipMap.d.ts.map +1 -1
  305. package/dist/utilities/createRelationshipMap.js +3 -1
  306. package/dist/utilities/createRelationshipMap.js.map +1 -1
  307. package/dist/utilities/executeSchemaHooks.d.ts +24 -0
  308. package/dist/utilities/executeSchemaHooks.d.ts.map +1 -0
  309. package/dist/utilities/executeSchemaHooks.js +21 -0
  310. package/dist/utilities/executeSchemaHooks.js.map +1 -0
  311. package/dist/utilities/extendDrizzleTable.d.ts +19 -0
  312. package/dist/utilities/extendDrizzleTable.d.ts.map +1 -0
  313. package/dist/utilities/extendDrizzleTable.js +38 -0
  314. package/dist/utilities/extendDrizzleTable.js.map +1 -0
  315. package/dist/utilities/getCollectionIdType.d.ts +7 -0
  316. package/dist/utilities/getCollectionIdType.d.ts.map +1 -0
  317. package/dist/utilities/getCollectionIdType.js +11 -0
  318. package/dist/utilities/getCollectionIdType.js.map +1 -0
  319. package/dist/utilities/getNameFromDrizzleTable.d.ts +3 -0
  320. package/dist/utilities/getNameFromDrizzleTable.d.ts.map +1 -0
  321. package/dist/utilities/getNameFromDrizzleTable.js +6 -0
  322. package/dist/utilities/getNameFromDrizzleTable.js.map +1 -0
  323. package/dist/utilities/hasLocalesTable.d.ts.map +1 -1
  324. package/dist/utilities/hasLocalesTable.js +13 -3
  325. package/dist/utilities/hasLocalesTable.js.map +1 -1
  326. package/dist/utilities/isPolymorphicRelationship.d.ts +6 -0
  327. package/dist/utilities/isPolymorphicRelationship.d.ts.map +1 -0
  328. package/dist/utilities/isPolymorphicRelationship.js +5 -0
  329. package/dist/utilities/isPolymorphicRelationship.js.map +1 -0
  330. package/dist/utilities/migrationTableExists.js +1 -1
  331. package/dist/utilities/migrationTableExists.js.map +1 -1
  332. package/dist/utilities/pushDevSchema.d.ts.map +1 -1
  333. package/dist/utilities/pushDevSchema.js +9 -2
  334. package/dist/utilities/pushDevSchema.js.map +1 -1
  335. package/license.md +22 -0
  336. package/package.json +26 -10
@@ -1,17 +1,22 @@
1
- /* eslint-disable no-param-reassign */ export const transformRelationship = ({ field, locale, ref, relations })=>{
1
+ export const transformRelationship = ({ field, locale, ref, relations, withinArrayOrBlockLocale })=>{
2
2
  let result;
3
3
  if (!('hasMany' in field) || field.hasMany === false) {
4
- const relation = relations[0];
4
+ let relation = relations[0];
5
+ if (withinArrayOrBlockLocale) {
6
+ relation = relations.find((rel)=>rel.locale === withinArrayOrBlockLocale);
7
+ }
5
8
  if (relation) {
6
9
  // Handle hasOne Poly
7
10
  if (Array.isArray(field.relationTo)) {
8
- const matchedRelation = Object.entries(relation).find(([key, val])=>val !== null && ![
11
+ const matchedRelation = Object.entries(relation).find(([key, val])=>{
12
+ return val !== null && ![
9
13
  'id',
10
14
  'locale',
11
15
  'order',
12
16
  'parent',
13
17
  'path'
14
- ].includes(key));
18
+ ].includes(key);
19
+ });
15
20
  if (matchedRelation) {
16
21
  const relationTo = matchedRelation[0].replace('ID', '');
17
22
  result = {
@@ -24,10 +29,14 @@
24
29
  } else {
25
30
  const transformedRelations = [];
26
31
  relations.forEach((relation)=>{
32
+ let matchedLocale = true;
33
+ if (withinArrayOrBlockLocale) {
34
+ matchedLocale = relation.locale === withinArrayOrBlockLocale;
35
+ }
27
36
  // Handle hasMany
28
37
  if (!Array.isArray(field.relationTo)) {
29
38
  const relatedData = relation[`${field.relationTo}ID`];
30
- if (relatedData) {
39
+ if (relatedData && matchedLocale) {
31
40
  transformedRelations.push(relatedData);
32
41
  }
33
42
  } else {
@@ -38,7 +47,7 @@
38
47
  'order',
39
48
  'parent',
40
49
  'path'
41
- ].includes(key));
50
+ ].includes(key) && matchedLocale);
42
51
  if (matchedRelation) {
43
52
  const relationTo = matchedRelation[0].replace('ID', '');
44
53
  transformedRelations.push({
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/transform/read/relationship.ts"],"sourcesContent":["/* eslint-disable no-param-reassign */\nimport type { RelationshipField, UploadField } from 'payload'\n\ntype Args = {\n field: RelationshipField | UploadField\n locale?: string\n ref: Record<string, unknown>\n relations: Record<string, unknown>[]\n}\n\nexport const transformRelationship = ({ field, locale, ref, relations }: Args) => {\n let result: unknown\n\n if (!('hasMany' in field) || field.hasMany === false) {\n const relation = relations[0]\n\n if (relation) {\n // Handle hasOne Poly\n if (Array.isArray(field.relationTo)) {\n const matchedRelation = Object.entries(relation).find(\n ([key, val]) =>\n val !== null && !['id', 'locale', 'order', 'parent', 'path'].includes(key),\n )\n\n if (matchedRelation) {\n const relationTo = matchedRelation[0].replace('ID', '')\n\n result = {\n relationTo,\n value: matchedRelation[1],\n }\n }\n }\n }\n } else {\n const transformedRelations = []\n\n relations.forEach((relation) => {\n // Handle hasMany\n if (!Array.isArray(field.relationTo)) {\n const relatedData = relation[`${field.relationTo}ID`]\n\n if (relatedData) {\n transformedRelations.push(relatedData)\n }\n } else {\n // Handle hasMany Poly\n const matchedRelation = Object.entries(relation).find(\n ([key, val]) =>\n val !== null && !['id', 'locale', 'order', 'parent', 'path'].includes(key),\n )\n\n if (matchedRelation) {\n const relationTo = matchedRelation[0].replace('ID', '')\n\n transformedRelations.push({\n relationTo,\n value: matchedRelation[1],\n })\n }\n }\n })\n\n result = transformedRelations\n }\n\n if (locale) {\n ref[field.name][locale] = result\n } else {\n ref[field.name] = result\n }\n}\n"],"names":["transformRelationship","field","locale","ref","relations","result","hasMany","relation","Array","isArray","relationTo","matchedRelation","Object","entries","find","key","val","includes","replace","value","transformedRelations","forEach","relatedData","push","name"],"mappings":"AAAA,oCAAoC,GAUpC,OAAO,MAAMA,wBAAwB,CAAC,EAAEC,KAAK,EAAEC,MAAM,EAAEC,GAAG,EAAEC,SAAS,EAAQ;IAC3E,IAAIC;IAEJ,IAAI,CAAE,CAAA,aAAaJ,KAAI,KAAMA,MAAMK,OAAO,KAAK,OAAO;QACpD,MAAMC,WAAWH,SAAS,CAAC,EAAE;QAE7B,IAAIG,UAAU;YACZ,qBAAqB;YACrB,IAAIC,MAAMC,OAAO,CAACR,MAAMS,UAAU,GAAG;gBACnC,MAAMC,kBAAkBC,OAAOC,OAAO,CAACN,UAAUO,IAAI,CACnD,CAAC,CAACC,KAAKC,IAAI,GACTA,QAAQ,QAAQ,CAAC;wBAAC;wBAAM;wBAAU;wBAAS;wBAAU;qBAAO,CAACC,QAAQ,CAACF;gBAG1E,IAAIJ,iBAAiB;oBACnB,MAAMD,aAAaC,eAAe,CAAC,EAAE,CAACO,OAAO,CAAC,MAAM;oBAEpDb,SAAS;wBACPK;wBACAS,OAAOR,eAAe,CAAC,EAAE;oBAC3B;gBACF;YACF;QACF;IACF,OAAO;QACL,MAAMS,uBAAuB,EAAE;QAE/BhB,UAAUiB,OAAO,CAAC,CAACd;YACjB,iBAAiB;YACjB,IAAI,CAACC,MAAMC,OAAO,CAACR,MAAMS,UAAU,GAAG;gBACpC,MAAMY,cAAcf,QAAQ,CAAC,CAAC,EAAEN,MAAMS,UAAU,CAAC,EAAE,CAAC,CAAC;gBAErD,IAAIY,aAAa;oBACfF,qBAAqBG,IAAI,CAACD;gBAC5B;YACF,OAAO;gBACL,sBAAsB;gBACtB,MAAMX,kBAAkBC,OAAOC,OAAO,CAACN,UAAUO,IAAI,CACnD,CAAC,CAACC,KAAKC,IAAI,GACTA,QAAQ,QAAQ,CAAC;wBAAC;wBAAM;wBAAU;wBAAS;wBAAU;qBAAO,CAACC,QAAQ,CAACF;gBAG1E,IAAIJ,iBAAiB;oBACnB,MAAMD,aAAaC,eAAe,CAAC,EAAE,CAACO,OAAO,CAAC,MAAM;oBAEpDE,qBAAqBG,IAAI,CAAC;wBACxBb;wBACAS,OAAOR,eAAe,CAAC,EAAE;oBAC3B;gBACF;YACF;QACF;QAEAN,SAASe;IACX;IAEA,IAAIlB,QAAQ;QACVC,GAAG,CAACF,MAAMuB,IAAI,CAAC,CAACtB,OAAO,GAAGG;IAC5B,OAAO;QACLF,GAAG,CAACF,MAAMuB,IAAI,CAAC,GAAGnB;IACpB;AACF,EAAC"}
1
+ {"version":3,"sources":["../../../src/transform/read/relationship.ts"],"sourcesContent":["import type { RelationshipField, UploadField } from 'payload'\n\ntype Args = {\n field: RelationshipField | UploadField\n locale?: string\n ref: Record<string, unknown>\n relations: Record<string, unknown>[]\n withinArrayOrBlockLocale?: string\n}\n\nexport const transformRelationship = ({\n field,\n locale,\n ref,\n relations,\n withinArrayOrBlockLocale,\n}: Args) => {\n let result: unknown\n\n if (!('hasMany' in field) || field.hasMany === false) {\n let relation = relations[0]\n\n if (withinArrayOrBlockLocale) {\n relation = relations.find((rel) => rel.locale === withinArrayOrBlockLocale)\n }\n\n if (relation) {\n // Handle hasOne Poly\n if (Array.isArray(field.relationTo)) {\n const matchedRelation = Object.entries(relation).find(([key, val]) => {\n return val !== null && !['id', 'locale', 'order', 'parent', 'path'].includes(key)\n })\n\n if (matchedRelation) {\n const relationTo = matchedRelation[0].replace('ID', '')\n\n result = {\n relationTo,\n value: matchedRelation[1],\n }\n }\n }\n }\n } else {\n const transformedRelations = []\n\n relations.forEach((relation) => {\n let matchedLocale = true\n\n if (withinArrayOrBlockLocale) {\n matchedLocale = relation.locale === withinArrayOrBlockLocale\n }\n\n // Handle hasMany\n if (!Array.isArray(field.relationTo)) {\n const relatedData = relation[`${field.relationTo}ID`]\n\n if (relatedData && matchedLocale) {\n transformedRelations.push(relatedData)\n }\n } else {\n // Handle hasMany Poly\n const matchedRelation = Object.entries(relation).find(\n ([key, val]) =>\n val !== null &&\n !['id', 'locale', 'order', 'parent', 'path'].includes(key) &&\n matchedLocale,\n )\n\n if (matchedRelation) {\n const relationTo = matchedRelation[0].replace('ID', '')\n\n transformedRelations.push({\n relationTo,\n value: matchedRelation[1],\n })\n }\n }\n })\n\n result = transformedRelations\n }\n\n if (locale) {\n ref[field.name][locale] = result\n } else {\n ref[field.name] = result\n }\n}\n"],"names":["transformRelationship","field","locale","ref","relations","withinArrayOrBlockLocale","result","hasMany","relation","find","rel","Array","isArray","relationTo","matchedRelation","Object","entries","key","val","includes","replace","value","transformedRelations","forEach","matchedLocale","relatedData","push","name"],"mappings":"AAUA,OAAO,MAAMA,wBAAwB,CAAC,EACpCC,KAAK,EACLC,MAAM,EACNC,GAAG,EACHC,SAAS,EACTC,wBAAwB,EACnB;IACL,IAAIC;IAEJ,IAAI,CAAE,CAAA,aAAaL,KAAI,KAAMA,MAAMM,OAAO,KAAK,OAAO;QACpD,IAAIC,WAAWJ,SAAS,CAAC,EAAE;QAE3B,IAAIC,0BAA0B;YAC5BG,WAAWJ,UAAUK,IAAI,CAAC,CAACC,MAAQA,IAAIR,MAAM,KAAKG;QACpD;QAEA,IAAIG,UAAU;YACZ,qBAAqB;YACrB,IAAIG,MAAMC,OAAO,CAACX,MAAMY,UAAU,GAAG;gBACnC,MAAMC,kBAAkBC,OAAOC,OAAO,CAACR,UAAUC,IAAI,CAAC,CAAC,CAACQ,KAAKC,IAAI;oBAC/D,OAAOA,QAAQ,QAAQ,CAAC;wBAAC;wBAAM;wBAAU;wBAAS;wBAAU;qBAAO,CAACC,QAAQ,CAACF;gBAC/E;gBAEA,IAAIH,iBAAiB;oBACnB,MAAMD,aAAaC,eAAe,CAAC,EAAE,CAACM,OAAO,CAAC,MAAM;oBAEpDd,SAAS;wBACPO;wBACAQ,OAAOP,eAAe,CAAC,EAAE;oBAC3B;gBACF;YACF;QACF;IACF,OAAO;QACL,MAAMQ,uBAAuB,EAAE;QAE/BlB,UAAUmB,OAAO,CAAC,CAACf;YACjB,IAAIgB,gBAAgB;YAEpB,IAAInB,0BAA0B;gBAC5BmB,gBAAgBhB,SAASN,MAAM,KAAKG;YACtC;YAEA,iBAAiB;YACjB,IAAI,CAACM,MAAMC,OAAO,CAACX,MAAMY,UAAU,GAAG;gBACpC,MAAMY,cAAcjB,QAAQ,CAAC,CAAC,EAAEP,MAAMY,UAAU,CAAC,EAAE,CAAC,CAAC;gBAErD,IAAIY,eAAeD,eAAe;oBAChCF,qBAAqBI,IAAI,CAACD;gBAC5B;YACF,OAAO;gBACL,sBAAsB;gBACtB,MAAMX,kBAAkBC,OAAOC,OAAO,CAACR,UAAUC,IAAI,CACnD,CAAC,CAACQ,KAAKC,IAAI,GACTA,QAAQ,QACR,CAAC;wBAAC;wBAAM;wBAAU;wBAAS;wBAAU;qBAAO,CAACC,QAAQ,CAACF,QACtDO;gBAGJ,IAAIV,iBAAiB;oBACnB,MAAMD,aAAaC,eAAe,CAAC,EAAE,CAACM,OAAO,CAAC,MAAM;oBAEpDE,qBAAqBI,IAAI,CAAC;wBACxBb;wBACAQ,OAAOP,eAAe,CAAC,EAAE;oBAC3B;gBACF;YACF;QACF;QAEAR,SAASgB;IACX;IAEA,IAAIpB,QAAQ;QACVC,GAAG,CAACF,MAAM0B,IAAI,CAAC,CAACzB,OAAO,GAAGI;IAC5B,OAAO;QACLH,GAAG,CAACF,MAAM0B,IAAI,CAAC,GAAGrB;IACpB;AACF,EAAC"}
@@ -1,5 +1,4 @@
1
- import type { Field, TabAsField } from 'payload';
2
- import type { SanitizedConfig } from 'payload';
1
+ import type { Field, JoinQuery, SanitizedConfig, TabAsField } from 'payload';
3
2
  import type { DrizzleAdapter } from '../../types.js';
4
3
  import type { BlocksMap } from '../../utilities/createBlocksMap.js';
5
4
  type TraverseFieldsArgs = {
@@ -31,6 +30,10 @@ type TraverseFieldsArgs = {
31
30
  * An array of Payload fields to traverse
32
31
  */
33
32
  fields: (Field | TabAsField)[];
33
+ /**
34
+ *
35
+ */
36
+ joinQuery?: JoinQuery;
34
37
  /**
35
38
  * All hasMany number fields, as returned by Drizzle, keyed on an object by field path
36
39
  */
@@ -51,7 +54,11 @@ type TraverseFieldsArgs = {
51
54
  * All hasMany text fields, as returned by Drizzle, keyed on an object by field path
52
55
  */
53
56
  texts: Record<string, Record<string, unknown>[]>;
57
+ /**
58
+ * Set to a locale if this group of fields is within a localized array or block.
59
+ */
60
+ withinArrayOrBlockLocale?: string;
54
61
  };
55
- export declare const traverseFields: <T extends Record<string, unknown>>({ adapter, blocks, config, dataRef, deletions, fieldPrefix, fields, numbers, path, relationships, table, texts, }: TraverseFieldsArgs) => T;
62
+ export declare const traverseFields: <T extends Record<string, unknown>>({ adapter, blocks, config, dataRef, deletions, fieldPrefix, fields, joinQuery, numbers, path, relationships, table, texts, withinArrayOrBlockLocale, }: TraverseFieldsArgs) => T;
56
63
  export {};
57
64
  //# sourceMappingURL=traverseFields.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"traverseFields.d.ts","sourceRoot":"","sources":["../../../src/transform/read/traverseFields.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAChD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAI9C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oCAAoC,CAAA;AAMnE,KAAK,kBAAkB,GAAG;IACxB;;OAEG;IACH,OAAO,EAAE,cAAc,CAAA;IACvB;;OAEG;IACH,MAAM,EAAE,SAAS,CAAA;IACjB;;OAEG;IACH,MAAM,EAAE,eAAe,CAAA;IACvB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAChC;;OAEG;IACH,SAAS,EAAE,CAAC,MAAM,IAAI,CAAC,EAAE,CAAA;IACzB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAA;IACnB;;OAEG;IACH,MAAM,EAAE,CAAC,KAAK,GAAG,UAAU,CAAC,EAAE,CAAA;IAC9B;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAAA;IAClD;;OAEG;IACH,IAAI,EAAE,MAAM,CAAA;IACZ;;OAEG;IACH,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAAA;IACxD;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9B;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAAA;CACjD,CAAA;AAID,eAAO,MAAM,cAAc,GAAI,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,qHAa7D,kBAAkB,KAAG,CAkevB,CAAA"}
1
+ {"version":3,"file":"traverseFields.d.ts","sourceRoot":"","sources":["../../../src/transform/read/traverseFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAI5E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oCAAoC,CAAA;AAMnE,KAAK,kBAAkB,GAAG;IACxB;;OAEG;IACH,OAAO,EAAE,cAAc,CAAA;IACvB;;OAEG;IACH,MAAM,EAAE,SAAS,CAAA;IACjB;;OAEG;IACH,MAAM,EAAE,eAAe,CAAA;IACvB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAChC;;OAEG;IACH,SAAS,EAAE,CAAC,MAAM,IAAI,CAAC,EAAE,CAAA;IACzB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAA;IACnB;;OAEG;IACH,MAAM,EAAE,CAAC,KAAK,GAAG,UAAU,CAAC,EAAE,CAAA;IAC9B;;OAEG;IACH,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAAA;IAClD;;OAEG;IACH,IAAI,EAAE,MAAM,CAAA;IACZ;;OAEG;IACH,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAAA;IACxD;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9B;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAAA;IAChD;;OAEG;IACH,wBAAwB,CAAC,EAAE,MAAM,CAAA;CAClC,CAAA;AAID,eAAO,MAAM,cAAc,GAAI,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,0JAe7D,kBAAkB,KAAG,CA4lBvB,CAAA"}
@@ -1,10 +1,10 @@
1
- /* eslint-disable no-param-reassign */ import { fieldAffectsData } from 'payload/shared';
1
+ import { fieldAffectsData, fieldIsVirtual } from 'payload/shared';
2
2
  import { transformHasManyNumber } from './hasManyNumber.js';
3
3
  import { transformHasManyText } from './hasManyText.js';
4
4
  import { transformRelationship } from './relationship.js';
5
5
  // Traverse fields recursively, transforming data
6
6
  // for each field type into required Payload shape
7
- export const traverseFields = ({ adapter, blocks, config, dataRef, deletions, fieldPrefix, fields, numbers, path, relationships, table, texts })=>{
7
+ export const traverseFields = ({ adapter, blocks, config, dataRef, deletions, fieldPrefix, fields, joinQuery, numbers, path, relationships, table, texts, withinArrayOrBlockLocale })=>{
8
8
  const sanitizedPath = path ? `${path}.` : path;
9
9
  const formatted = fields.reduce((result, field)=>{
10
10
  if (field.type === 'tabs') {
@@ -19,11 +19,13 @@ export const traverseFields = ({ adapter, blocks, config, dataRef, deletions, fi
19
19
  ...tab,
20
20
  type: 'tab'
21
21
  })),
22
+ joinQuery,
22
23
  numbers,
23
24
  path,
24
25
  relationships,
25
26
  table,
26
- texts
27
+ texts,
28
+ withinArrayOrBlockLocale
27
29
  });
28
30
  }
29
31
  if (field.type === 'collapsible' || field.type === 'row' || field.type === 'tab' && !('name' in field)) {
@@ -35,16 +37,21 @@ export const traverseFields = ({ adapter, blocks, config, dataRef, deletions, fi
35
37
  deletions,
36
38
  fieldPrefix,
37
39
  fields: field.fields,
40
+ joinQuery,
38
41
  numbers,
39
42
  path,
40
43
  relationships,
41
44
  table,
42
- texts
45
+ texts,
46
+ withinArrayOrBlockLocale
43
47
  });
44
48
  }
45
49
  if (fieldAffectsData(field)) {
50
+ if (fieldIsVirtual(field)) {
51
+ return result;
52
+ }
46
53
  const fieldName = `${fieldPrefix || ''}${field.name}`;
47
- const fieldData = table[fieldName];
54
+ let fieldData = table[fieldName];
48
55
  const localizedFieldData = {};
49
56
  const valuesToTransform = [];
50
57
  if (fieldPrefix) {
@@ -55,7 +62,9 @@ export const traverseFields = ({ adapter, blocks, config, dataRef, deletions, fi
55
62
  if (field.localized) {
56
63
  result[field.name] = fieldData.reduce((arrayResult, row)=>{
57
64
  if (typeof row._locale === 'string') {
58
- if (!arrayResult[row._locale]) arrayResult[row._locale] = [];
65
+ if (!arrayResult[row._locale]) {
66
+ arrayResult[row._locale] = [];
67
+ }
59
68
  const locale = row._locale;
60
69
  const data = {};
61
70
  delete row._locale;
@@ -75,7 +84,8 @@ export const traverseFields = ({ adapter, blocks, config, dataRef, deletions, fi
75
84
  path: `${sanitizedPath}${field.name}.${row._order - 1}`,
76
85
  relationships,
77
86
  table: row,
78
- texts
87
+ texts,
88
+ withinArrayOrBlockLocale: locale
79
89
  });
80
90
  if ('_order' in rowResult) {
81
91
  delete rowResult._order;
@@ -85,7 +95,7 @@ export const traverseFields = ({ adapter, blocks, config, dataRef, deletions, fi
85
95
  return arrayResult;
86
96
  }, {});
87
97
  } else {
88
- result[field.name] = fieldData.map((row, i)=>{
98
+ result[field.name] = fieldData.reduce((acc, row, i)=>{
89
99
  if (row._uuid) {
90
100
  row.id = row._uuid;
91
101
  delete row._uuid;
@@ -93,37 +103,47 @@ export const traverseFields = ({ adapter, blocks, config, dataRef, deletions, fi
93
103
  if ('_order' in row) {
94
104
  delete row._order;
95
105
  }
96
- return traverseFields({
97
- adapter,
98
- blocks,
99
- config,
100
- dataRef: row,
101
- deletions,
102
- fieldPrefix: '',
103
- fields: field.fields,
104
- numbers,
105
- path: `${sanitizedPath}${field.name}.${i}`,
106
- relationships,
107
- table: row,
108
- texts
109
- });
110
- });
106
+ if (!withinArrayOrBlockLocale || withinArrayOrBlockLocale && withinArrayOrBlockLocale === row._locale) {
107
+ if (row._locale) {
108
+ delete row._locale;
109
+ }
110
+ acc.push(traverseFields({
111
+ adapter,
112
+ blocks,
113
+ config,
114
+ dataRef: row,
115
+ deletions,
116
+ fieldPrefix: '',
117
+ fields: field.fields,
118
+ numbers,
119
+ path: `${sanitizedPath}${field.name}.${i}`,
120
+ relationships,
121
+ table: row,
122
+ texts,
123
+ withinArrayOrBlockLocale
124
+ }));
125
+ }
126
+ return acc;
127
+ }, []);
111
128
  }
112
129
  }
113
130
  return result;
114
131
  }
115
132
  if (field.type === 'blocks') {
116
133
  const blockFieldPath = `${sanitizedPath}${field.name}`;
117
- if (Array.isArray(blocks[blockFieldPath])) {
134
+ const blocksByPath = blocks[blockFieldPath];
135
+ if (Array.isArray(blocksByPath)) {
118
136
  if (field.localized) {
119
137
  result[field.name] = {};
120
- blocks[blockFieldPath].forEach((row)=>{
138
+ blocksByPath.forEach((row)=>{
121
139
  if (row._uuid) {
122
140
  row.id = row._uuid;
123
141
  delete row._uuid;
124
142
  }
125
143
  if (typeof row._locale === 'string') {
126
- if (!result[field.name][row._locale]) result[field.name][row._locale] = [];
144
+ if (!result[field.name][row._locale]) {
145
+ result[field.name][row._locale] = [];
146
+ }
127
147
  result[field.name][row._locale].push(row);
128
148
  delete row._locale;
129
149
  }
@@ -144,7 +164,8 @@ export const traverseFields = ({ adapter, blocks, config, dataRef, deletions, fi
144
164
  path: `${blockFieldPath}.${row._order - 1}`,
145
165
  relationships,
146
166
  table: row,
147
- texts
167
+ texts,
168
+ withinArrayOrBlockLocale: locale
148
169
  });
149
170
  delete blockResult._order;
150
171
  return blockResult;
@@ -153,7 +174,21 @@ export const traverseFields = ({ adapter, blocks, config, dataRef, deletions, fi
153
174
  });
154
175
  });
155
176
  } else {
156
- result[field.name] = blocks[blockFieldPath].map((row, i)=>{
177
+ // Add locale-specific index to have a proper blockFieldPath for current locale
178
+ // because blocks can be in the same array for different locales!
179
+ if (withinArrayOrBlockLocale && config.localization) {
180
+ for (const locale of config.localization.localeCodes){
181
+ let localeIndex = 0;
182
+ for(let i = 0; i < blocksByPath.length; i++){
183
+ const row = blocksByPath[i];
184
+ if (row._locale === locale) {
185
+ row._index = localeIndex;
186
+ localeIndex++;
187
+ }
188
+ }
189
+ }
190
+ }
191
+ result[field.name] = blocksByPath.reduce((acc, row, i)=>{
157
192
  delete row._order;
158
193
  if (row._uuid) {
159
194
  row.id = row._uuid;
@@ -161,23 +196,36 @@ export const traverseFields = ({ adapter, blocks, config, dataRef, deletions, fi
161
196
  }
162
197
  const block = field.blocks.find(({ slug })=>slug === row.blockType);
163
198
  if (block) {
164
- return traverseFields({
165
- adapter,
166
- blocks,
167
- config,
168
- dataRef: row,
169
- deletions,
170
- fieldPrefix: '',
171
- fields: block.fields,
172
- numbers,
173
- path: `${blockFieldPath}.${i}`,
174
- relationships,
175
- table: row,
176
- texts
177
- });
199
+ if (!withinArrayOrBlockLocale || withinArrayOrBlockLocale && withinArrayOrBlockLocale === row._locale) {
200
+ if (row._locale) {
201
+ delete row._locale;
202
+ }
203
+ if (typeof row._index === 'number') {
204
+ i = row._index;
205
+ delete row._index;
206
+ }
207
+ acc.push(traverseFields({
208
+ adapter,
209
+ blocks,
210
+ config,
211
+ dataRef: row,
212
+ deletions,
213
+ fieldPrefix: '',
214
+ fields: block.fields,
215
+ numbers,
216
+ path: `${blockFieldPath}.${i}`,
217
+ relationships,
218
+ table: row,
219
+ texts,
220
+ withinArrayOrBlockLocale
221
+ }));
222
+ return acc;
223
+ }
224
+ } else {
225
+ acc.push({});
178
226
  }
179
- return {};
180
- });
227
+ return acc;
228
+ }, []);
181
229
  }
182
230
  }
183
231
  return result;
@@ -215,7 +263,9 @@ export const traverseFields = ({ adapter, blocks, config, dataRef, deletions, fi
215
263
  const relationsByLocale = {};
216
264
  relationPathMatch.forEach((row)=>{
217
265
  if (typeof row.locale === 'string') {
218
- if (!relationsByLocale[row.locale]) relationsByLocale[row.locale] = [];
266
+ if (!relationsByLocale[row.locale]) {
267
+ relationsByLocale[row.locale] = [];
268
+ }
219
269
  relationsByLocale[row.locale].push(row);
220
270
  }
221
271
  });
@@ -231,21 +281,64 @@ export const traverseFields = ({ adapter, blocks, config, dataRef, deletions, fi
231
281
  transformRelationship({
232
282
  field,
233
283
  ref: result,
234
- relations: relationPathMatch
284
+ relations: relationPathMatch,
285
+ withinArrayOrBlockLocale
235
286
  });
236
287
  }
237
288
  return result;
238
289
  }
239
290
  }
291
+ if (field.type === 'join') {
292
+ const { limit = field.defaultLimit ?? 10 } = joinQuery?.[`${fieldPrefix.replaceAll('_', '.')}${field.name}`] || {};
293
+ // raw hasMany results from SQLite
294
+ if (typeof fieldData === 'string') {
295
+ fieldData = JSON.parse(fieldData);
296
+ }
297
+ let fieldResult;
298
+ if (Array.isArray(fieldData)) {
299
+ if (field.localized) {
300
+ fieldResult = fieldData.reduce((joinResult, row)=>{
301
+ if (typeof row._locale === 'string') {
302
+ if (!joinResult[row._locale]) {
303
+ joinResult[row._locale] = {
304
+ docs: [],
305
+ hasNextPage: false
306
+ };
307
+ }
308
+ joinResult[row._locale].docs.push(row._parentID);
309
+ }
310
+ return joinResult;
311
+ }, {});
312
+ Object.keys(fieldResult).forEach((locale)=>{
313
+ fieldResult[locale].hasNextPage = fieldResult[locale].docs.length > limit;
314
+ fieldResult[locale].docs = fieldResult[locale].docs.slice(0, limit);
315
+ });
316
+ } else {
317
+ const hasNextPage = limit !== 0 && fieldData.length > limit;
318
+ fieldResult = {
319
+ docs: (hasNextPage ? fieldData.slice(0, limit) : fieldData).map(({ id })=>({
320
+ id
321
+ })),
322
+ hasNextPage
323
+ };
324
+ }
325
+ }
326
+ result[field.name] = fieldResult;
327
+ return result;
328
+ }
240
329
  if (field.type === 'text' && field?.hasMany) {
241
330
  const textPathMatch = texts[`${sanitizedPath}${field.name}`];
242
- if (!textPathMatch) return result;
331
+ if (!textPathMatch) {
332
+ return result;
333
+ }
243
334
  if (field.localized) {
244
335
  result[field.name] = {};
245
336
  const textsByLocale = {};
246
337
  textPathMatch.forEach((row)=>{
247
338
  if (typeof row.locale === 'string') {
248
- if (!textsByLocale[row.locale]) textsByLocale[row.locale] = [];
339
+ if (!textsByLocale[row.locale]) {
340
+ textsByLocale[row.locale] = [];
341
+ }
249
342
  textsByLocale[row.locale].push(row);
250
343
  }
251
344
  });
@@ -261,20 +354,25 @@ export const traverseFields = ({ adapter, blocks, config, dataRef, deletions, fi
261
354
  transformHasManyText({
262
355
  field,
263
356
  ref: result,
264
- textRows: textPathMatch
357
+ textRows: textPathMatch,
358
+ withinArrayOrBlockLocale
265
359
  });
266
360
  }
267
361
  return result;
268
362
  }
269
363
  if (field.type === 'number' && field.hasMany) {
270
364
  const numberPathMatch = numbers[`${sanitizedPath}${field.name}`];
271
- if (!numberPathMatch) return result;
365
+ if (!numberPathMatch) {
366
+ return result;
367
+ }
272
368
  if (field.localized) {
273
369
  result[field.name] = {};
274
370
  const numbersByLocale = {};
275
371
  numberPathMatch.forEach((row)=>{
276
372
  if (typeof row.locale === 'string') {
277
- if (!numbersByLocale[row.locale]) numbersByLocale[row.locale] = [];
373
+ if (!numbersByLocale[row.locale]) {
374
+ numbersByLocale[row.locale] = [];
375
+ }
278
376
  numbersByLocale[row.locale].push(row);
279
377
  }
280
378
  });
@@ -290,7 +388,8 @@ export const traverseFields = ({ adapter, blocks, config, dataRef, deletions, fi
290
388
  transformHasManyNumber({
291
389
  field,
292
390
  numberRows: numberPathMatch,
293
- ref: result
391
+ ref: result,
392
+ withinArrayOrBlockLocale
294
393
  });
295
394
  }
296
395
  return result;
@@ -300,22 +399,36 @@ export const traverseFields = ({ adapter, blocks, config, dataRef, deletions, fi
300
399
  if (field.localized) {
301
400
  result[field.name] = fieldData.reduce((selectResult, row)=>{
302
401
  if (typeof row.locale === 'string') {
303
- if (!selectResult[row.locale]) selectResult[row.locale] = [];
402
+ if (!selectResult[row.locale]) {
403
+ selectResult[row.locale] = [];
404
+ }
304
405
  selectResult[row.locale].push(row.value);
305
406
  }
306
407
  return selectResult;
307
408
  }, {});
308
409
  } else {
309
- result[field.name] = fieldData.map(({ value })=>value);
410
+ let selectData = fieldData;
411
+ if (withinArrayOrBlockLocale) {
412
+ selectData = selectData.filter(({ locale })=>locale === withinArrayOrBlockLocale);
413
+ }
414
+ result[field.name] = selectData.map(({ value })=>value);
310
415
  }
311
416
  }
312
417
  return result;
313
418
  }
314
419
  if (field.localized && Array.isArray(table._locales)) {
420
+ if (!table._locales.length && adapter.payload.config.localization) {
421
+ adapter.payload.config.localization.localeCodes.forEach((_locale)=>table._locales.push({
422
+ _locale
423
+ }));
424
+ }
315
425
  table._locales.forEach((localeRow)=>{
316
426
  valuesToTransform.push({
317
427
  ref: localizedFieldData,
318
- table: localeRow
428
+ table: {
429
+ ...table,
430
+ ...localeRow
431
+ }
319
432
  });
320
433
  });
321
434
  } else {
@@ -329,74 +442,47 @@ export const traverseFields = ({ adapter, blocks, config, dataRef, deletions, fi
329
442
  const locale = table?._locale;
330
443
  let val = fieldData;
331
444
  switch(field.type){
332
- case 'tab':
333
- case 'group':
334
- {
335
- const groupFieldPrefix = `${fieldPrefix || ''}${field.name}_`;
336
- if (field.localized) {
337
- if (typeof locale === 'string' && !ref[locale]) {
338
- ref[locale] = {};
339
- delete table._locale;
340
- }
341
- Object.entries(ref).forEach(([groupLocale, groupLocaleData])=>{
342
- ref[groupLocale] = traverseFields({
343
- adapter,
344
- blocks,
345
- config,
346
- dataRef: groupLocaleData,
347
- deletions,
348
- fieldPrefix: groupFieldPrefix,
349
- fields: field.fields,
350
- numbers,
351
- path: `${sanitizedPath}${field.name}`,
352
- relationships,
353
- table,
354
- texts
355
- });
356
- });
357
- if ('_order' in ref) {
358
- delete ref._order;
359
- }
360
- } else {
361
- const groupData = {};
362
- ref[field.name] = traverseFields({
363
- adapter,
364
- blocks,
365
- config,
366
- dataRef: groupData,
367
- deletions,
368
- fieldPrefix: groupFieldPrefix,
369
- fields: field.fields,
370
- numbers,
371
- path: `${sanitizedPath}${field.name}`,
372
- relationships,
373
- table,
374
- texts
375
- });
376
- if ('_order' in ref) {
377
- delete ref._order;
378
- }
379
- }
380
- return;
381
- }
382
- case 'text':
445
+ case 'date':
383
446
  {
384
447
  if (typeof fieldData === 'string') {
385
- val = String(fieldData);
448
+ val = new Date(fieldData).toISOString();
386
449
  }
387
450
  break;
388
451
  }
389
- case 'number':
452
+ case 'group':
453
+ case 'tab':
390
454
  {
391
- if (typeof fieldData === 'string') {
392
- val = Number.parseFloat(fieldData);
455
+ const groupFieldPrefix = `${fieldPrefix || ''}${field.name}_`;
456
+ const groupData = {};
457
+ const locale = table._locale;
458
+ const refKey = field.localized && locale ? locale : field.name;
459
+ if (field.localized && locale) {
460
+ delete table._locale;
393
461
  }
394
- break;
462
+ ref[refKey] = traverseFields({
463
+ adapter,
464
+ blocks,
465
+ config,
466
+ dataRef: groupData,
467
+ deletions,
468
+ fieldPrefix: groupFieldPrefix,
469
+ fields: field.fields,
470
+ numbers,
471
+ path: `${sanitizedPath}${field.name}`,
472
+ relationships,
473
+ table,
474
+ texts,
475
+ withinArrayOrBlockLocale: locale || withinArrayOrBlockLocale
476
+ });
477
+ if ('_order' in ref) {
478
+ delete ref._order;
479
+ }
480
+ return;
395
481
  }
396
- case 'date':
482
+ case 'number':
397
483
  {
398
484
  if (typeof fieldData === 'string') {
399
- val = new Date(fieldData).toISOString();
485
+ val = Number.parseFloat(fieldData);
400
486
  }
401
487
  break;
402
488
  }
@@ -408,6 +494,13 @@ export const traverseFields = ({ adapter, blocks, config, dataRef, deletions, fi
408
494
  }
409
495
  break;
410
496
  }
497
+ case 'text':
498
+ {
499
+ if (typeof fieldData === 'string') {
500
+ val = String(fieldData);
501
+ }
502
+ break;
503
+ }
411
504
  default:
412
505
  {
413
506
  break;