@payloadcms/drizzle 3.0.0-canary.9de3ffd → 3.0.0-canary.a5aaf21

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 (209) hide show
  1. package/dist/count.d.ts.map +1 -1
  2. package/dist/count.js +1 -1
  3. package/dist/count.js.map +1 -1
  4. package/dist/createGlobalVersion.d.ts +1 -1
  5. package/dist/createGlobalVersion.d.ts.map +1 -1
  6. package/dist/createGlobalVersion.js +4 -2
  7. package/dist/createGlobalVersion.js.map +1 -1
  8. package/dist/createTableName.d.ts.map +1 -1
  9. package/dist/createTableName.js +6 -2
  10. package/dist/createTableName.js.map +1 -1
  11. package/dist/createVersion.d.ts +1 -1
  12. package/dist/createVersion.d.ts.map +1 -1
  13. package/dist/createVersion.js +22 -14
  14. package/dist/createVersion.js.map +1 -1
  15. package/dist/deleteOne.d.ts.map +1 -1
  16. package/dist/deleteOne.js +5 -3
  17. package/dist/deleteOne.js.map +1 -1
  18. package/dist/deleteVersions.js +1 -1
  19. package/dist/deleteVersions.js.map +1 -1
  20. package/dist/destroy.d.ts.map +1 -1
  21. package/dist/destroy.js +3 -1
  22. package/dist/destroy.js.map +1 -1
  23. package/dist/find/buildFindManyArgs.d.ts +13 -7
  24. package/dist/find/buildFindManyArgs.d.ts.map +1 -1
  25. package/dist/find/buildFindManyArgs.js +5 -1
  26. package/dist/find/buildFindManyArgs.js.map +1 -1
  27. package/dist/find/findMany.d.ts +1 -1
  28. package/dist/find/findMany.d.ts.map +1 -1
  29. package/dist/find/findMany.js +6 -3
  30. package/dist/find/findMany.js.map +1 -1
  31. package/dist/find/traverseFields.d.ts +7 -3
  32. package/dist/find/traverseFields.d.ts.map +1 -1
  33. package/dist/find/traverseFields.js +90 -15
  34. package/dist/find/traverseFields.js.map +1 -1
  35. package/dist/find.d.ts.map +1 -1
  36. package/dist/find.js +2 -1
  37. package/dist/find.js.map +1 -1
  38. package/dist/findGlobalVersions.js +1 -1
  39. package/dist/findGlobalVersions.js.map +1 -1
  40. package/dist/findMigrationDir.d.ts.map +1 -1
  41. package/dist/findMigrationDir.js +3 -1
  42. package/dist/findMigrationDir.js.map +1 -1
  43. package/dist/findOne.d.ts +1 -1
  44. package/dist/findOne.d.ts.map +1 -1
  45. package/dist/findOne.js +2 -1
  46. package/dist/findOne.js.map +1 -1
  47. package/dist/findVersions.js +1 -1
  48. package/dist/findVersions.js.map +1 -1
  49. package/dist/migrate.js +1 -0
  50. package/dist/migrate.js.map +1 -1
  51. package/dist/migrateDown.d.ts.map +1 -1
  52. package/dist/migrateDown.js +1 -1
  53. package/dist/migrateDown.js.map +1 -1
  54. package/dist/migrateFresh.d.ts.map +1 -1
  55. package/dist/migrateFresh.js +1 -0
  56. package/dist/migrateFresh.js.map +1 -1
  57. package/dist/migrateRefresh.d.ts.map +1 -1
  58. package/dist/migrateRefresh.js +2 -1
  59. package/dist/migrateRefresh.js.map +1 -1
  60. package/dist/migrateReset.d.ts.map +1 -1
  61. package/dist/migrateReset.js +4 -2
  62. package/dist/migrateReset.js.map +1 -1
  63. package/dist/migrateStatus.js +0 -1
  64. package/dist/migrateStatus.js.map +1 -1
  65. package/dist/postgres/countDistinct.d.ts.map +1 -1
  66. package/dist/postgres/countDistinct.js +3 -3
  67. package/dist/postgres/countDistinct.js.map +1 -1
  68. package/dist/postgres/createJSONQuery/convertPathToJSONTraversal.d.ts.map +1 -1
  69. package/dist/postgres/createJSONQuery/convertPathToJSONTraversal.js +3 -1
  70. package/dist/postgres/createJSONQuery/convertPathToJSONTraversal.js.map +1 -1
  71. package/dist/postgres/init.js +2 -2
  72. package/dist/postgres/init.js.map +1 -1
  73. package/dist/postgres/schema/build.d.ts +10 -2
  74. package/dist/postgres/schema/build.d.ts.map +1 -1
  75. package/dist/postgres/schema/build.js +17 -8
  76. package/dist/postgres/schema/build.js.map +1 -1
  77. package/dist/postgres/schema/createIndex.d.ts.map +1 -1
  78. package/dist/postgres/schema/createIndex.js +3 -1
  79. package/dist/postgres/schema/createIndex.js.map +1 -1
  80. package/dist/postgres/schema/traverseFields.d.ts +7 -2
  81. package/dist/postgres/schema/traverseFields.d.ts.map +1 -1
  82. package/dist/postgres/schema/traverseFields.js +177 -59
  83. package/dist/postgres/schema/traverseFields.js.map +1 -1
  84. package/dist/postgres/schema/withDefault.d.ts.map +1 -1
  85. package/dist/postgres/schema/withDefault.js +3 -1
  86. package/dist/postgres/schema/withDefault.js.map +1 -1
  87. package/dist/postgres/types.d.ts +2 -1
  88. package/dist/postgres/types.d.ts.map +1 -1
  89. package/dist/postgres/types.js.map +1 -1
  90. package/dist/queries/buildAndOrConditions.d.ts +1 -1
  91. package/dist/queries/buildAndOrConditions.d.ts.map +1 -1
  92. package/dist/queries/buildAndOrConditions.js +2 -4
  93. package/dist/queries/buildAndOrConditions.js.map +1 -1
  94. package/dist/queries/buildOrderBy.d.ts +18 -0
  95. package/dist/queries/buildOrderBy.d.ts.map +1 -0
  96. package/dist/queries/buildOrderBy.js +51 -0
  97. package/dist/queries/buildOrderBy.js.map +1 -0
  98. package/dist/queries/buildQuery.d.ts +4 -4
  99. package/dist/queries/buildQuery.d.ts.map +1 -1
  100. package/dist/queries/buildQuery.js +12 -47
  101. package/dist/queries/buildQuery.js.map +1 -1
  102. package/dist/queries/getTableColumnFromPath.d.ts +6 -2
  103. package/dist/queries/getTableColumnFromPath.d.ts.map +1 -1
  104. package/dist/queries/getTableColumnFromPath.js +54 -17
  105. package/dist/queries/getTableColumnFromPath.js.map +1 -1
  106. package/dist/queries/operatorMap.d.ts.map +1 -1
  107. package/dist/queries/operatorMap.js.map +1 -1
  108. package/dist/queries/parseParams.d.ts +1 -1
  109. package/dist/queries/parseParams.d.ts.map +1 -1
  110. package/dist/queries/parseParams.js +50 -6
  111. package/dist/queries/parseParams.js.map +1 -1
  112. package/dist/queries/sanitizeQueryValue.d.ts +11 -1
  113. package/dist/queries/sanitizeQueryValue.d.ts.map +1 -1
  114. package/dist/queries/sanitizeQueryValue.js +69 -21
  115. package/dist/queries/sanitizeQueryValue.js.map +1 -1
  116. package/dist/queries/selectDistinct.d.ts +3 -4
  117. package/dist/queries/selectDistinct.d.ts.map +1 -1
  118. package/dist/queries/selectDistinct.js.map +1 -1
  119. package/dist/queryDrafts.d.ts.map +1 -1
  120. package/dist/queryDrafts.js +1 -2
  121. package/dist/queryDrafts.js.map +1 -1
  122. package/dist/transactions/beginTransaction.d.ts.map +1 -1
  123. package/dist/transactions/beginTransaction.js +5 -1
  124. package/dist/transactions/beginTransaction.js.map +1 -1
  125. package/dist/transactions/commitTransaction.d.ts.map +1 -1
  126. package/dist/transactions/commitTransaction.js +3 -1
  127. package/dist/transactions/commitTransaction.js.map +1 -1
  128. package/dist/transform/read/hasManyNumber.d.ts +2 -1
  129. package/dist/transform/read/hasManyNumber.d.ts.map +1 -1
  130. package/dist/transform/read/hasManyNumber.js +12 -2
  131. package/dist/transform/read/hasManyNumber.js.map +1 -1
  132. package/dist/transform/read/hasManyText.d.ts +2 -1
  133. package/dist/transform/read/hasManyText.d.ts.map +1 -1
  134. package/dist/transform/read/hasManyText.js +12 -2
  135. package/dist/transform/read/hasManyText.js.map +1 -1
  136. package/dist/transform/read/index.d.ts +3 -2
  137. package/dist/transform/read/index.d.ts.map +1 -1
  138. package/dist/transform/read/index.js +3 -2
  139. package/dist/transform/read/index.js.map +1 -1
  140. package/dist/transform/read/relationship.d.ts +2 -1
  141. package/dist/transform/read/relationship.d.ts.map +1 -1
  142. package/dist/transform/read/relationship.js +15 -6
  143. package/dist/transform/read/relationship.js.map +1 -1
  144. package/dist/transform/read/traverseFields.d.ts +10 -2
  145. package/dist/transform/read/traverseFields.d.ts.map +1 -1
  146. package/dist/transform/read/traverseFields.js +132 -52
  147. package/dist/transform/read/traverseFields.js.map +1 -1
  148. package/dist/transform/write/array.d.ts +6 -1
  149. package/dist/transform/write/array.d.ts.map +1 -1
  150. package/dist/transform/write/array.js +7 -3
  151. package/dist/transform/write/array.js.map +1 -1
  152. package/dist/transform/write/blocks.d.ts +8 -3
  153. package/dist/transform/write/blocks.d.ts.map +1 -1
  154. package/dist/transform/write/blocks.js +19 -7
  155. package/dist/transform/write/blocks.js.map +1 -1
  156. package/dist/transform/write/index.d.ts.map +1 -1
  157. package/dist/transform/write/index.js +1 -1
  158. package/dist/transform/write/index.js.map +1 -1
  159. package/dist/transform/write/relationships.d.ts.map +1 -1
  160. package/dist/transform/write/relationships.js +6 -2
  161. package/dist/transform/write/relationships.js.map +1 -1
  162. package/dist/transform/write/selects.d.ts.map +1 -1
  163. package/dist/transform/write/selects.js +1 -1
  164. package/dist/transform/write/selects.js.map +1 -1
  165. package/dist/transform/write/traverseFields.d.ts +6 -1
  166. package/dist/transform/write/traverseFields.d.ts.map +1 -1
  167. package/dist/transform/write/traverseFields.js +45 -17
  168. package/dist/transform/write/traverseFields.js.map +1 -1
  169. package/dist/types.d.ts +1 -1
  170. package/dist/types.d.ts.map +1 -1
  171. package/dist/types.js.map +1 -1
  172. package/dist/update.d.ts.map +1 -1
  173. package/dist/update.js +3 -2
  174. package/dist/update.js.map +1 -1
  175. package/dist/updateGlobalVersion.js +2 -2
  176. package/dist/updateGlobalVersion.js.map +1 -1
  177. package/dist/updateVersion.js +2 -2
  178. package/dist/updateVersion.js.map +1 -1
  179. package/dist/upsertRow/deleteExistingRowsByPath.d.ts.map +1 -1
  180. package/dist/upsertRow/deleteExistingRowsByPath.js +6 -2
  181. package/dist/upsertRow/deleteExistingRowsByPath.js.map +1 -1
  182. package/dist/upsertRow/index.d.ts +1 -1
  183. package/dist/upsertRow/index.d.ts.map +1 -1
  184. package/dist/upsertRow/index.js +50 -13
  185. package/dist/upsertRow/index.js.map +1 -1
  186. package/dist/upsertRow/insertArrays.d.ts.map +1 -1
  187. package/dist/upsertRow/insertArrays.js +5 -2
  188. package/dist/upsertRow/insertArrays.js.map +1 -1
  189. package/dist/upsertRow/types.d.ts +8 -5
  190. package/dist/upsertRow/types.d.ts.map +1 -1
  191. package/dist/upsertRow/types.js.map +1 -1
  192. package/dist/utilities/createBlocksMap.d.ts.map +1 -1
  193. package/dist/utilities/createBlocksMap.js +4 -2
  194. package/dist/utilities/createBlocksMap.js.map +1 -1
  195. package/dist/utilities/createRelationshipMap.d.ts.map +1 -1
  196. package/dist/utilities/createRelationshipMap.js +3 -1
  197. package/dist/utilities/createRelationshipMap.js.map +1 -1
  198. package/dist/utilities/getCollectionIdType.d.ts +7 -0
  199. package/dist/utilities/getCollectionIdType.d.ts.map +1 -0
  200. package/dist/utilities/getCollectionIdType.js +11 -0
  201. package/dist/utilities/getCollectionIdType.js.map +1 -0
  202. package/dist/utilities/hasLocalesTable.d.ts.map +1 -1
  203. package/dist/utilities/hasLocalesTable.js +12 -4
  204. package/dist/utilities/hasLocalesTable.js.map +1 -1
  205. package/dist/utilities/isPolymorphicRelationship.d.ts +6 -0
  206. package/dist/utilities/isPolymorphicRelationship.d.ts.map +1 -0
  207. package/dist/utilities/isPolymorphicRelationship.js +5 -0
  208. package/dist/utilities/isPolymorphicRelationship.js.map +1 -0
  209. package/package.json +7 -5
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/transform/read/index.ts"],"sourcesContent":["/* eslint-disable no-param-reassign */\nimport type { Field, SanitizedConfig, TypeWithID } from 'payload'\n\nimport type { DrizzleAdapter } from '../../types.js'\n\nimport { createBlocksMap } from '../../utilities/createBlocksMap.js'\nimport { createPathMap } from '../../utilities/createRelationshipMap.js'\nimport { traverseFields } from './traverseFields.js'\n\ntype TransformArgs = {\n adapter: DrizzleAdapter\n config: SanitizedConfig\n data: Record<string, unknown>\n fallbackLocale?: false | string\n fields: Field[]\n locale?: string\n}\n\n// This is the entry point to transform Drizzle output data\n// into the shape Payload expects based on field schema\nexport const transform = <T extends Record<string, unknown> | TypeWithID>({\n adapter,\n config,\n data,\n fields,\n}: TransformArgs): T => {\n let relationships: Record<string, Record<string, unknown>[]> = {}\n let texts: Record<string, Record<string, unknown>[]> = {}\n let numbers: Record<string, Record<string, unknown>[]> = {}\n\n if ('_rels' in data) {\n relationships = createPathMap(data._rels)\n delete data._rels\n }\n\n if ('_texts' in data) {\n texts = createPathMap(data._texts)\n delete data._texts\n }\n\n if ('_numbers' in data) {\n numbers = createPathMap(data._numbers)\n delete data._numbers\n }\n\n const blocks = createBlocksMap(data)\n const deletions = []\n\n const result = traverseFields<T>({\n adapter,\n blocks,\n config,\n dataRef: {\n id: data.id,\n },\n deletions,\n fieldPrefix: '',\n fields,\n numbers,\n path: '',\n relationships,\n table: data,\n texts,\n })\n\n deletions.forEach((deletion) => deletion())\n\n return result\n}\n"],"names":["createBlocksMap","createPathMap","traverseFields","transform","adapter","config","data","fields","relationships","texts","numbers","_rels","_texts","_numbers","blocks","deletions","result","dataRef","id","fieldPrefix","path","table","forEach","deletion"],"mappings":"AAAA,oCAAoC,GAKpC,SAASA,eAAe,QAAQ,qCAAoC;AACpE,SAASC,aAAa,QAAQ,2CAA0C;AACxE,SAASC,cAAc,QAAQ,sBAAqB;AAWpD,2DAA2D;AAC3D,uDAAuD;AACvD,OAAO,MAAMC,YAAY,CAAiD,EACxEC,OAAO,EACPC,MAAM,EACNC,IAAI,EACJC,MAAM,EACQ;IACd,IAAIC,gBAA2D,CAAC;IAChE,IAAIC,QAAmD,CAAC;IACxD,IAAIC,UAAqD,CAAC;IAE1D,IAAI,WAAWJ,MAAM;QACnBE,gBAAgBP,cAAcK,KAAKK,KAAK;QACxC,OAAOL,KAAKK,KAAK;IACnB;IAEA,IAAI,YAAYL,MAAM;QACpBG,QAAQR,cAAcK,KAAKM,MAAM;QACjC,OAAON,KAAKM,MAAM;IACpB;IAEA,IAAI,cAAcN,MAAM;QACtBI,UAAUT,cAAcK,KAAKO,QAAQ;QACrC,OAAOP,KAAKO,QAAQ;IACtB;IAEA,MAAMC,SAASd,gBAAgBM;IAC/B,MAAMS,YAAY,EAAE;IAEpB,MAAMC,SAASd,eAAkB;QAC/BE;QACAU;QACAT;QACAY,SAAS;YACPC,IAAIZ,KAAKY,EAAE;QACb;QACAH;QACAI,aAAa;QACbZ;QACAG;QACAU,MAAM;QACNZ;QACAa,OAAOf;QACPG;IACF;IAEAM,UAAUO,OAAO,CAAC,CAACC,WAAaA;IAEhC,OAAOP;AACT,EAAC"}
1
+ {"version":3,"sources":["../../../src/transform/read/index.ts"],"sourcesContent":["import type { Field, JoinQuery, SanitizedConfig, TypeWithID } from 'payload'\n\nimport type { DrizzleAdapter } from '../../types.js'\n\nimport { createBlocksMap } from '../../utilities/createBlocksMap.js'\nimport { createPathMap } from '../../utilities/createRelationshipMap.js'\nimport { traverseFields } from './traverseFields.js'\n\ntype TransformArgs = {\n adapter: DrizzleAdapter\n config: SanitizedConfig\n data: Record<string, unknown>\n fallbackLocale?: false | string\n fields: Field[]\n joinQuery?: JoinQuery\n locale?: string\n}\n\n// This is the entry point to transform Drizzle output data\n// into the shape Payload expects based on field schema\nexport const transform = <T extends Record<string, unknown> | TypeWithID>({\n adapter,\n config,\n data,\n fields,\n joinQuery,\n}: TransformArgs): T => {\n let relationships: Record<string, Record<string, unknown>[]> = {}\n let texts: Record<string, Record<string, unknown>[]> = {}\n let numbers: Record<string, Record<string, unknown>[]> = {}\n\n if ('_rels' in data) {\n relationships = createPathMap(data._rels)\n delete data._rels\n }\n\n if ('_texts' in data) {\n texts = createPathMap(data._texts)\n delete data._texts\n }\n\n if ('_numbers' in data) {\n numbers = createPathMap(data._numbers)\n delete data._numbers\n }\n\n const blocks = createBlocksMap(data)\n const deletions = []\n\n const result = traverseFields<T>({\n adapter,\n blocks,\n config,\n dataRef: {\n id: data.id,\n },\n deletions,\n fieldPrefix: '',\n fields,\n joinQuery,\n numbers,\n path: '',\n relationships,\n table: data,\n texts,\n })\n\n deletions.forEach((deletion) => deletion())\n\n return result\n}\n"],"names":["createBlocksMap","createPathMap","traverseFields","transform","adapter","config","data","fields","joinQuery","relationships","texts","numbers","_rels","_texts","_numbers","blocks","deletions","result","dataRef","id","fieldPrefix","path","table","forEach","deletion"],"mappings":"AAIA,SAASA,eAAe,QAAQ,qCAAoC;AACpE,SAASC,aAAa,QAAQ,2CAA0C;AACxE,SAASC,cAAc,QAAQ,sBAAqB;AAYpD,2DAA2D;AAC3D,uDAAuD;AACvD,OAAO,MAAMC,YAAY,CAAiD,EACxEC,OAAO,EACPC,MAAM,EACNC,IAAI,EACJC,MAAM,EACNC,SAAS,EACK;IACd,IAAIC,gBAA2D,CAAC;IAChE,IAAIC,QAAmD,CAAC;IACxD,IAAIC,UAAqD,CAAC;IAE1D,IAAI,WAAWL,MAAM;QACnBG,gBAAgBR,cAAcK,KAAKM,KAAK;QACxC,OAAON,KAAKM,KAAK;IACnB;IAEA,IAAI,YAAYN,MAAM;QACpBI,QAAQT,cAAcK,KAAKO,MAAM;QACjC,OAAOP,KAAKO,MAAM;IACpB;IAEA,IAAI,cAAcP,MAAM;QACtBK,UAAUV,cAAcK,KAAKQ,QAAQ;QACrC,OAAOR,KAAKQ,QAAQ;IACtB;IAEA,MAAMC,SAASf,gBAAgBM;IAC/B,MAAMU,YAAY,EAAE;IAEpB,MAAMC,SAASf,eAAkB;QAC/BE;QACAW;QACAV;QACAa,SAAS;YACPC,IAAIb,KAAKa,EAAE;QACb;QACAH;QACAI,aAAa;QACbb;QACAC;QACAG;QACAU,MAAM;QACNZ;QACAa,OAAOhB;QACPI;IACF;IAEAM,UAAUO,OAAO,CAAC,CAACC,WAAaA;IAEhC,OAAOP;AACT,EAAC"}
@@ -4,7 +4,8 @@ type Args = {
4
4
  locale?: string;
5
5
  ref: Record<string, unknown>;
6
6
  relations: Record<string, unknown>[];
7
+ withinArrayOrBlockLocale?: string;
7
8
  };
8
- export declare const transformRelationship: ({ field, locale, ref, relations }: Args) => void;
9
+ export declare const transformRelationship: ({ field, locale, ref, relations, withinArrayOrBlockLocale, }: Args) => void;
9
10
  export {};
10
11
  //# sourceMappingURL=relationship.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"relationship.d.ts","sourceRoot":"","sources":["../../../src/transform/read/relationship.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAE7D,KAAK,IAAI,GAAG;IACV,KAAK,EAAE,iBAAiB,GAAG,WAAW,CAAA;IACtC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC5B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;CACrC,CAAA;AAED,eAAO,MAAM,qBAAqB,sCAAuC,IAAI,SA6D5E,CAAA"}
1
+ {"version":3,"file":"relationship.d.ts","sourceRoot":"","sources":["../../../src/transform/read/relationship.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAE7D,KAAK,IAAI,GAAG;IACV,KAAK,EAAE,iBAAiB,GAAG,WAAW,CAAA;IACtC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC5B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;IACpC,wBAAwB,CAAC,EAAE,MAAM,CAAA;CAClC,CAAA;AAED,eAAO,MAAM,qBAAqB,iEAM/B,IAAI,SAwEN,CAAA"}
@@ -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,4 +1,4 @@
1
- import type { Field, SanitizedConfig, TabAsField } from 'payload';
1
+ import type { Field, JoinQuery, SanitizedConfig, TabAsField } from 'payload';
2
2
  import type { DrizzleAdapter } from '../../types.js';
3
3
  import type { BlocksMap } from '../../utilities/createBlocksMap.js';
4
4
  type TraverseFieldsArgs = {
@@ -30,6 +30,10 @@ type TraverseFieldsArgs = {
30
30
  * An array of Payload fields to traverse
31
31
  */
32
32
  fields: (Field | TabAsField)[];
33
+ /**
34
+ *
35
+ */
36
+ joinQuery?: JoinQuery;
33
37
  /**
34
38
  * All hasMany number fields, as returned by Drizzle, keyed on an object by field path
35
39
  */
@@ -50,7 +54,11 @@ type TraverseFieldsArgs = {
50
54
  * All hasMany text fields, as returned by Drizzle, keyed on an object by field path
51
55
  */
52
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;
53
61
  };
54
- 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;
55
63
  export {};
56
64
  //# sourceMappingURL=traverseFields.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"traverseFields.d.ts","sourceRoot":"","sources":["../../../src/transform/read/traverseFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAIjE,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,CA+cvB,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,CAojBvB,CAAA"}
@@ -1,10 +1,10 @@
1
- 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,14 +37,19 @@ 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
54
  const fieldData = table[fieldName];
48
55
  const localizedFieldData = {};
@@ -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,21 +103,28 @@ 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;
@@ -123,7 +140,9 @@ export const traverseFields = ({ adapter, blocks, config, dataRef, deletions, fi
123
140
  delete row._uuid;
124
141
  }
125
142
  if (typeof row._locale === 'string') {
126
- if (!result[field.name][row._locale]) result[field.name][row._locale] = [];
143
+ if (!result[field.name][row._locale]) {
144
+ result[field.name][row._locale] = [];
145
+ }
127
146
  result[field.name][row._locale].push(row);
128
147
  delete row._locale;
129
148
  }
@@ -144,7 +163,8 @@ export const traverseFields = ({ adapter, blocks, config, dataRef, deletions, fi
144
163
  path: `${blockFieldPath}.${row._order - 1}`,
145
164
  relationships,
146
165
  table: row,
147
- texts
166
+ texts,
167
+ withinArrayOrBlockLocale: locale
148
168
  });
149
169
  delete blockResult._order;
150
170
  return blockResult;
@@ -153,7 +173,7 @@ export const traverseFields = ({ adapter, blocks, config, dataRef, deletions, fi
153
173
  });
154
174
  });
155
175
  } else {
156
- result[field.name] = blocks[blockFieldPath].map((row, i)=>{
176
+ result[field.name] = blocks[blockFieldPath].reduce((acc, row, i)=>{
157
177
  delete row._order;
158
178
  if (row._uuid) {
159
179
  row.id = row._uuid;
@@ -161,23 +181,32 @@ export const traverseFields = ({ adapter, blocks, config, dataRef, deletions, fi
161
181
  }
162
182
  const block = field.blocks.find(({ slug })=>slug === row.blockType);
163
183
  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
- });
184
+ if (!withinArrayOrBlockLocale || withinArrayOrBlockLocale && withinArrayOrBlockLocale === row._locale) {
185
+ if (row._locale) {
186
+ delete row._locale;
187
+ }
188
+ acc.push(traverseFields({
189
+ adapter,
190
+ blocks,
191
+ config,
192
+ dataRef: row,
193
+ deletions,
194
+ fieldPrefix: '',
195
+ fields: block.fields,
196
+ numbers,
197
+ path: `${blockFieldPath}.${i}`,
198
+ relationships,
199
+ table: row,
200
+ texts,
201
+ withinArrayOrBlockLocale
202
+ }));
203
+ return acc;
204
+ }
205
+ } else {
206
+ acc.push({});
178
207
  }
179
- return {};
180
- });
208
+ return acc;
209
+ }, []);
181
210
  }
182
211
  }
183
212
  return result;
@@ -215,7 +244,9 @@ export const traverseFields = ({ adapter, blocks, config, dataRef, deletions, fi
215
244
  const relationsByLocale = {};
216
245
  relationPathMatch.forEach((row)=>{
217
246
  if (typeof row.locale === 'string') {
218
- if (!relationsByLocale[row.locale]) relationsByLocale[row.locale] = [];
247
+ if (!relationsByLocale[row.locale]) {
248
+ relationsByLocale[row.locale] = [];
249
+ }
219
250
  relationsByLocale[row.locale].push(row);
220
251
  }
221
252
  });
@@ -231,21 +262,58 @@ export const traverseFields = ({ adapter, blocks, config, dataRef, deletions, fi
231
262
  transformRelationship({
232
263
  field,
233
264
  ref: result,
234
- relations: relationPathMatch
265
+ relations: relationPathMatch,
266
+ withinArrayOrBlockLocale
235
267
  });
236
268
  }
237
269
  return result;
238
270
  }
239
271
  }
272
+ if (field.type === 'join') {
273
+ const { limit = 10 } = joinQuery?.[`${fieldPrefix.replaceAll('_', '.')}${field.name}`] || {};
274
+ let fieldResult;
275
+ if (Array.isArray(fieldData)) {
276
+ if (field.localized) {
277
+ fieldResult = fieldData.reduce((joinResult, row)=>{
278
+ if (typeof row._locale === 'string') {
279
+ if (!joinResult[row._locale]) {
280
+ joinResult[row._locale] = {
281
+ docs: [],
282
+ hasNextPage: false
283
+ };
284
+ }
285
+ joinResult[row._locale].docs.push(row._parentID);
286
+ }
287
+ return joinResult;
288
+ }, {});
289
+ Object.keys(fieldResult).forEach((locale)=>{
290
+ fieldResult[locale].hasNextPage = fieldResult[locale].docs.length > limit;
291
+ fieldResult[locale].docs = fieldResult[locale].docs.slice(0, limit);
292
+ });
293
+ } else {
294
+ const hasNextPage = limit !== 0 && fieldData.length > limit;
295
+ fieldResult = {
296
+ docs: hasNextPage ? fieldData.slice(0, limit) : fieldData,
297
+ hasNextPage
298
+ };
299
+ }
300
+ }
301
+ result[field.name] = fieldResult;
302
+ return result;
303
+ }
240
304
  if (field.type === 'text' && field?.hasMany) {
241
305
  const textPathMatch = texts[`${sanitizedPath}${field.name}`];
242
- if (!textPathMatch) return result;
306
+ if (!textPathMatch) {
307
+ return result;
308
+ }
243
309
  if (field.localized) {
244
310
  result[field.name] = {};
245
311
  const textsByLocale = {};
246
312
  textPathMatch.forEach((row)=>{
247
313
  if (typeof row.locale === 'string') {
248
- if (!textsByLocale[row.locale]) textsByLocale[row.locale] = [];
314
+ if (!textsByLocale[row.locale]) {
315
+ textsByLocale[row.locale] = [];
316
+ }
249
317
  textsByLocale[row.locale].push(row);
250
318
  }
251
319
  });
@@ -261,20 +329,25 @@ export const traverseFields = ({ adapter, blocks, config, dataRef, deletions, fi
261
329
  transformHasManyText({
262
330
  field,
263
331
  ref: result,
264
- textRows: textPathMatch
332
+ textRows: textPathMatch,
333
+ withinArrayOrBlockLocale
265
334
  });
266
335
  }
267
336
  return result;
268
337
  }
269
338
  if (field.type === 'number' && field.hasMany) {
270
339
  const numberPathMatch = numbers[`${sanitizedPath}${field.name}`];
271
- if (!numberPathMatch) return result;
340
+ if (!numberPathMatch) {
341
+ return result;
342
+ }
272
343
  if (field.localized) {
273
344
  result[field.name] = {};
274
345
  const numbersByLocale = {};
275
346
  numberPathMatch.forEach((row)=>{
276
347
  if (typeof row.locale === 'string') {
277
- if (!numbersByLocale[row.locale]) numbersByLocale[row.locale] = [];
348
+ if (!numbersByLocale[row.locale]) {
349
+ numbersByLocale[row.locale] = [];
350
+ }
278
351
  numbersByLocale[row.locale].push(row);
279
352
  }
280
353
  });
@@ -290,7 +363,8 @@ export const traverseFields = ({ adapter, blocks, config, dataRef, deletions, fi
290
363
  transformHasManyNumber({
291
364
  field,
292
365
  numberRows: numberPathMatch,
293
- ref: result
366
+ ref: result,
367
+ withinArrayOrBlockLocale
294
368
  });
295
369
  }
296
370
  return result;
@@ -300,7 +374,9 @@ export const traverseFields = ({ adapter, blocks, config, dataRef, deletions, fi
300
374
  if (field.localized) {
301
375
  result[field.name] = fieldData.reduce((selectResult, row)=>{
302
376
  if (typeof row.locale === 'string') {
303
- if (!selectResult[row.locale]) selectResult[row.locale] = [];
377
+ if (!selectResult[row.locale]) {
378
+ selectResult[row.locale] = [];
379
+ }
304
380
  selectResult[row.locale].push(row.value);
305
381
  }
306
382
  return selectResult;
@@ -316,6 +392,7 @@ export const traverseFields = ({ adapter, blocks, config, dataRef, deletions, fi
316
392
  valuesToTransform.push({
317
393
  ref: localizedFieldData,
318
394
  table: {
395
+ ...table,
319
396
  ...localeRow
320
397
  }
321
398
  });
@@ -338,7 +415,9 @@ export const traverseFields = ({ adapter, blocks, config, dataRef, deletions, fi
338
415
  const groupData = {};
339
416
  const locale = table._locale;
340
417
  const refKey = field.localized && locale ? locale : field.name;
341
- if (field.localized && locale) delete table._locale;
418
+ if (field.localized && locale) {
419
+ delete table._locale;
420
+ }
342
421
  ref[refKey] = traverseFields({
343
422
  adapter,
344
423
  blocks,
@@ -351,7 +430,8 @@ export const traverseFields = ({ adapter, blocks, config, dataRef, deletions, fi
351
430
  path: `${sanitizedPath}${field.name}`,
352
431
  relationships,
353
432
  table,
354
- texts
433
+ texts,
434
+ withinArrayOrBlockLocale: locale || withinArrayOrBlockLocale
355
435
  });
356
436
  if ('_order' in ref) {
357
437
  delete ref._order;